0

私はこのガイドに従っており、画面にクワッドを描画しようとしています。ソースコードも見ましたが、同じで動作するはずですが、私の場合は画面に何も表示されません。クワッドが画面に表示されるように色を赤に設定するだけの頂点シェーダーで OpenGL 2.0 を使用しています。

glutMainLoop を呼び出す前に、頂点バッファー オブジェクトを生成します。

#include <GL/glut.h>
#include <GL/glew.h>

vector<GLfloat> quad; 
GLuint buffer;

void init()
{
    // This routine gets called before glutMainLoop(), I omitted all the code
    // that has to do with shaders, since it's correct.
    glewInit();
    quad= vector<GLfloat>{-1,-1,0, 1,-1,0, 1,1,0, -1,1,0};
    glGenBuffers(1,&buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*12,quad.data(),GL_STATIC_DRAW);
}

これは私のレンダリングルーチンです:

void display()
{
    glClearColor(0,0,0,0);
    glClear(GL_COLOR_BUFFER_BIT);

    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER,buffer);
    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,0);
    // I also tried passing quad.data() as last argument, but nothing to do.
    glDrawArrays(GL_QUADS,0,12);
    glDisableVertexAttribArray(0);

    glutSwapBuffers();
}

問題は、画面に何も描画されないことです。黒いウィンドウが表示されるだけです。頂点シェーダーで赤色を設定したため、クワッドは赤色である必要があります。

4

2 に答える 2

3

したがって、おそらく問題は glDrawArrays(GL_QUADS, 0, 12); のカウントです。これは glDrawArrays(GL_QUADS, 0, 4); でなければなりません。

于 2013-01-30T13:08:37.507 に答える
0

次のように glEnableClientState がありませんでした:

glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_QUADS,0,12);
glDisableClientState(GL_VERTEX_ARRAY);
于 2013-01-31T18:43:22.240 に答える