如何管理透视转换?

时间:2013-03-11 16:14:43

标签: opengl matrix webgl perspective

如何将(x,y,z)坐标从透视金字塔内转换为透视立方体内的(x',y',z')坐标? (在右手坐标系中)

我尝试将此透视矩阵与(x,y,z)向量相乘,但结果不符合我的预期。

projection matrix

我尝试过:fov = 70°,aspect = 4/3,near = 100,far = 100; x = 100,y = 100,z = -300;

结果是(158.28, 211.05, -344.44)

我想要的只是:

plan

提前致谢,

1 个答案:

答案 0 :(得分:2)

虽然透视矩阵通常会转换空间,使得所需的视锥体映射到规范体积(可能是单位立方体,但并非所有图形管道都相同 - 例如,D3D与OpenGL不同),此卷为在均匀(投射)坐标中描述。这是因为实际投影是非线性变换,但使用投影坐标系允许对管道的大部分使用线性变换。

因此,如果您想要3D(或2D)空间中的点,则仍需要执行投影。

这只是一个分歧。

当你将一个点(x,y,z,1)乘以透视矩阵时,你会得到一个矢量-4(x',y',z',w')。然后,您需要将x',y'和z'除以w'来进行投影。