1

VBOとIBOとして作成されたOpenGLシーンがあります。私のVBOは3つのフロートのシリーズです:x、y、z、x、y、z、x、y、z ...それに加えて、3つのフロートのシリーズで作られたカラー配列があります:r、g、 b、r、g、b、r、g、b..。

私の目標は、最初の頂点(x = vertice [0]、y = vertice [1]、z = vertice [2])が最初の色(r = color [0]、g = color [1]、 b = color [2])。ただし、以下のコードでは色を表示できません。

    glGenBuffers(1, &VertexVBOID);

    glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*nbVertex*3, glVertex, GL_STATIC_DRAW);

    glGenBuffers(1, &IndexVBOID);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*nbVBOInd, VBOInd, GL_STATIC_DRAW);

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
    glVertexPointer(3, GL_FLOAT,0,0);
    glColorPointer(3, GL_FLOAT, 0, glColors);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);

    glDrawElements(GL_TRIANGLES, nbVBOInd, GL_UNSIGNED_INT, 0);

上記のコード、またはアレイの設定方法に問題がありますか?

4

1 に答える 1

3

このシーケンスを試してみてください:

glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
glVertexPointer(3, GL_FLOAT,0,0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glColorPointer(3, GL_FLOAT, 0, glColors);

また、次のドキュメントをglBindBuffer()参照してください。

バッファ オブジェクト名は符号なし整数です。値 0 は予約されていますが、各バッファ オブジェクト ターゲットにデフォルトのバッファ オブジェクトはありません。代わりに、bufferゼロに設定すると、以前にバインドされたバッファー オブジェクトが効果的にアンバインドされ、そのバッファー オブジェクト target のクライアント メモリ使用量が復元されます

于 2011-08-19T20:37:34.167 に答える