math - 从 3D 中的变换矩阵计算 'up vector'

标签 math 3d vector matrix

我刚刚在 3D 项目中遇到了奇怪的问题。每个人都知道计算 LookAt 向量的算法,但是从变换矩阵计算“向上”向量并不容易(或者至少我可能只是错过了一些东西)。

问题如下:

“向上”向量是 (0, 1, 0) 用于单位旋转矩阵并随矩阵旋转,但不缩放也不平移。如果你有简单的旋转矩阵程序很容易(乘以向量和矩阵)。但是如果矩阵还包含平移和旋转(例如它是通过乘以其他几个矩阵产生的),这将不起作用,因为向量将被平移和缩放。

我的问题是如何从单个变换矩阵中得到这个“向上”向量,假设向量 (0, 1, 0) 对应于单位旋转矩阵。

最佳答案

翻译实际上确实会影响它。假设在示例中,变换矩阵没有进行任何缩放或旋转,但确实在 Z 方向上将其平移了 2 个单位。然后当你变换 (0,1,0) 时你得到 (0,1,2),然后将它归一化得到 (0,1/sqrt(5), 2/sqrt(5))。

你想要做的是取(0,1,0)的变换和(0,0,0)的变换之间的差,然后对得到的向量进行归一化。在上面的示例中,您将根据需要将 (0,1,2) 减去 (0,0,2)(0,0,2 是零向量的变换)得到 (0,1,0)。

关于math - 从 3D 中的变换矩阵计算 'up vector',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1121675/

相关文章:

javascript - 使用 D3.js 的 3D 条形图的透视问题

3d - 如何在处理中使用矩阵旋转向量?

c++ - OpenGL 使用 std::vector 和 glm::vec3

java - 为什么这个数学函数在 Java 和 JavaScript 中返回不同的值?

python - 递减范围内的乘积之和

algorithm - 如何平滑随机分布?

math - 使用数学从 Markdown 创建一个 ePub 文件

iphone - 适用于iOS的OpenGL ES 2.0-多次调用glDrawElements导致EXC_BAD_ACCESS

C++ std::push_heap 破坏堆/不尊重比较器

c++ - 我可以在 C++ 中通过 operator[] 正确设置 std::vector 的第 n 个值吗?