那么这是正确的吗?新矩阵 = 当前矩阵 + ((变换坐标 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
来加载现成的矩阵。