android – 从OpenGL中的矩阵获取位置,旋转和缩放

目前我正在学习用于Android开发的OpenGL ES.现在我正处于我必须处理ModelMatrix和CameraMatrix的地步,但我有一些问题:在OpenGL中我们总是使用4×4矩阵,我理解为什么我们这样做但我不知道不同的值在哪里存储在这个矩阵中.例如旋转和位置.假设我们有这个4×4矩阵:

      0   1   2   3
    -----------------
 0  |   |   |   |   |
    -----------------
 1  |   |   |   |   |
    -----------------
 2  |   |   |   |   |
    -----------------
 3  |   |   |   |   |
    -----------------

你能告诉我在哪里可以找到该矩阵中物体/摄像机的当前旋转,位置和比例吗?这是针对同一位置的每个矩阵吗?

最佳答案
为了简单起见,我假设矩阵只包含旋转,平移和均匀缩放的组合.一般转换矩阵可以表示其他类型的翻译,例如:

>非均匀缩放.
>剪切变换.

旋转和缩放位于矩阵的左上角3×3部分,它们是每个方向上索引为0到3的元素.如果没有缩放,则此3×3矩阵的每个行向量的长度为1.0.如果存在缩放,则可以通过计算任何这些行向量的长度来计算缩放因子:

scalingFactor = sqrt(m00 * m00 + m01 * m01 + m02 * m02);

然后通过将3×3子矩阵的所有元素除以缩放因子来获得旋转矩阵:

                                         [ 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中的矩阵获取位置,旋转和缩放 - 代码日志