我正在学习webgl,我在这个问题上卡了半天。
我正在以这种方式进入我的场景:
mat4.rotate(mvMatrix, degToRad(-angle), [0, 1, 0]);
mat4.translate(mvMatrix, [-currentX, 0, -currentZ]);
我应该如何获得我面前一个点的坐标(x/z)(比如说 10 个单位)?
模型视图矩阵是从模型局部空间到视图空间的变换矩阵。现在,“您面前 10 个单位”的点可以在任何地方,具体取决于您感兴趣的空间。但是假设您想知道您面前 10 个单位的点在模型空间中的位置。好吧,没有这么简单的事情。
观察者前面 10 个单位的点位于 (0,0,-10) 的视图空间中。所以你现在要做的就是应用逆变换,即将该向量与逆ov mvMatrix相乘:
mat4.inverse(mvMatrix) * vec4(0,0,-10,1);
如果您想知道最后一个1
元素来自哪里以及为什么将 4 元素向量用于 3 维坐标(这是您应该真正想知道的事情),请阅读有关齐次坐标。