Opengl 如何管理透视图转换?

Opengl 如何管理透视图转换?,opengl,matrix,webgl,perspective,Opengl,Matrix,Webgl,Perspective,如何将透视金字塔内部的(x,y,z)坐标转换为透视立方体内部的(x',y',z')坐标?(在右手坐标系中) 我试图将这个透视矩阵与(x,y,z)向量相乘,但结果不是我所期望的 我试过:视场=70°,纵横比=4/3,近距离=100,远距离=100; x=100,y=100,z=300 结果是(158.28211.05,-344.44) 我想要的是: 提前感谢,尽管透视矩阵通常会变换空间,使所需的视锥体映射到标准体积(可以是单位立方体,但并非所有图形管道都相同-例如,D3D不同于OpenGL),

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

我试图将这个透视矩阵与
(x,y,z)
向量相乘,但结果不是我所期望的

我试过:视场=70°,纵横比=4/3,近距离=100,远距离=100; x=100,y=100,z=300

结果是
(158.28211.05,-344.44)

我想要的是:


提前感谢,

尽管透视矩阵通常会变换空间,使所需的视锥体映射到标准体积(可以是单位立方体,但并非所有图形管道都相同-例如,D3D不同于OpenGL),但该体积是在齐次(投影)坐标中描述的。这是因为实际投影是一种非线性变换,但使用投影坐标系允许对大部分管道使用线性变换

因此,如果需要三维(或二维)空间中的点,仍然需要执行投影

这只是一个分歧


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

如果将“近”和“远”都设置为相同的值,则会得到一个除以零的结果。那是打字错误吗?