WebGL - 反转变换以从顶点着色器中的gl_Position检索顶点位置

时间:2013-09-04 20:53:37

标签: webgl vertex-shader

在我的简单WebGL应用程序中,我计算gl_position(顶点着色器)如下:

gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);

aVertexPosition包含(世界坐标)顶点位置。

我一直试图用gl_position进行反向变换以获得aVertexPosition的值(x,y和z),但似乎这个过程对我来说有点棘手。

我在应用中使用的数据和矩阵:

  • 投影矩阵:

    [1.0282340049743652, 0,                  0,                    0, 
    0,                   1.5423510074615479, 0,                    0, 
    0,                   0,                  -1.0004000663757324, -1, 
    0,                   0,                  -20.00400161743164,   0] 
    
  • 模型 - 视图矩阵:

    [203830718994,          0.563721776008606,   -0.5349519848823547, 0, 
    -3.6513849721586666e-9, 0.6883545517921448,   0.7253743410110474, 0, 
    0.7771459817886353,     -0.45649290084838867, 0.4331955313682556, 0, 
    -0.00007212938362499699,-1000,                -9290,              1] 
    
  • aVertexPosition:[10.0,15.0,72.0]
  • vertex:是aVertexPosition的同类版本:[10.0,15.0,72.0,1.0]

我已经按照这种方法来模拟顶点着色器中计算gl_position的过程:

    mat4.multiply(mvpro, modelViewMatrix,projectionMatrix);
    vec4.transformMat4(vertex, vertex, mvpro);

作为上述计算的结果,我得到了新的顶点(应该与gl_position中的值相同):

    [-65.04684448242188, 72063.734375, 668851.375, -72 ]

然后,我应用以下反向变换来获取原始顶点的坐标:

    mat4.invert(invMvpro,mvpro);
    vec4.transformMat4(vertex,vertex, invMvpro);

现在顶点是:

    [10.014994621276855, 14.986272811889648, 72, 1.0005537271499634].

如您所见,上述值与原始值相比略有偏差[10,15,72]。

我使用glMatrix版本2进行所有计算。

0 个答案:

没有答案