我一直在尝试使用
gl.glDrawElements(GL10.GL_POINTS, 4, GL10.GL_UNSIGNED_BYTE, vertexBuffer);
我想使用顶点缓冲区在屏幕上绘制4个点,但是我无法使其正常工作。我只想绘制点,因为最终我想要显示一个点云。如果我有大量的点(最终),顶点缓冲区是否是正确的选择?它们不会改变,但我希望能够更改查看它们时的透视和比例。
顶点缓冲区设置:
private float vertices[] = {
-3.0f, 1.0f, -2.0f, // 0, Top Left
-3.0f, -1.0f, 0.0f, // 1, Bottom Left
-2.0f, -1.0f, -2.0f, // 2, Bottom Right
-2.0f, 1.0f, 0.0f, // 3, Top Right
};
// Our vertex buffer.
private FloatBuffer vertexBuffer;
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
这是我的点的当前绘制调用(我不想使用索引,因为形状绘制顺序对我来说并不重要):
public void draw(GL10 gl) {
// Enabled the vertices buffer for writing and to be used during
// rendering.
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glPointSize(3);
// Specifies the location and data format of an array of vertex
// coordinates to use when rendering.
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawElements(GL10.GL_POINTS, 4,
GL10.GL_UNSIGNED_BYTE, vertexBuffer);
// Disable the vertices buffer.
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
// Disable face culling.
gl.glDisable(GL10.GL_CULL_FACE);
}
当我调用draw()时,该程序目前会崩溃。
谢谢!
ptCloud
对象了。只需将ptCloud = new PointCloud()
添加到您的活动构造函数中即可。因此,错误并不在draw
函数中,而是在函数调用本身。 - Christian Rau