那么这是正确的吗? 新矩阵=当前矩阵+((变换坐标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
加载容易准备的矩阵。
固定功能管道是什么意思? gl_参考?和你提供的GLfloat T [16]一样,是'glLoadMatrix'?它会根据需要进行更改,比如缩放和旋转,对吗?因此基于比例和旋转矩阵。 – 2013-04-26 13:43:59
@AtikahMohamad:固定功能是一切**不涉及着色器。同样在兼容模式中,某些固定的函数状态由着色器中可用的内置变量名称'gl_ ...'反映。我建议不要使用它们,它会让你的程序更难以打磨现代渲染路径。 glLoadMatrix只会复制提供的矩阵并覆盖当前选定(glMatrixMode)矩阵堆栈顶部的任何内容。 – datenwolf 2013-04-26 14:47:39
固定功能和着色器对我来说是非常新的。我会查找更好地了解他们。感谢您的指点。 – 2013-04-26 15:03:45