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;
}