4

私はこのように見えるいくつかのコードを持っています:

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

cを呼び出した後、現在のRGBA色が配列に書き込まれることを期待しています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 に答える