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
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
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 :
IMeshManipulator->flipSurfaces (IMesh *mesh).
En esperant que cela d'aidera.
Hors ligne
Merci beaucoup Firnafin, je vais tester desuite . Par contre cela ne résoud pas le problème (que j'ai un peu mal posé, mea culpa ) 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
Dernière modification par Aseiy (29-01-2008 17:30:10)
Hors ligne
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
la je sais pas, je n'ai jamais utiliser flipSurface a vrai dire.si ca marche : )
Hors ligne
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
IMeshManipulator* manipulateur = ???;
mais je trouve pas quoi mettre après le =
Donc si vous pouviez m'aider sa serait sympa
Hors ligne
bien c'est dans la doc aussi ...
Scenemanager->getMeshManipulator();
Hors ligne
Ok merci effectivement ça marche
Hors ligne
Salut à tous, à nouveau .
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 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
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
Dernière modification par Aseiy (02-02-2008 22:33:20)
Hors ligne
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 ). 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
// 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
Dernière modification par Aseiy (02-02-2008 23:59:13)
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 20 invités en ligne Aucun membre connecté RSS Feed |