在我的简单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]
我已经按照这种方法来模拟顶点着色器中计算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进行所有计算。