目前我正在学习用于 Android 开发的 OpenGL ES。现在我正处于必须处理的时刻ModelMatrix
和CameraMatrix
但我对此有一些疑问:在 OpenGL 中,我们总是使用 4x4 矩阵,我理解为什么要这样做,但我不知道不同的值存储在这个矩阵中的位置。例如旋转和位置。假设我们有这个 4x4 矩阵:
0 1 2 3
-----------------
0 | | | | |
-----------------
1 | | | | |
-----------------
2 | | | | |
-----------------
3 | | | | |
-----------------
你能告诉我在哪里可以找到当前的rotation
, position
和scale
该矩阵中的物体/相机的数量?这是针对同一位置的每个矩阵吗?
为了简单起见,我假设矩阵仅包含旋转、平移和均匀缩放的组合。一般变换矩阵可以表示其他类型的翻译,例如:
旋转和缩放位于矩阵的左上角 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 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)