Comment faire un cylindre dans le rendu

J'ai essayé de faire un cylindre en rendu. C'est le code que j'ai essayé:

public Mesh cylinder(){
    float radius=1.25f, halfLength=5;
    int slices=16;

    Mesh.TriangleMeshBuilder mbo= new TriangleMeshBuilder(mRSGL,3, Mesh.TriangleMeshBuilder.TEXTURE_0);
    for(int i=0; i

Mais ce code me donne un rectangle de longueur 5. Des idées où je me trompe?

0

1 Réponses

Vous avez réellement quelques problèmes ici. D'abord, vos angles sont toujours égaux à des multiples de 2pi. Vous devez diviser par le nombre de secteurs lorsque vous calculez vos angles. De plus, dans cette étape, vous avez une conversion de type explicite inutile, java va gérer la conversion de l'entier en double pour vous.

Deuxièmement, vous ajoutez constamment les deux mêmes triangles au maillage sans ajouter de triangles pour le côté du cylindre, juste les deux extrémités. Dans votre boucle, lorsque vous appelez addTriangle (), vous devez utiliser des index, par exemple addTriangle (n, n + 1, n + 2).

Enfin, il vous manquait un signe négatif lorsque vous avez créé votre 4ème sommet, donc il était en réalité à halfLength, pas -halfLength.

Essaye ça:

public Mesh cylinder(){
    float radius=1.25f, halfLength=5;
    int slices=16;

    Mesh.TriangleMeshBuilder mbo= new TriangleMeshBuilder(mRSGL,3, Mesh.TriangleMeshBuilder.TEXTURE_0);

    /*vertex at middle of end*/
    mbo.addVertex(0.0f, halfLength, 0.0f);
    mbo.addVertex(0.0f, -halfLength, 0.0f);

    for(int i=0; i

J'ai également ajouté une légère optimisation où les sommets pour les centres des cercles ne sont créés qu'une seule fois, économisant ainsi de la mémoire. L'ordre des indices est ici pour l'élimination de la face arrière. Inversez-le si vous voulez le visage avant. Si vos besoins nécessitent une méthode plus efficace, les constructeurs d'allocation permettent d'utiliser trifans et tristrips, mais pour un maillage de cette complexité, la facilité des maillages triangulaires est méritée. J'ai exécuté ce code sur mon propre système pour vérifier que cela fonctionne.

0
ajouté
Merci, ça a marché :)
ajouté l'auteur Deepak Mittal, source
Pas de problème, heureux d'aider
ajouté l'auteur Jared, source