1

glDrawElements を使って多角形を描きたい。glDrawArrays を使用するとすべて問題ありませんが、glDrawElements には何も描画されません。

これが私のコードです:

float[] polys = {
    0f,0f,0f,
    0f,0f,-1f,
    -1f,0f,-1f,
    -1f,0f,0f
};

int[] indexs = {
        0,1,2,
        3,4,5,
        6,7,8,
        9,10,11
    };

float[] texs = {
        0f,0f,
        0f,1f,
        1f,1f,
        1f,0f
    };


FloatBuffer buff_polys = new FloatBuffer(polys.length).put(polys).normalize();  
IntegerBuffer buff_indexs = new IntegerBuffer(indexs.length).put(indexs).normalize();
FloatBuffer buff_texs = new FloatBuffer(texs.length).put(texs).normalize();

GL11.glVertexPointer(3, 0, buff_polys.getBuffer()); 
GL11.glTexCoordPointer(2, 0, buff_texs.getBuffer());

//GL11.glDrawArrays(GL11.GL_QUADS, 0, buff_polys.size()/3);
GL11.glDrawElements(GL11.GL_QUADS, buff_indexs.getBuffer());

ヘルプ!問題は何でしょうか?

4

2 に答える 2

0

インデックスは、頂点コンポーネント (x、y OR z) ではなく、頂点 (x、y、AND z) を参照します。

float[] polys = {
    0f,0f,0f,    // Vertex 0
    0f,0f,-1f,   // Vertex 1
    -1f,0f,-1f,  // Vertex 2
    -1f,0f,0f    // Vertex 3
};

次のようにインデックスを定義してみてください。

int[] indexs = { 0, 1, 2, 3 };
于 2013-07-13T04:48:28.900 に答える
0

頂点には 3 つの値があるため、polys float 配列には 4 つの頂点 (0、1、2、および 3) があります。インデックス配列は、これらのいずれかを参照する必要があります。存在しないインデックス (4 以上) を入力すると、ほぼ確実に問題が発生します (使用している OpenGL の実装によって異なります)。

于 2014-09-15T02:13:49.680 に答える