2013-04-26 35 views
0

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

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

那么这是正确的吗?

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

当前矩阵是照顾由glMatrixMode正确?至于乘法,我认为这涉及glMultMatrix,但我怎么做到这一点给出glMultMatrix有一个常数作为参数和glTranslate提供坐标?

回答

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

+0

固定功能管道是什么意思? gl_参考?和你提供的GLfloat T [16]一样,是'glLoadMatrix'?它会根据需要进行更改,比如缩放和旋转,对吗?因此基于比例和旋转矩阵。 – 2013-04-26 13:43:59

+0

@AtikahMohamad:固定功能是一切**不涉及着色器。同样在兼容模式中,某些固定的函数状态由着色器中可用的内置变量名称'gl_ ...'反映。我建议不要使用它们,它会让你的程序更难以打磨现代渲染路径。 glLoadMatrix只会复制提供的矩阵并覆盖当前选定(glMatrixMode)矩阵堆栈顶部的任何内容。 – datenwolf 2013-04-26 14:47:39

+0

固定功能和着色器对我来说是非常新的。我会查找更好地了解他们。感谢您的指点。 – 2013-04-26 15:03:45