Cil*_*nco 4 android opengl-es matrix
目前我正在学习用于Android开发的OpenGL ES.现在我在这里我要处理点ModelMatrix和CameraMatrix,但我有它的一些问题:在OpenGL中我们总是用4x4矩阵,我理解为什么我们这样做,但我不知道在哪里不同的值存储在这个矩阵.例如旋转和位置.假设我们有这个4x4矩阵:
0 1 2 3
-----------------
0 | | | | |
-----------------
1 | | | | |
-----------------
2 | | | | |
-----------------
3 | | | | |
-----------------
Run Code Online (Sandbox Code Playgroud)
你能告诉我在哪里可以找到当前的rotation,position以及scale这个矩阵中的物体/相机吗?这是针对同一位置的每个矩阵吗?
为了简单起见,我假设矩阵只包含旋转,平移和均匀缩放的组合.一般转换矩阵可以表示其他类型的翻译,例如:
旋转和缩放位于矩阵的左上角3x3部分,它们是每个方向上索引为0到3的元素.如果没有缩放,则此3x3矩阵的每个行向量的长度为1.0.如果存在缩放,则可以通过计算任何这些行向量的长度来计算缩放因子:
scalingFactor = sqrt(m00 * m00 + m01 * m01 + m02 * m02);
Run Code Online (Sandbox Code Playgroud)
然后通过将3×3子矩阵的所有元素除以缩放因子来获得旋转矩阵:
[ m00 m01 m02 ]
rotationMatrix = (1.0 / scalingFactor) * [ m10 m11 m12 ]
[ m20 m21 m22 ]
Run Code Online (Sandbox Code Playgroud)
翻译向量位于最后一列的前3个元素中:
[ m03 ]
translationVector = [ m13 ]
[ m23 ]
Run Code Online (Sandbox Code Playgroud)
有了这一切,请记住,OpenGL期望以列主顺序存储矩阵.所以矩阵在内存中的排列是:
m00 m10 m20 m30 m01 m11 ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6349 次 |
| 最近记录: |