空间坐标和屏幕坐标相互换

来源:互联网 发布:土木工程需要的软件 编辑:程序博客网 时间:2024/06/11 22:48

d3d中操作

可以用D3DXVec3Project从3D坐标转换到屏幕坐标
同时可以用D3DXVec3UnProject将屏幕坐标转换成3D坐标!

 


gl里的操作

CPoint D3DToScreen2D(CPoint3d pt3D ,/
     const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4])
{
 GLdouble x,y,z;

 gluProject( pt3D.x, pt3D.y, pt3D.z,
  modelMatrix, projMatrix, viewport,
  &x, &y, &z);
 CPoint ptOut;
 ptOut.x = int(x);
 ptOut.y = viewport[3]-int(y);

 return ptOut;
}

应用:

CPoint CCityPlanView::GetPoint3DTo2D(CPoint3d pt3D)
{
 GLdouble    modelview[16];
 GLdouble    projection[16];
 GLint       viewport[4];
 wglMakeCurrent(m_hDC,m_hRC);
 glGetDoublev (GL_MODELVIEW_MATRIX, modelview);
 glGetDoublev (GL_PROJECTION_MATRIX, projection);
 glGetIntegerv (GL_VIEWPORT, viewport);

 CPoint ptOut = D3DToScreen2D(pt3D,modelview,projection,viewport);

 wglMakeCurrent(m_hDC,NULL);
 return ptOut;
}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qianlima888/archive/2007/10/24/1840984.aspx

原创粉丝点击