03-11-2009 19:49:08
- Zorian
- Modérateurs
- Date d'inscription:
- Messages: 19
- IP: 82.231.128.145
- Courriel
J'aurais besoin qu'on m'éclaire sur les indices d'un node.
Sur le modèle de l'exemple 3 du tuto officiel, j'ai voulu afficher un cube. Donc je définis mes 8 vertex à différentes positions puis je remplis les indices manuellement. Je lance mon programme et là patatras : tous les triangles ne sont pas dans le même "sens". Certains ne semblent pas avoir la même normale que les autres. Je tente donc de modifier mes normales mais le résultat est toujours le même. Dans une tentative désespérée, je retape mes indices et là oh miracle : un triangle s'est retourné
.
J'en viens donc à ma question : Est-ce normal que la normale s'inverse en inversant l'ordre des indices ? (si c'est le cas alors je n'ai vraiment rien compris aux indices) J'entends par là remplacer 1,2,3 par 3,2,1 dans la liste d'indices et non interchanger leur place dans la liste.
Real Programmers Don't Document - If it was hard to write, it should be hard to understand.
Hors ligne
03-11-2009 20:25:04
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 86.204.182.93
- Courriel
Zorian Ecris:
J'en viens donc à ma question : Est-ce normal que la normale s'inverse en inversant l'ordre des indices ?
heu oui, ou non. mais pour mieux comprendre, un bout de code serait le bienvenue, je suis sur que d'un coups d'oeil on pourrait très vite trouver
le soucis
Force et sagesse...
Hors ligne
03-11-2009 23:38:53
- lucky56
- Membres

- Date d'inscription:
- Messages: 4
- IP: 85.192.253.91
- Courriel
Bonjour, je crois que c'est une histoire sens horaire ou anti-horaire.
Hors ligne
04-11-2009 08:42:56
- Zorian
- Modérateurs
- Date d'inscription:
- Messages: 19
- IP: 82.231.128.145
- Courriel
Voilà mon carré :
0________1
| |
| |
| |
2________3
Et voilà mon code :
//la liste d'indices
u16 indices[] = {0,1,2, 1,2,3};
video::IVideoDriver *driver = SceneManager->getVideoDriver();
driver->setMaterial(Material);
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
driver->drawIndexedTriangleList(&Vertices[0], 4, &indices[0], 2);et le résultat est que les 2 triangles 0,1,2 et 1,2,3 ne sont pas dans le même sens.
Mais si
u16 indices[] = {0,1,2, 1,2,3};devient
u16 indices[] = {0,1,2, 3,2,1};alors là mes deux triangles sont dans le même sens
@lucky56
A voir ma figure je pense bien qu'il s'agisse d'un problème de sens horaire anti-horaire comme tu l'as si bien indiqué.
Real Programmers Don't Document - If it was hard to write, it should be hard to understand.
Hors ligne
04-11-2009 10:57:05
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.158.189
- Courriel
A voir ma figure je pense bien qu'il s'agisse d'un problème de sens horaire anti-horaire comme tu l'as si bien indiqué.
sur des face 'façonnées' à la main, c'est souvent l'un des casses têtes
Sinon, si tes info sont juste, personnelement la serie d'indice {0,1,2, 1,2,3 } ne permet pas chez moi une bonne représentation. Mais dans ce cas il ne
s'agit pas vraiment d'un soucis lié aux normales mais plutôt au back face cullin, ce qui n'est pas la même chose.
La serie d'indice {0,1,2, 3,2,1} par contre fonctionne mieux
Force et sagesse...
Hors ligne
04-11-2009 12:26:32
- Zorian
- Modérateurs
- Date d'inscription:
- Messages: 19
- IP: 82.231.128.145
- Courriel
Merci pour ces réponses je vais voir ce que google me dit sur le backface culling
EDIT : j'ai trouvé la solution en désactivant le backface culling les 2 faces de chaque triangle sont affichées sans prendre en compte l'ordre des sommets qui le composent
Real Programmers Don't Document - If it was hard to write, it should be hard to understand.
Hors ligne



