【发布时间】:2013-09-25 01:55:02
【问题描述】:
我正在学习webgl,在这个问题上卡了半天。
我正在以这种方式进入我的场景:
mat4.rotate(mvMatrix, degToRad(-angle), [0, 1, 0]);
mat4.translate(mvMatrix, [-currentX, 0, -currentZ]);
我应该如何获得我面前一个点的坐标 (x/z)(比如说 10 个单位)?
【问题讨论】:
我正在学习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 维坐标(这是您应该真正想知道的),请阅读 homogenous coordinates。
【讨论】: