这真让我抓狂!任何帮助,将不胜感激。
我有一个绘制到屏幕上的 3d 模型。这绝对有效,并且模型位于屏幕范围内。我想计算几个顶点在 CPU 上的屏幕坐标。
为此,我将这些顶点的位置乘以模型/视图/投影矩阵,就像我的顶点着色器一样:
XMVECTOR pos = XMVectorSet(input.x, input.y, input.z, 1);
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.model));
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.view));
pos = XMVector3Transform(pos, XMLoadFloat4x4(&m_constantBufferData.projection));
然后我将 pos.X 和 pos.Y 除以 pos.Z。
如何解释 pos 的结果?我期待它的 X 和 Y 坐标介于 0 和 1 之间,或者可能是 -1 和 1,但我得到的数字是 -3。我做错了什么吗?
作为记录,这是顶点着色器的一部分:
float4 pos = float4(input.pos, 1.0f);
pos = mul(pos, model);
pos = mul(pos, view);
pos = mul(pos, projection);
output.pos = pos;
预先感谢您的任何帮助!:)