1

このプログラムの出力として、完全に白色のウィンドウが表示される理由

コードはこちら

#include<Gl/glut.h>

static GLfloat vertices[] = {0.0, 0.0, 0.0,
                          0.5, 0.0, 0.0,
                          0.5, 0.5, 0.0,
                          0.0, 0.5, 0.0,
                          };

void reshape(int w, int h)
{
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 0.0);
}

void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,1.0,1.0);

    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, 0);

    glBegin(GL_LINES);
        glArrayElement(0);
        glArrayElement(1);
        glArrayElement(2);
        glArrayElement(3);
    glEnd();
    glDisableClientState(GL_VERTEX_ARRAY);
    glFlush();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
    glutInitWindowSize(400,400);
    glutInitWindowPosition(100,100);
    glutCreateWindow("vectors");

    glClearColor(0.0,0.0,0.0,0.0);

    glutReshapeFunc(reshape);
    glutDisplayFunc(Draw);
    glutMainLoop();
}

GL_LINES を GL_QUADS に修正

4

3 に答える 3

1

への呼び出しに問題があると思われますglVertexPointer()。最後のパラメーターは、使用している配列の先頭へのポインターであるはずですが、現時点では null ポインターを渡しているだけなので、何も機能しません。

代わりにこれを試してください:

glVertexPointer(3, GL_FLOAT, 0, vertices);

編集:ところで、あなたのコードはボックスを提供しません。うまくいけば、2行だけで済むと思います。GL_LINES の代わりに GL_QUADS を使用してみてください。

于 2013-11-14T15:26:40.870 に答える
-1

私に飛び出す主なものは配列です: //static GLfloat vertices[] = {0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, };

する必要があります

static GLfloat vertices[] = {0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0 }; (削除されたコンマに注意してください)

次は、クライアント状態の有効化と無効化です。たとえば、有効化と無効化にはコストがかかり、描画ループが影響を受けるため、これはメイン ループで行うことができます。

于 2013-11-14T15:51:24.790 に答える