请问一个3D变换的问题
现在我有一个空间坐标点,已知camera的坐标和视角以及矩阵,已知投影的矩阵,已知viewport,怎么获得这个点投影在屏幕上的坐标?
我的做法是 :先把camera和proj的矩阵相乘,再去乘以viewport对应的矩阵,再用这个矩阵去变换那个坐标点的向量,怎么出来的就是不对呢?
D3DXVECTOR4 g_vec; //变换后的坐标
D3DXVECTOR4 vec = D3DXVECTOR4(0.0f,0.0f,0.0f,1.0f); //在world坐标中的原始坐标
D3DVIEWPORT9 vp; //视口
D3DXMATRIX mvp; //视口变换的矩阵
DXUTGetD3D9Device()->GetViewport(&vp); //获取当前视口
mvp._11 = (vp.Width) / 2;
mvp._22 = (-vp.Height) / 2;
mvp._33 = vp.MaxZ - vp.MinZ;
mvp._41 = vp.X + (vp.Width)/2;
mvp._42 = vp.Y + (vp.Height)/2;
mvp._43 = vp.MinZ;
mvp._44 = 1.0f;
D3DXMATRIX mtemp; //综合变换矩阵
D3DXMatrixMultiply(&mtemp,g_Camera.GetMatrixCamera(),g_Camera.GetMatrixProj()); //先把视角矩阵和投影矩阵相乘
D3DXMatrixMultiply(&mtemp,&mtemp,&mvp); //再乘视口变换矩阵
D3DXVec4Transform(&g_vec,&vec,&mtemp); //再用综合变换矩阵去变换vec得到g_vec
在视角正对(0,0,0)的时候,算出来应该是处于屏幕正中才对,但是结果就是不对,郁闷,求助