opengl 为什么glMultMatrixf()和glTranslatef()的结果不同?[已关闭]

t0ybt7op  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(132)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
5天前关闭。
Improve this question

GLfloat translateMatrix[] = {
        1.0, 0.0, 0.0, 0.0,
        0.0, 1.0, 0.0, 5.0,
        0.0, 0.0, 1.0, 0.0,
        0.0, 0.0, 0.0, 1.0
    };

glMultMatrixf(translateMatrix);

glTranslatef(0, 5, 0);

我想他们的结果是一样的,但是结果是不一样的。有什么问题吗?
我不知道glMultMatrixf()。所以这将是个问题

yhxst69z

yhxst69z1#

因为与C中的行优先矩阵顺序不同,OpenGL矩阵是列优先顺序。因此,您应该按此顺序设置矩阵。
你应该代表矩阵

1.0, 0.0, 0.0, 0.0,
         0.0, 1.0, 0.0, 5.0,
         0.0, 0.0, 1.0, 0.0,
         0.0, 0.0, 0.0, 1.0

作为

GLfloat translateMatrix[] = {
        1.0, 0.0, 0.0, 0.0,
        0.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 1.0, 0.0,
        0.0, 5.0, 0.0, 1.0
};

下面的代码可用于测试每个转换中的输出矩阵

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 5, 0);
GLfloat matrix[16] = {0};
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);

glLoadIdentity();

GLfloat translateMatrix[] = {
        1.0, 0.0, 0.0, 0.0,
        0.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 1.0, 0.0,
        0.0, 5.0, 0.0, 1.0
};

glMultMatrixf(translateMatrix);
GLfloat matrix2[16] = { 0 };
glGetFloatv(GL_MODELVIEW_MATRIX, matrix2);
if (memcmp(matrix, matrix2,sizeof(matrix)) == 0) 
{
    printf("Matrices are same!\n");
}

相关问题