4

我有一些看起来像这样的代码:

GLfloat c[4];
glGetFloatv(GL_CURRENT_COLOR, c);

我希望在c调用glGetFloatv. 然而,数组中的值根本没有改变(即它在调用 之前和之后都包含相同的垃圾值glGetFloatv)。

显然我要么误解了GL_CURRENT_COLOR(获取先前通过调用设置的颜色)的含义,glColor4f要么做错了什么......

PS:另外,这个过程可能会在任何调用glColor4f发生之前被调用,但在那种情况下,我认为它应该返回(1.0, 1.0, 1.0, 1.0),对吧?

编辑:glGetError尝试获取颜色后调用返回0

4

1 回答 1

1

在这里工作得很好:

#include <GL/glut.h>
#include <iostream>
using namespace std;

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    GLfloat color[4];

    glGetFloatv(GL_CURRENT_COLOR, color);
    cout << "Default color: ";
    for( size_t i = 0; i < 4; i++ )
        cout << color[i] << " ";
    cout << endl;

    glColor3ub( 255,0,0 );
    glGetFloatv(GL_CURRENT_COLOR, color);
    cout << "Should be red: ";
    for( size_t i = 0; i < 4; i++ )
        cout << color[i] << " ";
    cout << endl;

    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

    glutInitWindowSize(200,200);
    glutCreateWindow("Color");

    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

输出:

Default color: 1 1 1 1
Should be red: 1 0 0 1

PS:另外,这个过程可能会在调用 glColor4f 之前被调用,但在这种情况下,我假设它应该返回 (1.0, 1.0, 1.0, 1.0),对吧?

“当前颜色的初始值为 (1, 1, 1, 1)。”

于 2012-10-12T21:57:34.860 回答