这怎么讲呢?
首先我们的数学库是D3D向的,不是不用OpenGL,而是D3D坐标系更加符合人的主观逻辑(至少我这样认为).这两个函数在D3D里和OpenGL里都有似乎OpenGL没有Unproject(我们是不用GL辅助库的,glut是什么?可以吃吗?),因为要支持两套图形,所以不能偏心用其中一个的,蛋疼啊.我的数学其实并不好,只好硬推了:
//世界空间坐标转像素空间坐标
VECTOR3 *Vec3Project(VECTOR3* pOut,const VECTOR3 *pV,const VIEWPORT *pViewport,
const MATRIX* pProjection,
const MATRIX* pView,
const MATRIX* pWorld)
{
MATRIX vw=(*pWorld)*(*pView)*(*pProjection);
VECTOR4 in(pV->_x,pV->_y,pV->_z,1.0f);
VECTOR4 out;
Vec4Transform(&out,&in,&vw);
VECTOR3 Temp;
F32 HW=pViewport->_Width/2.0f;
F32 HH=pViewport->_Height/2.0f;
F32 DL=pViewport->_Far-pViewport->_Near;
Temp._x=pViewport->_X+(out._x/out._w+1.0f)*HW;
Temp._y=pViewport->_Y+(1.0f-out._y/out._w)*HH;
Temp._z=pViewport->_Near+(out._z/out._w)*DL;
if(pOut){
(*pOut)=Te