计算视图投影空间的位置在程序中和在shader中有什么区别?
首先,我不知道标题那样表达对不对:毕竟是在屏幕上看效果。
在应用程序中我是这么算的:
D3DXVECTOR3 OutVec ;//希望输出的矢量
D3DXVECTOR3 WorldPos ;//在世界空间中的一个点的位置
D3DXMATRIX ViewProjectMatrix = CamViewMatrix * CamProjectMatrix;//视图和投影矩阵相乘
D3DXVec3TransformCoord( &OutVec , &WorldPos , &ViewProjectMatrix ) ;
把WorldPos传入shader后就这样了:
OutVec = mul( WorldPos ,ViewProjectMatrix ).xyz ;
我验证了下两种算法下的Z值就有很大差别。
网上找了两段话:“投影矩阵(Project Matrix)本意是将不规则的视图体(View Volume)变换成一个单位立方体,但投射到屏幕时,Z被丢弃了”
“投影矩阵前的顶点w总是为1, 正射投影矩阵后的顶点w还是为1, 但透视投影矩阵后的顶点w开始不为1”
我用的就是透视投影相机,但D3DXVec3TransformCoord()函数已经把OutVec的w分量置为1了,为什么还不一样呢?
shader中的mul()函数又是怎样计算的,我还不清楚。
如果在应用程序中计算,怎样才能得到与shader中一致的结果呢?
谢谢各位指点!
[解决办法]