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