我目前正在 GLSL 中进行一些光线转换,效果很好。无论如何,我现在想从正交投影转到透视投影,但我不确定如何正确执行此操作。
关于如何使用带有光线转换的投影矩阵有什么好的链接吗?
我什至不确定我必须将矩阵应用于什么(可能以某种方式应用于射线方向?)。现在我这样做(伪代码):
vec3 rayDir = (0.0, 0.0, -1.0); //down the negative -z axis in parallel;
但现在我想使用与 gluPerspective 函数类似的 projMatrix,以便我可以简单地定义纵横比、fov 以及近平面和远平面。
所以基本上,有人可以给我提供一大块代码来设置类似于
gluProjection
的 proj 矩阵吗?其次告诉我将它与 rayDirection 相乘是否正确?
最佳答案
要将光线射入场景中,您首先要在应用 投影矩阵后(在精神上)将自己置于世界 中。这意味着视锥体现在是一个 2x2x1 的盒子 - 这被称为规范 View 体积。 (盒子的对角是 (-1, -1, 0) 和 (1, 1, -1)。)您生成的光线将(在投影后变换的世界中)从原点开始并击中后方剪切平面(位于 z=-1)。第一条射线的“目的地”应该是 (-1, 1, -1) - 远剪裁平面的左上角。 (后续光线“目的地”是根据视口(viewport)的分辨率计算的。)
现在您在规范 View 体积中有这条光线,您需要将其放入标准世界坐标中。你怎么做到这一点?简单 - 只需乘以投影矩阵的倒数,通常称为查看变换。这会将您的光线放入与场景中的对象相同的坐标系中,从而使光线碰撞测试变得简单而轻松。
关于opengl - 光线转换 : how to properly apply a projection matrix?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2354821/