模型不可见 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);
我目前正在尝试显示我从搅拌机导出的模型。我已经解析了这个文件并有 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);