0

在我应用各种转换后,我试图在我的程序中以数学方式跟踪我的 ModelView 矩阵(和其他一些矩阵)的坐标。我想让程序输出这些坐标,但我不能完全到达那里。

modelViewMatrix = GLKMatrix4MakeTranslation(-1.5f, 1.25f, -4.0f);
modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, 2.75, 2, 0);

GLfloat MVMatrix[16];    
if (not_printed) {
    glGetFloatv(GL_MODELVIEW_MATRIX, MVMatrix);
    for (int i=0; i<16; i++) {
        printf("%f ", MVMatrix[i]);
    }
}
not_printed = 0;

其输出只是 16 个 0.0 值的序列(例如 0.0、0.0、...、0.0)。

如何让矩阵的值输出到控制台?谢谢!

4

1 回答 1

1

首先,GLK 与 OpenGL 矩阵堆栈无关,它创建自己的矩阵而不是乘以 OpenGL 的“当前”矩阵。

我在这里发现特别奇怪的另一件事是它GL_MODELVIEW_MATRIX甚至是在 OpenGL ES 2.0 上下文中定义的,这是非标准行为。OpenGL ES 2.0 没有当前颜色、当前矩阵等......当它强制要求独占使用可编程管道时,它剥离了这些东西。

相反,您想要做的是:

modelViewMatrix = GLKMatrix4MakeTranslation(-1.5f, 1.25f, -4.0f);
modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, 2.75, 2, 0);

if (not_printed) {
    for (int i=0; i<16; i++) {
        printf("%f ", modelViewMatrix.m [i]);
    }
    printf ("\n");
}
not_printed = 0;
于 2013-11-08T20:21:21.107 回答