我正在做一个项目,我必须计算给定世界点的屏幕坐标。
我阅读了一些材料并将此任务组织为四个子任务:
- 将世界点与我的相机的逆 TRS 矩阵相乘,以接收相机坐标中的点。
将相机坐标中的点与投影矩阵相乘以接收裁剪坐标中的点。投影矩阵如下所示
(1 / tan (fov * 0.5 * PI / 180)), 0, 0, 0; 0, (1 / tan (fov * 0.5 * PI / 180)), 0, 0; 0, 0, - ((f + n) / (f - n)), - (2 * f * n / (f - n)); 0, 0, -1, 0;
- 将裁剪坐标中的点乘以1 /w以接收ndc 中的点。
- 将ndc转换为屏幕坐标。
这工作正常,但我遇到了一些奇怪的结果和错误。事实证明,如果相机坐标中点的 z 值为 0,则裁剪坐标中点的 w 值变为0。这导致在步骤 3 中除以 0。
我是否忽略了什么或者这是正常的?有没有办法计算相机z轴上点的屏幕位置,或者我应该检查是否(z == 0)
并返回屏幕的中间?