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

一个顶点具有三个值,因此您的 polys 浮点数组中有四个顶点:0、1、2 和 3。索引数组必须引用其中之一。如果您输入一个不存在的索引(4 及以上),几乎肯定会出现问题(取决于您使用的 OpenGL 的实现)。

于 2014-09-15T02:13:49.680 回答
0

索引指的是顶点(x,y,AND z),而不是顶点分量(x,y OR 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 回答