我需要使用不同的openGL函数执行一些操作。
因为我有一个初始化为glList的立方体。我正在做的是使用glu标准函数进行一些转换,我喜欢用矩阵乘法完成相同的操作。 但是我对旋转功能感到困惑。我想围绕x achsis旋转立方体,例如90°:
glRotatef(90.0, 1.0f, 0.0f, 0.0f);
应替换为:
GLdouble m[16] ={1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0,-1.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0 };
glMultMatrixd(m);
我发现了this very usefull site ,但有些与上面的函数完全不同。有没有一个generell原理如何将glRotatef()函数转换为gl变换矩阵?
更新:抱歉,我错过了文档开头的重要说明,即文档中的矩阵需要转换才能在openGL中使用。
答案 0 :(得分:1)
在X轴中
| 1 0 0 0 |
M = | 0 cos(A) -sin(A) 0 |
| 0 sin(A) cos(A) 0 |
| 0 0 0 1 |
在Y轴中
| cos(A) 0 sin(A) 0 |
M = | 0 1 0 0 |
| -sin(A) 0 cos(A) 0 |
| 0 0 0 1 |
在Z轴中
| cos(A) -sin(A) 0 0 |
M = | sin(A) cos(A) 0 0 |
| 0 0 1 0 |
| 0 0 0 1 |
注意:OpenGL中的矩阵使用列主要内存布局
示例:
#include <math.h>
#define PI 3.14159265
// Rotate -45 Degrees around Y-Achsis
GLdouble cosA = cos(-45.0f*PI/180);
GLdouble sinA = sin(-45.0f*PI/180);
// populate matrix in column major order
GLdouble m[4][4] = {
{ cosA, 0.0, -sinA, 0.0}, // <- X column
{ 0.0, 1.0, 0.0, 0.0}, // <- Y column
{ sinA, 0.0, cosA, 0.0}, // <- Z column
{ 0.0, 0.0, 0.0, 1.0} // <- W column
};
//Apply to current matrix
glMultMatrixd(&m[0][0]);
//...