使用OpenGL进行转换

时间:2013-12-06 18:06:35

标签: c++ opengl

我有一个对象我想应用一些转换(翻译)。我正在使用glTranslatef()函数。如何使用矩阵我知道它是怎么做的,但作为编程我不知道这样做。

1 个答案:

答案 0 :(得分:1)

OpenGL中的矩阵表示为以列为主的长度为16(4x4)的一维数组。请参阅chapter 3 of the OpenGL Red Book, section "General-Purpose Transformation Commands"

OpenGL具有函数glMultMatrix{f,d}(),用于将当前矩阵堆栈乘以新矩阵。这就是你将当前矩阵乘以新矩阵的方法。请注意,与函数调用相比,矩阵的应用顺序相反,例如:

glMultMatrixf(m3);
glMultMatrixf(m2);
glMultMatrixf(m1);

// Results in:   M = m3 x m2 x m1

最后,您对glTranslatef()的致电等同于:

// Simple macro to compute the offset in the 1-D column-major ordered array
#define GLMATRIX(m, row, col) m[col*4+row]

float matrix [16];

// Identity matrix
std::fill (matrix, matrix+16, 0);
GLMATRIX(matrix, 0, 0) = 1;
GLMATRIX(matrix, 1, 1) = 1;
GLMATRIX(matrix, 2, 2) = 1;
GLMATRIX(matrix, 3, 3) = 1;

// Translation
GLMATRIX(matrix, 0, 3) = translationX;
GLMATRIX(matrix, 1, 3) = translationY;
GLMATRIX(matrix, 2, 3) = translationZ;

// Multiply matrix
glMatrixMode(GL_MODELVIEW); // I assume you want to translate objects in your
                            // 3D scene so you need to be modelview mode
glLoadIdentity();           // And set the modelview stack to identity to
                            // apply your translation from the origin
glMultMatrix(matrix);       // Apply your translation now

// Draw stuffs