在我应用各种变换后,我正在尝试在我的程序中以数学方式跟踪我的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)。
如何获取矩阵的值以输出到控制台?谢谢!
答案 0 :(得分: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;