2015-01-16 3 views
0

В настоящее время я пытаюсь отобразить мою модель, которую я экспортировал из блендера. Я проанализировал этот файл и имел 2 массива, один из которых содержит данные вершин, а другой содержит данные индекса. Мой метод bindData связывает данные вершин с шейдерной программой. Проблема, с которой я сталкиваюсь, заключается в том, что астероид не рисуется (или их рисуют, но не видят). При необходимости я могу предоставить больше кода или уточнить мою проблему.Модель не отображается android OpenGL ES 2.0

public Asteroid(){ 
    vertexArray = new VertexArray(AsteroidFinal.VERTEX_ARRAY); 

    indexBuffer = ByteBuffer 
      .allocateDirect(AsteroidFinal.INDICES_ARRAY.length * 2) 
      .order(ByteOrder.nativeOrder()) 
      .asShortBuffer() 
      .put((short) AsteroidFinal.INDICES_ARRAY.length); 
    indexBuffer.position(0); 
} 


public void bindData(ColorShaderProgram colorProgram){ 
     vertexArray.setVertexAttribPointer(
       0, 
       colorProgram.getPositionAttributeLocation(), 
       POSITION_COMPONENT_COUNT, 
       0); 
} 

public void draw(){ 
    //glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount); 
    glDrawElements(GL_TRIANGLE_FAN, AsteroidFinal.INDICES_ARRAY.length, GL_UNSIGNED_SHORT, indexBuffer); 
} 
+0

Вы уверены, что поверхность чертежа видна? например glClear() на красный дает вам красный экран? Можете ли вы рисовать другие фигуры, но только не в этом конкретном? (Нет ничего на экране, это довольно распространенная проблема, но есть много разных возможных причин.) – fadden

+0

@fadden Мне удалось нарисовать квад с почти тем же кодом, за исключением выделения индексабаффер и изменения glDrawArrays в glDrawElements , – DorkMonstuh

ответ

0

Похоже, вы не хранения индексов в буфере индексов:

indexBuffer = ByteBuffer 
     .allocateDirect(AsteroidFinal.INDICES_ARRAY.length * 2) 
     .order(ByteOrder.nativeOrder()) 
     .asShortBuffer() 
     .put((short) AsteroidFinal.INDICES_ARRAY.length); 

Это добавляет длину массива в буфер, а не фактических значений массива. Это должно быть:

indexBuffer = ByteBuffer 
     .allocateDirect(AsteroidFinal.INDICES_ARRAY.length * 2) 
     .order(ByteOrder.nativeOrder()) 
     .asShortBuffer() 
     .put(AsteroidFinal.INDICES_ARRAY); 
Смежные вопросы