【问题标题】:How to calculate camera view angle (per Fragment in Fragment-Shader) (WebGL / OpenGL)如何计算相机视角(片段着色器中的每个片段)(WebGL / OpenGL)
【发布时间】:2012-12-29 22:06:02
【问题描述】:

我已经在片段着色器中给出了所有三个矩阵(模型、视图、投影)。现在我喜欢计算每个片段的视角。相机的视角例如45°。我该怎么做?有了这个,我喜欢模拟来自相机的观察光线原点。谢谢!

【问题讨论】:

    标签: math opengl-es webgl raytracing raycasting


    【解决方案1】:

    您需要计算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);
    • 啊,忘了说:我需要在片段着色器中指向当前片段的射线。
    【解决方案2】:

    你需要投影矩阵(这里我叫“proj”):

    tangent_x = 1/proj[0][0];
    tangent_y = 1/proj[1][1];
    
    angle_x = arctan(tangent_x);
    angle_y = arctan(tangent_y);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多