模型不可见 android OpenGL ES 2.0

Model not visible android OpenGL ES 2.0

我目前正在尝试显示我从搅拌机导出的模型。我已经解析了这个文件并有 2 个数组,其中一个保存顶点数据,另一个保存索引数据。我的 bindData 方法将顶点数据绑定到着色器程序。我遇到的问题是小行星没有被绘制(或者它们被绘制但看不到它们)。如果需要,我可以提供更多代码或进一步阐明我的问题。

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

您似乎没有将索引存储在索引缓冲区中:

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);