复制glTranslate

时间:2013-04-26 05:28:24

标签: function opengl translation

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

x'= x + tx; t =翻译因子

这是正确的吗?

new matrix = current matrix +((transform coordinates x,y,z)* current matrix)

当前矩阵由glMatrixMode正确处理?至于乘法,我认为这涉及glMultMatrix,但是如果glMultMatrix有一个常数作为参数而glTranslate提供坐标,我会如何实现这一点?

1 个答案:

答案 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加载容易准备的矩阵。