2013-07-12 2 views
1

Я хочу нарисовать многоугольник, используя glDrawElements. Использование glDrawArrays все в порядке, но ничего не делается glDrawElements.lwjgl 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()); 

Помощь! В чем может быть проблема?

ответ

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 }; 
0

Вершина имеет три значения, поэтому у вас есть четыре вершины в ваших полигонов всплывают массив: 0, 1, 2 и 3. Индекс массива должны относиться к одному из них. Если вы введете несуществующий индекс (4 и выше), то почти наверняка будут проблемы (в зависимости от реализации OpenGL, который вы используете).

Смежные вопросы