OpenGL中的矩阵

时间:2011-01-27 09:34:39

标签: math opengl 3d

所以我学习OpenGL作为主要资源有“红皮书”。我正在阅读矩阵代数,旋转/缩放/变换矩阵,一切都很好,但我只是没有一个简单的事情。假设函数glLoadIdentity()。它设置默认矩阵4x4。因此它设置3个顶点和1个点:(1,0,0)(0,1,0)(0,0,1)个顶点,(0,0,0)个点。但我的问题是,这些对应的是什么?一般来说,OpenGL中矩阵对应的是什么?我知道这些是轴心的方向。但是什么呢?相机?

2 个答案:

答案 0 :(得分:5)

OpenGL矩阵仅对应于在一个坐标空间中定义到另一个坐标空间的变换,移动对象,矢量和点。如果在一个坐标空间中有一个矩阵M(m11 - m44,如下所示)和一个向量V(v1 - v4),那么乘以M将转换你的V向量(可以描述运动向量,对象位置或对象顶点) )到不同坐标空间的W(w1-w4):

| m11 m12 m13 m14 |   | v1 |     | w1 |
| m21 m22 m23 m24 |   | v2 |     | w2 |
| m31 m32 m33 m34 | X | v3 |  =  | w3 |
| m41 m42 m43 m44 |   | v4 |     | w4 |

其中:

w1 = m11 * v1 + m12 * v2 + m13 * v3 + m14 * v4
w2 = m21 * v1 + m22 * v2 + m23 * v3 + m24 * v4
w3 = m31 * v1 + m32 * v2 + m33 * v3 + m34 * v4
w4 = m41 * v1 + m42 * v2 + m43 * v3 + m44 * v4

因此,如果我们将v1 - v3视为旧的x,y和z坐标并将v4设置为1,那么我们可以将w1 - w3视为新的x,y和z坐标我们可以做一些事情见:
  m11是从旧x坐标到新坐标的乘数,因此它用于比例变换(类似于m22和m33)
  m14乘以1并添加到新的x坐标,以便用于翻译(同样适用于m24和m34)

轮换有点难以概念化,但它们是通过将其他矩阵值设置为适当的值来完成的。您可以在此处阅读更多内容:http://gpwiki.org/index.php/Matrix_math

答案 1 :(得分:0)

默认矩阵只是单位矩阵:

/1 0 0 0\
|0 1 0 0|
|0 0 1 0|
\0 0 0 1/

在更一般的情况下(忽略视角和可能的其他奇特变换)......

/a d g j\
|b e h k|
|c f i l|
\0 0 0 1/

...变换坐标系的组成如下:

         /a\
X-axis = |b|
         \c/

         /d\
Y-axis = |e|
         \f/


         /g\
Z-axis = |h|
         \i/

         /j\
Origin = |k|
         \l/

如果将这些与身份矩阵相关联,您可以看到“3个顶点和1个点”的来源。

除了单位矩阵之外,这适用于任何变换 - 旋转,平移等 - 将底行保持在(0 0 0 1),并提供了一种可视化此类变换的简单方法。简单地将上面的四个组成部分视为表示轴(1 0 0),(0 1 0),(0 0 1)和原点(0 0 0)在被矩阵变换后最终的位置(请记住,轴不是绝对的,而是相对于原点。)