J'essaye de dessiner plusieurs lignes sur l'écran en même temps en utilisant des bandes de lignes OpenGL et les performances sont lentes, et il a été suggéré d'utiliser un vertex buffer. Je suis nouveau dans les buffers de vertex - ai-je besoin d'un nouveau pour chaque ligne que je veux dessiner, ou est-ce que j'utilise un seul tampon pour toutes les lignes (elles ne sont pas nécessairement connectées les unes aux autres)? À ce stade, j'ai une liste de lignes (où chaque ligne est une liste de sommets), mais je ne sais pas comment les rendre rapidement. Toute aide serait appréciée.Dessin au trait Java OpenGL avec des tampons de vertex
EDIT: Voici mon code actuel qui donne une exception: EDIT2: Rembobiner le tampon avant d'appeler glVertexPointer a corrigé l'exception puisque le put faisait avancer le tampon. Ceci est maintenant corrigé.
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);
}
Espérons que cela fournira une meilleure idée de mon problème (je sais que ce code a des problèmes, en essayant d'apprendre ici bien).
Merci, Jeff
non, il n'y a pas de "seul" tampon de vertex. Vous pouvez en avoir autant que vous voulez. Vous ne "rendez" pas les VBO, vous les remplissez avec glBufferData et/ou glBufferSubData. vous renvoyez aux données par décalage dans un vbo avec glBindBuffer + glVertexPointer, et utilisez réellement les données sur le Draw consécutif. VBOs _are_ buffers de vertex. – Bahbar