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