Historique des modifications - Message

Message #2701

Sujet: Problème pour un terrain perso


Type Date Auteur Contenu
Création du message 18-07-2007 20:03:18 ZeroZero
Bonjour,

j'ai en tête de réaliser un editeur de terrain 3D

Pour ce faire, je compte (en faite c'est deja fait ca) deriver la classe IsceneNode.

Dans ma nouvelle classe, je vais ajouter quelque fonction de generation auto par différent algo, (pelerin, diamond square et peut être triangulation de Delaunay si je ne me trompe pas).

Je reflechit actuellement sur le fait de deriver ou non la classe IMeshBuffer pour pouvoir avoir plus de 65536 Indice dans mon rendu. D'ailleur voici la première question :

1 - Comment generer un terrain de 256*256 (comme le ITerrainSceneNode) alors qu'il faut 3 point par triangle ce qui donne 255*255*2 = 65025 triangle soit 65025*3 = 195075 ce qui est bien superieur au 65536 indice maximum? Est ce grace au lod?
Nota : pour remplir mes indice, je fais ca :
for (u32 z = 0; z < size-1; z++)
    {
        for (u32 x = 0; x < size-1; x++)
        {
            renderBuffer.Indices[n] = x+1+(size*z);
            n++;
            renderBuffer.Indices[n] = x+size+(size*z);
            n++;
            renderBuffer.Indices[n] = x+(size*z);
            n++;
            nbreTriangle++;

            renderBuffer.Indices[n] = x+1+(size*z);
            n++;
            renderBuffer.Indices[n] = x+size+1+(size*z);
            n++;
            renderBuffer.Indices[n] = x+size+(size*z);
            n++;
            nbreTriangle++;
        }
    }

mais la je "dessine" plusieur fois chaque sommet, je ne sais pas si c'est la bonne méthode

Donc voila j'hesite un peu a me faire une classe de MeshBuffer qui acceptera plus de point que ca.

Maintenant j'essaye d'appliquer un LOD dynamique sur ma classe (je ne veux pas precalculer tous les maillages car je doit pouvoir modifier le maillage en temps réel et cela impliquera le recalcul de tous les maillage).
Mon problème est que je n'arrive pas a sortir l'algo.
Bon dans le principê je crois que c'est ca :
Suivant la position de la caméra et un critère de distance, on prend en compte plus ou moins de detaille.
Concretement j'aurais vue ca comme ca (en ne prenant en compte que la distance sur x et z pour le moment) :
z = 0; 
tant que z inf tailleCarte 
   x = 0; 
   PosCam = getPos(); 
   lod = 0; 
   if distz ou distx sup lod1 => lod = 1; 
   else if distz ou distx sup lod2 => lod = 2; 
   ... 
   else lod = 5; (par exemple pour le lod max) 
   fin if 
   step = 1<<lod; 
   setIndiceTwoTriangle(x,z,step); 
   x += step; 
   if x supEgal tailleCarte 
      x = 0; z +=step; 
   fin if 
boucle

Voila maintenant mon algo n'est pas terrible je trouve (même je suis sur) car d'après mes tests, j'ai des problème d'affichage (des triangle qui se recoupe ou des trous) mais je ne vois pas comment faire. Deuxieme problème, comment m'assurer que tous le terrains est dessiner (cad qu'il ne manque pas une bande sur les coté du carré du terrain dessiner en dernier. Je sais que ce n'est pas clair mais bon j'espere que vous comprendrer).

Donc voici la question 2 :
2 - Quelle sont les problèmes et modification a apporter a mon algo de LOD?

Voila j'aurais surement d'autre questions mais bon si deja ca c'est resolu ca me retire une bonne epine du pied lol

Merci et A+

Nota : Je commence juste a jouer avec irrlicht alors soyer indulgent ...

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
151 invités en ligne
membre en ligne: -
RSS Feed