我需要提出一个类似于glTranslate
的函数来了解事情是如何工作的。我已经读过glTranslate参数提供了转换矩阵的x,y,z坐标。我应该把它与翻译公式联系起来:
x'= x + tx; t =翻译因子
这是正确的吗?
new matrix = current matrix +((transform coordinates x,y,z)* current matrix)
当前矩阵由glMatrixMode
正确处理?至于乘法,我认为这涉及glMultMatrix
,但是如果glMultMatrix
有一个常数作为参数而glTranslate
提供坐标,我会如何实现这一点?
答案 0 :(得分:1)
这是正确的吗? new matrix = current matrix +((变换坐标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
加载容易准备的矩阵。