我想在使用OpenGL线条的同时在屏幕上绘制很多线条,性能很慢,并且建议我使用顶点缓冲区。我是顶点缓冲区的新手 - 我是否需要为每个要绘制的线条添加一个新的缓冲区,或者是否为所有线条使用单个缓冲区(它们不一定相互连接)?在这一点上,我有一个行列表(每行是顶点列表),但我不知道如何快速渲染这些行。任何帮助,将不胜感激。带顶点缓冲区的Java OpenGL线条绘图
编辑:这是我目前的代码,它给出了一个例外: EDIT2:在调用glVertexPointer之前倒回缓冲区修正了由于put推进缓冲区而引起的异常。这现在已经修复。
java.lang.IndexOutOfBoundsException: Required 1 remaining elements in buffer, only had0
at com.sun.gluegen.runtime.BufferFactory.rangeCheck(BufferFactory.java:247)
at com.sun.opengl.impl.GLImpl.glVertexPointer(GLImpl.java:27937)
for (int i = 0; i < lines.size(); i++)
{
List<Vertex> v = lines.get(i);
DoubleBuffer buf = BufferUtil.newDoubleBuffer(v.size() * 3);
Iterator<Vertex> iter = v.iterator();
while (iter.hasNext())
{
Vertex vt = iter.next();
buf.put(new double[] { vt.x, vt.y, vt.z });
}
gl.glVertexPointer(3, GL.GL_DOUBLE, 0, buf);
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glDrawArrays(GL.GL_LINES, 0, v.size());
gl.glDisableClientState(GL.GL_VERTEX_ARRAY);
}
希望这将提供一些更好的见解我的问题(我知道这个代码有问题,试图在这里学习虽然)。
感谢, 杰夫
不,没有“只有一个”顶点缓冲区。你可以拥有尽可能多的你想要的。您不会“渲染”到VBO,您可以使用glBufferData和/或glBufferSubData填充它们。你通过使用glBindBuffer + glVertexPointer在vbo中取消数据来引用数据,并在连续的Draw中实际使用数据。 VBOs是顶点缓冲区。 – Bahbar 2010-01-27 21:21:42