2012-04-06 3 views
1

le titre fondamentalement.Ajout d'un sommet à un maillage libgdx

Vous pouvez réserver plus que vous avez besoin lors de la création d'un maillage

mesh = new Mesh(false, 100, 0, new VertexAttribute(Usage.Position, 3, "a_position")); 

Mais il n'y a pas de méthode pour ajouter un sommet. Vous pouvez obtenir le FloatBuffer et ajouter à cela, mais j'ai des résultats étranges. J'ai aussi essayé le mesh.setVertices avec offset mais ça ne marche pas non plus.

J'ai débogué avec des points de dessin. Fonctionne jusqu'à ce que j'essaie d'ajouter un sommet par un moyen quelconque (même si je tweak des compensations pour tenir compte de 3 flotteurs dans un sommet)

segment de code Copié:

mesh.setVertices(new float[] { 
       -0.5f, -0.5f, 0, 
       0.5f, -0.5f, 0/*, 
       -0.5f,0.5f,0.f*/});//works if I uncoment this 
mesh.setVertices(new float[]{-0.5f,0.5f,0.f}, 6, 3);//but comment this out 

J'ai aussi essayé

squareMesh.setVertices(new float[]{-0.5f,0.5f,0.f}, 2, 3); 

Merci :)

Répondre

0

L'ajout est une mauvaise idée car les tampons sous-jacents doivent être recréés et cela prend beaucoup de temps. Au lieu de cela, on devrait allouer des mailles en vrac et rendre seulement ce qui est actuellement utilisé.

Par exemple mesh.render(GL10.GL_TRIANGLES,0,num_triangles);

En ce qui concerne la mise à jour du tampon:

FloatBuffer fbuftmp = mesh.getVerticesBuffer(); 
BufferUtils.copy(buf,fbuftmp,fbuftmp.capacity(),0); 

buf est un tableau de flotteur.

Utilisez BufferUtils.copy pour des raisons expliquées here

+1

lien est mort .. aurait pu être utile pour moi. – RobotRock

+0

@RobotRock [Lien de travail de l'archive.] (Https://web.archive.org/web/20130224002153/http://www.badlogicgames.com/wiki/index.php/Direct_Bulk_FloatBuffer.put_is_slow) – Greg

Questions connexes