1

インデックスなしで VBO を使用して立方体を描画したい。インターネットで何も見つかりません(チュートリアル、例)。私が試したこと:

const GLfloat Vertices[] = {
    -1.0f, -1.0f, 1.0f, //Vertex 0
    1.0f, -1.0f, 1.0f,  //v1
    -1.0f, 1.0f, 1.0f,  //v2
    1.0f, 1.0f, 1.0f,   //v3

    1.0f, -1.0f, 1.0f,  //...
    1.0f, -1.0f, -1.0f,         
    1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, -1.0f,

    1.0f, -1.0f, -1.0f,
    -1.0f, -1.0f, -1.0f,            
    1.0f, 1.0f, -1.0f,
    -1.0f, 1.0f, -1.0f,

    -1.0f, -1.0f, -1.0f,
    -1.0f, -1.0f, 1.0f,         
    -1.0f, 1.0f, -1.0f,
    -1.0f, 1.0f, 1.0f,

    -1.0f, -1.0f, -1.0f,
    1.0f, -1.0f, -1.0f,         
    -1.0f, -1.0f, 1.0f,
    1.0f, -1.0f, 1.0f,

    -1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f,           
    -1.0f, 1.0f, -1.0f,
    1.0f, 1.0f, -1.0f,
};


glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
 glDrawArrays(GL_TRIANGLE_STRIP, 0, 24);

しかし、立方体ではなく、何かがおかしいことがわかりました

4

1 に答える 1

3

最初に glDrawPrimatives 呼び出しで、描画モードとして GL_QUADS を使用していることを確認します。それ以外の場合は、奇妙な結果が得られます。

あなたの頂点は大丈夫です。それらは正しい順序で正しい位置にあります。

編集:四角形を使用できないため、各三角形を個別に定義する必要があります。最初のブロックは次のようになります。

-1.0f, -1.0f, 1.0f, //v0
1.0f, -1.0f, 1.0f,  //v1
-1.0f, 1.0f, 1.0f,  //v2

-1.0f, 1.0f, 1.0f,  //v2
1.0f, -1.0f, 1.0f,  //v1
1.0f, 1.0f, 1.0f,   //v3

インデックスを使用することを強くお勧めしますが、定義したものと同じ頂点バッファーを保持する場合は、次のようにインデックスを設定できます。

byte indices[6 * 6];
int n = 0;
for(int i = 0; i < 4 * 6; i += 4)
{
   indices[n++] = i;
   indices[n++] = i + 1;
   indices[n++] = i + 2;

   indices[n++] = i + 2;
   indices[n++] = i + 1;
   indices[n++] = i + 3;
}
于 2011-10-11T08:40:29.163 に答える