我正在尝试使用 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);
}
希望这可以更好地了解我的问题(我知道这段代码有问题,尽管在这里尝试学习)。
谢谢,杰夫