Question

J'aimerais afficher 100 cubes flottants en utilisant DirectX ou OpenGL.

Je recherche soit un exemple de code source, soit une description de la technique.J'ai du mal à afficher correctement plusieurs cubes.

J'ai parcouru le net pour trouver une bonne série de tutoriels et bien qu'ils expliquent comment faire 3D primitives, ce que je ne trouve pas, c'est d'informations sur la façon de faire un grand nombre de 3D primitives - cubes, spheres, pyramids, et ainsi de suite.

Pas de solution correcte

Autres conseils

Vous dites que vous avez assez de mal à afficher un cube...donc je ne sais pas si vous en avez un à afficher ou non.

Essentiellement...mettez votre code pour écrire un cube dans une fonction, puis appelez simplement cette fonction 100 fois.

void DrawCube()
{
    //code to draw the cube
}

void DisplayCubes()
{
    for(int i = 0; i < 10; ++i)
    {   
         for(int j = 0; j < 10; ++j)
         {
             glPushMatrix();
             //alter these values depending on the size of your cubes.
             //This call makes sure that your cubes aren't drawn overtop of each other
             glTranslatef(i*5.0, j*5.0, 0);
             DrawCube();
             glPopMatrix();
         }
    }              
}

C’est le schéma de base de la façon dont vous pourriez procéder.Si vous voulez quelque chose de plus efficace, jetez un œil aux listes d'affichage une fois que vous aurez compris les bases :)

Utilisez simplement glTranslatef (ou l'équivalent DirectX) pour dessiner un cube en utilisant le même code, mais en déplaçant le point relatif où vous le dessinez.Il existe peut-être une meilleure façon de le faire, je suis relativement nouveau sur OpenGL.Assurez-vous de définir votre point de vue pour pouvoir tous les voir.

Oui, si vous étiez efficace, vous jetteriez tout dans le même tampon de sommets, mais je ne pense pas que dessiner 100 cubes poussera un GPU produit au cours des 5 dernières années, vous devriez donc bien suivre les suggestions ci-dessus.

Écrivez un passage de base dans le vertex shader, ombrez comme vous le souhaitez dans le pixel shader.Soit passez dans une matrice mondiale et effectuez la traduction dans le vertex shader, soit calculez simplement les positions des sommets de l'espace mondial côté CPU (faites-le si vos cubes doivent rester fixes).

Tu pourrais avoir envie et faire instanciation de la géométrie etc, mais commencez par commencer par les bases.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top