Function 复制glTranslate

Function 复制glTranslate,function,opengl,translation,Function,Opengl,Translation,我需要想出一个类似于glTranslate的函数来了解事物是如何工作的。我已经读到glTranslate参数提供矩阵被转换的x、y、z坐标。我应该把它和翻译公式联系起来: x'=x+tx;t=换算系数 那么这是正确的吗 新矩阵=当前矩阵+((变换坐标x,y,z)*当前矩阵) 当前矩阵由glMatrixMode处理正确吗?至于乘法,我假设这涉及到glMultMatrix,但是如何实现这个给定的glMultMatrix有一个常数作为参数,并且glTranslate提供坐标 那么这是正确的吗? 新矩阵

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

x'=x+tx;t=换算系数

那么这是正确的吗

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

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

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

没有

正确的实现是

M' = M · T
在哪里

当前矩阵由glMatrixMode处理是否正确

至于乘法,我假设这涉及到
glMultMatrix

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

但是如果给定glMultMatrix有一个常数作为参数,我该如何实现这一点呢

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

M' = M · T
因此,您所要做的就是创建一个如上图所示的转换矩阵T(请注意OpenGL是column major,因此它在代码中看起来是“转置的”),并将其传递给
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
加载现成的矩阵。

您所说的固定函数管道是什么意思?德国劳埃德船级社?并且
glLoadMatrix
是否与您提供的GLfloat T[16]相同?它会根据需要改变,比如说,缩放和旋转,对吗?相应地,基于缩放和旋转矩阵。@Atikhamad:Fixed函数是所有不涉及着色器的函数。此外,在兼容模式下,某些固定函数状态由着色器中可用的内置变量名称反映。我建议不要使用它们,这会使您的程序更难针对现代渲染路径进行优化。glLoadMatrix将只复制您提供的矩阵,并覆盖当前所选(glMatrixMode)矩阵堆栈顶部的任何内容。固定函数和着色器对我来说是非常新的。我会抬起头来更好地了解他们。谢谢你的指点。
GLfloat T[16] = {
    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    x, y, z, 1 };

glMultMatrixf(T);