Math 如何计算摄影机视角(片段着色器中的每个片段)(WebGL/OpenGL)

Math 如何计算摄影机视角(片段着色器中的每个片段)(WebGL/OpenGL),math,opengl-es,webgl,raytracing,raycasting,Math,Opengl Es,Webgl,Raytracing,Raycasting,我在片段着色器中给出了所有三个矩阵(模型、视图、投影)。现在我想计算每个片段的视角。摄像机的透视角度为45°。我怎么做?有了这个,我想从相机模拟一个观察光线的原点。谢谢 您需要计算投影·视图·模型的倒数,并将其作为着色器的进一步统一(固定函数兼容性确实提供了一个gl\u ModelViewProjectionMatrixInverse)。使用此选项取消投影点(0,0,0,1)和(0,0,-1,1)。结果是模型空间中的两个点形成一条射线。您需要投影矩阵(这里我称为“proj”): 您的光线起源于世

我在片段着色器中给出了所有三个矩阵(模型、视图、投影)。现在我想计算每个片段的视角。摄像机的透视角度为45°。我怎么做?有了这个,我想从相机模拟一个观察光线的原点。谢谢

您需要计算投影·视图·模型的倒数,并将其作为着色器的进一步统一(固定函数兼容性确实提供了一个
gl\u ModelViewProjectionMatrixInverse
)。使用此选项取消投影点(0,0,0,1)和(0,0,-1,1)。结果是模型空间中的两个点形成一条射线。

您需要投影矩阵(这里我称为“proj”):


您的光线起源于世界的中心并指向视图方向的端点,这对吗?这条光线与视图平面正交吗?我实际上需要的是来自摄影机的光线原点,而不是来自视图平面的光线原点。所以,我想我需要模型视图矩阵的逆矩阵,而不是模型视图投影矩阵?第四点的坐标是多少?到目前为止我的代码:mvpMatrix=mat4.multiply(pMatrix,mat4.multiply(vMatrix,mMatrix));mvpMatrixInv=mat4.逆(mvpMatrix);gl.uniformMatrix4fv(shaderProgram.viewDir,false,mvpMatrixInv)啊,忘了说:我需要在片段着色器中指向当前片段的光线。
tangent_x = 1/proj[0][0];
tangent_y = 1/proj[1][1];

angle_x = arctan(tangent_x);
angle_y = arctan(tangent_y);