#0 

28-01-2008 23:52:30

Aseiy
Membre
Date d'inscription: 28-01-2008
Messages: 11

Avant tout, bonjour à tous et merci de lire ce post!
Je fait de la 3D depuis maitenant 1 ans et je possède quelques notion mais trop limitées pour comprendre ce problème :
Dans le cadre d'une réalisation pour la fac, nous générons une scène de façon automatisée (pour qu'elle représente les données en entrées). Il est possible de se déplacer dans cette scène.
Réalisant les premiers tests pour le proto, je me suis rendu compte que les caméras, une fois placés au coeur d'un mesh, ne le dessine plus. Hors je comptais utiliser une sphere, par exemple, comme salle.
Une fois la caméra placée dans celui - ci, j'espérais que les triangles des bords apparaissent et j'ai donc joué sur les paramètres suivant sans succes :
autoculling désactivé (pour la caméra et pour le IAnimatedMeshSceneNode)
zbuffer désactivé
paramètres near et fars de la caméras variant (le near à 0.00001 et le far à 600 par exemple)
(j'ai d'ailleurs noté au passage un léger bug si on appelle la méthode  ->setDebugDataVisible(scene::EDS_NORMALS); après un rescaling)

Bref rien n'y fait d'ou ma première question : Quelqu'un sait-il s'il y a moyen, en placant un mesh, de l'observer de l'interieur?

Merci d'avance et bonne chance a tous smile

P.S : j'ai survolé le forum entier et il ne me semble pas que cette question ait deja été posée, mais si c'est le cas je vous prie de m'en excuser...

Dernière modification par Aseiy (28-01-2008 23:53:35)

Hors ligne


#1 

29-01-2008 14:33:44

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

bonjour ;

Il faut effectivement faire attention au near et far value de la camera, mais pour voir le mesh de l'interieur il faut inverser les normals ( par economie le moteur ne calcul  pas les vertex non visibles <=>   (normal,vecteur camera) >=0 ) sinon les seuls qui devrai etre affichés sont se qui sont derrieres la camera  et c'est pas super ... 
Pour inverser le mesh ce qui suit de comblera :

Code:

 IMeshManipulator->flipSurfaces (IMesh *mesh).

En esperant que cela d'aidera.

Hors ligne


#2 

29-01-2008 17:29:29

Aseiy
Membre
Date d'inscription: 28-01-2008
Messages: 11

Merci beaucoup Firnafin, je vais tester desuite smile. Par contre cela ne résoud pas le problème (que j'ai un peu mal posé, mea culpa big_smile ) Ces meshs sont aussi troués et permettent de voir les autres mesh, mais cette fois-ci de l'extérieur. Du coup en inversant les normales aux surfaces je devrais hélas retomber sur le meme probleme non? Voyez vous une solution pour m'éviter de doubler les modèles, une fois flipé et l'autre non? Je manque cruellement de théorie mais est-il possible que cela marche par exemple en desactivant le culling des faces arrieres (ce que je ne sais pas faire non plus helas...)
En tout cas merci pour cette réponse si rapide smile

Dernière modification par Aseiy (29-01-2008 17:30:10)

Hors ligne


#3 

29-01-2008 17:58:31

Aseiy
Membre
Date d'inscription: 28-01-2008
Messages: 11

HMM , non ca marche vraiment bien... Je comprend pas pourquoi mais le mesh reste visible de l'extérieur! Si tu as une minute pourrait tu m'expliquer pourquoi, en flipant les normales, je peux tout de même observer le mesh de l'extérieur? Est-ce du à un des nombreux raccourcis pris par les algo de rendu?
Je te remercie en tout cas pour cette solution à un problème qui me tracassait vraiment.

Hors ligne


#4 

29-01-2008 19:12:47

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

la je sais pas, je n'ai jamais utiliser flipSurface a vrai dire.si ca marche  : )

Hors ligne


#5 

29-01-2008 21:23:15

bestben
Abonné
Date d'inscription: 20-10-2007
Messages: 133

Moi cette fonction elle m'intéresse mais je comprend pas le IMeshManipulator
j'ai bien regardé dans la doc mais j'ai pas trouvé la réponse : comment on "l'initialise"
j'ai fait

Code:

 IMeshManipulator* manipulateur = ???;

mais je trouve pas quoi mettre après le =
Donc si vous pouviez m'aider sa serait sympa  big_smile

Hors ligne


#6 

29-01-2008 21:42:32

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

bien c'est dans la doc aussi ...  smile

Code:

Scenemanager->getMeshManipulator();

Hors ligne


#7 

29-01-2008 21:45:34

bestben
Abonné
Date d'inscription: 20-10-2007
Messages: 133

Ok merci effectivement ça marche

Hors ligne


#8 

02-02-2008 22:32:31

Aseiy
Membre
Date d'inscription: 28-01-2008
Messages: 11

Salut à tous, à nouveau smile.
Si je continue cette discussion c'est parce que j'ai poussé l'exploration plus avant avec un mesh un peu plus complexe (le monkey de blender). Je voulais poster un ScreenShot du résultat, qui est somme toute plutot marrant, mais il faut apparemment avoir un hébergeur pour ça hmm donc désolé, je vais juste pouvoir le décrire.
Globalement il y a deux phénomènes qui se produisent :
-De l'intérieur, les reliefs sont inversés (mais comme toujours en 3D, l'oeil s'adapte rapidement jusqu'à trouver cette impression normale)
-Le second est nettement plus gênant : de l'extérieur il y a des trous dans le mesh qui laissent passer la lumière des faces arrières (un effet graphique très en vogue, proche de la transparence partielle). Surprenant et très interessant mais ce n'est pas helas l'effet que je recherchais wink
Voila pour les problèmes, mais je ne fais pas que me plaindre... je voulais te remercier pour tes reponses qui me permettront j'en suis sur de trouver une bidouille (je posterai a nouveau s'il y a une solution viable). Je reste dans le coin si vous avez de bonnes idée à proposer wink

Dernière modification par Aseiy (02-02-2008 22:33:20)

Hors ligne


#9 

02-02-2008 23:57:51

Aseiy
Membre
Date d'inscription: 28-01-2008
Messages: 11

Apres recherches, je le tiens ... Je suis désolé de ne pas avoir poussé plus avant mais j'ai eu besoin de pas mal de doc pour comprendre (dsl Firnafin hmm). Voila le problème viens bien comme nous le pensions de l'algorythme de rendu. Inverser les normales n'arrange rien, cela inverse selement la lumière restuée par les surfaces (comme je l'ai écrit précedemment).
En réalité il faut 'désoptimiser' le rendu pour lui interdire de skipper les faces internes. Voici le bout de code pour me faire pardonner d'avoir tant écrit big_smile

Code:

// place dans msn le noeud créé (msnBase est le mesh loadé au préalable)
scene::IAnimatedMeshSceneNode *msn =  
        sceneManagerInstance->addAnimatedMeshSceneNode(msnBase2);
// j'utilise une propriété sympa du moteur irrlicht : les confgurations de rendu par noeuds
msn->setMaterialFlag(video::EMF_BACK_FACE_CULLING,false);
// le noeud est mis en place et peut maitenant afficher ses faces cachées

En tout cas merci a tous et a bientot dans le coin smile

Dernière modification par Aseiy (02-02-2008 23:59:13)

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
882 membres
1429 sujets
11119 messages
Dernier membre inscrit: LiseBuisson96
36 invités en ligne
Aucun membre connecté
RSS Feed