我正在尝试在栅格化 3D 点的过程中进行简单的透视投影。这是所有矩阵和其他信息。所有矩阵都是行专业的。坐标系是右手坐标系。
相机在 [0,0,-1] 并且点在 [0,0,0] (对于矩阵运算,w=1)
模型视图矩阵(凸轮矩阵的逆,即 tx = 0;ty = 0;tz = 1):
[1 0 0 tx]
[0 1 0 ty]
[0 0 1 tz]
[0 0 0 1 ]
透视矩阵:
[f/aspect,0,0,0]
0,f,0,0
0,0,-(near+far)/(near-far),2*far*near/(near-far)
0,0,1,0]
aspect 等于 1,因为视口是方形的。远 = 100 近 = 0.1 f = 1/tan(fovDegress*M_PI/360);
结果矩阵是:
1.94445, 0, 0, 0
0, 1.944445, 0, 0
0, 0, 1.020202, -2.020202
0, 0, 1, 0
现在我将模型视图矩阵和投影矩阵应用于点向量,然后我得到一个新点 Pv = {x,y,z,w} 然后我得到归一化坐标 x' = x/w ; y' = y/w; z' = z/w; x' 和 y' 始终位于 [-1,1] 之间,只要该点位于平截头体中。但 z' 的情况并非如此。随着该点靠近相机,z' 值呈指数增长。当点位于 [0,0,0] 时,z' 值等于 -1。
现在,我需要剪掉一些线,所以我需要 z' 值介于 [1,-1] 之间。我想知道我的程序有什么问题。谢谢你。