目前我正在学习用于 Android 开发的 OpenGL ES。现在我必须处理 ModelMatrix
和 CameraMatrix
但我有一些问题:在 OpenGL 中我们总是使用 4x4 矩阵,我理解为什么我们这样做,但我不知道不同的值存储在这个矩阵中的什么地方。例如旋转和位置。假设我们有这个 4x4 矩阵:
0 1 2 3
-----------------
0 | | | | |
-----------------
1 | | | | |
-----------------
2 | | | | |
-----------------
3 | | | | |
-----------------
你能告诉我在哪里可以找到这个矩阵中对象/相机的当前旋转
、位置
和比例
吗?这是针对同一位置的每个矩阵吗?
最佳答案
为简单起见,我假设矩阵仅包含旋转、平移和均匀缩放的组合。一般转换矩阵可以表示其他类型的翻译,例如:
- 非均匀缩放。
- 剪切变换。
旋转和缩放位于矩阵左上角的 3x3 部分,它们是每个方向上索引为 0 到 3 的元素。如果没有缩放,则此 3x3 矩阵的每个行向量的长度为 1.0。如果存在缩放,则可以通过计算这些行向量中的任何一个的长度来计算缩放因子:
scalingFactor = sqrt(m00 * m00 + m01 * m01 + m02 * m02);
然后通过将 3x3 子矩阵的所有元素除以缩放因子来获得旋转矩阵:
[ m00 m01 m02 ]
rotationMatrix = (1.0 / scalingFactor) * [ m10 m11 m12 ]
[ m20 m21 m22 ]
翻译向量在最后一列的前 3 个元素中:
[ m03 ]
translationVector = [ m13 ]
[ m23 ]
考虑到所有这些,请记住 OpenGL 期望矩阵以列优先顺序存储。所以矩阵在内存中的排列是:
m00 m10 m20 m30 m01 m11 ...
关于android - 从 OpenGL 中的矩阵获取位置、旋转和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27655885/