0

在我的简单 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 进行所有计算。

4

0 回答 0