0

我需要想出一个类似的功能glTranslate来了解事情是如何工作的。我读过 glTranslate 参数提供矩阵被转换的 x、y、z 坐标。我应该把它与翻译公式联系起来:

x' = x + tx; t = 平移因子

那么这是正确的吗?

新矩阵 = 当前矩阵 + ((变换坐标 x, y, z)*当前矩阵)

当前矩阵被glMatrixMode正确处理了吗?至于乘法,我认为这涉及glMultMatrix但我如何实现这个给定glMultMatrix的有一个常数作为参数并glTranslate提供坐标?

4

1 回答 1

1

那么这是正确的吗?新矩阵 = 当前矩阵 + ((变换坐标 x, y, z)*当前矩阵)

不。

正确的实现是

M' = M · T

在哪里

    | 1 0 0 x |
    | 0 1 0 y |
T = | 0 0 1 z |
    | 0 0 0 1 |

当前矩阵由 glMatrixMode 处理对吗?

是的

至于乘法,我认为这涉及glMultMatrix

在实际的 OpenGL 驱动程序代码中可能不是,但在语义上是的

但是我如何实现这个给定的 glMultMatrix 有一个常数作为参数

对于调用glMultMatrix(T),OpenGL 执行操作

M' = M · T

因此,您所要做的就是创建一个如上所示的转换矩阵 T(请注意 OpenGL 是主要列,因此它在代码中看起来“转置”)并将其传递给glMultiMatrix.

GLfloat T[16] = {
    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    x, y, z, 1 };

glMultMatrixf(T);

但是,您根本不应该使用旧的固定函数管道和 OpenGL 矩阵操作方法。OpenGL 不是一个很好的数学库。最好使用 GLM 或 Eigen 或 linmath.h 之类的东西和自定义mat4着色器制服;或者,如果您坚持使用固定函数glLoadMatrix来加载现成的矩阵。

于 2013-04-26T08:03:52.023 回答