【发布时间】:2012-12-29 22:06:02
【问题描述】:
我已经在片段着色器中给出了所有三个矩阵(模型、视图、投影)。现在我喜欢计算每个片段的视角。相机的视角例如45°。我该怎么做?有了这个,我喜欢模拟来自相机的观察光线原点。谢谢!
【问题讨论】:
标签: math opengl-es webgl raytracing raycasting
我已经在片段着色器中给出了所有三个矩阵(模型、视图、投影)。现在我喜欢计算每个片段的视角。相机的视角例如45°。我该怎么做?有了这个,我喜欢模拟来自相机的观察光线原点。谢谢!
【问题讨论】:
标签: math opengl-es webgl raytracing raycasting
您需要计算Projection · View · Model 的倒数并将其作为进一步统一的值提供给着色器(固定功能兼容性确实提供了gl_ModelViewProjectionMatrixInverse)。使用它来取消投影点 (0,0,0,1) 和 (0,0,-1,1)。结果是模型空间中的两个点形成一条射线。
【讨论】:
mvpMatrix = mat4.multiply(pMatrix, mat4.multiply(vMatrix, mMatrix)); mvpMatrixInv = mat4.inverse(mvpMatrix); gl.uniformMatrix4fv(shaderProgram.viewDir, false, mvpMatrixInv);
你需要投影矩阵(这里我叫“proj”):
tangent_x = 1/proj[0][0];
tangent_y = 1/proj[1][1];
angle_x = arctan(tangent_x);
angle_y = arctan(tangent_y);
【讨论】: