[Open GL] Avis aux pros : comment faire de belles ombres? [Résolu]

Avis aux pros : comment faire de belles ombres? [Résolu] [Open GL] - Divers - Programmation

Marsh Posté le 20-01-2006 à 11:51:25    

Je dessine des modèles 3D composés de facettes à l'aide d'open gl, seulement pour rendre le dessin plus explicite j'aimerais ajouter des ombres pour bien voir les differentes facettes.
 
Voici un exemple de ce que j'obtiens :
 
http://fallenzephir.free.fr/base.jpg
 
C'est un peu nul, je préfèrerais quelque chose de ce style (screen de vrmlview) :
 
http://fallenzephir.free.fr/fin.jpg
 
Après avoir lu plusieurs tutorial je suis arrivé à ceci :
 
http://fallenzephir.free.fr/tentative.jpg
 
Mais c'est plutôt laid. Avez-vous une idée? Comment dois-je m'y prendre?


Message édité par WarDrone le 21-01-2006 à 10:31:00
Reply

Marsh Posté le 20-01-2006 à 11:51:25   

Reply

Marsh Posté le 20-01-2006 à 13:28:25    

c'est pas un problème d'ombre, c'est un problème d'éclairage, ie en 3D temps réel il y a subtilité sur la gestion des ombres (=lumière masquée par de la matière), ce n'est pas quelque chose de trivial comme dans un raytracer.
 
donc pour en revenir a ton problème d'éclairage, je dirais:
 
1) vérifies que tes normales par vertex soient OK
 
2) si ta matrice de positionnement/orientation fait un scaling (mise à l'echelle), ça peut avoir un impact sur la longueur de tes normales, et donc foirer l'éclairage, tu peux avoir a activer la normalisation automatique (remettre le longueur à 1) des normales
 
3) vérifies que ta source de lumière est OK
 
4) vérifes que tes propriétées de matériaux et de lumières soient OK, dont notemment l'exposant pour les reflets spéculaires (si l'exposant est trop bas ça peut te faire un tache saturée sur tes modèles)


Message édité par bjone le 20-01-2006 à 13:30:24
Reply

Marsh Posté le 20-01-2006 à 13:33:16    

là je me dirigerai vers un problème de coefficient diffus/spéculaire.

Reply

Marsh Posté le 20-01-2006 à 13:43:42    

sinon la principale difference entre ce que tu obtiens et ce qu'obtient vrmlview est le modele d'eclairage (par vertex pour toi, par face pour vrmlview)

Reply

Marsh Posté le 20-01-2006 à 15:35:13    

Je vais potasser tout ça (la gestion des lumières n'est pas si facile que ça).  
 
Merci pour vos réponses.


Message édité par WarDrone le 20-01-2006 à 15:53:28
Reply

Marsh Posté le 21-01-2006 à 10:30:26    

Donc j'ai trouvé il suffisait de préciser les normales lors de la construction de la facette et voici le résultat :
 
http://fallenzephir.free.fr/final.jpg


Message édité par WarDrone le 21-01-2006 à 10:38:01
Reply

Marsh Posté le 21-01-2006 à 17:12:07    

c'est pas dément, il doit y avoir un blem.
tu les fais comment tes normales ?


Message édité par bjone le 21-01-2006 à 17:12:13
Reply

Marsh Posté le 21-01-2006 à 17:56:34    

En fait ça ressemble plus à ca :
 
http://fallenzephir.free.fr/final2.JPG
 
Edit :
Effectivement mes normales sont identiques sur la face entiere.


Message édité par WarDrone le 22-01-2006 à 12:32:43
Reply

Marsh Posté le 21-01-2006 à 20:37:29    

a oui effectivement tout s'explique :/
 

Reply

Marsh Posté le 22-01-2006 à 00:52:21    

Pourquoi faut faire comment pour avoir un ombrage plat de meilleur qualité?

Reply

Marsh Posté le 22-01-2006 à 00:52:21   

Reply

Marsh Posté le 22-01-2006 à 00:58:28    

Pour "lisser" un peu il faut calculer des normales par sommet plutôt que par face, en moyennant les normales des faces communes à chaque sommet (et s'assurer que tout est bien normé).


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 22-01-2006 à 01:04:55    

Je les calcule deja par sommet.

Reply

Marsh Posté le 22-01-2006 à 01:07:56    

bah la ton eclairage est par face

Reply

Marsh Posté le 22-01-2006 à 01:11:20    

Ton image dit le contraire. Tu calcules peut-être une normale pour chaque sommet, mais manifestement les sommets d'une même face ont la même normale. Si ce n'était pas le cas, elles auraient une couleur en dégradé.


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 22-01-2006 à 01:11:56    

Ah oui tiens j'avais oublié cette possibilité.


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 22-01-2006 à 01:17:07    

non mais je pense pas qu'il fasse le "moyennage" des normales. Il emet ptet une normale par vtx, mais c'est la meme normale pour tous les vtx d'une meme face. Enfin c'est comme ca que je le comprends. J'imagine aussi qu'il utilise les odieuses fonctions glVertex3f & cie...

Reply

Marsh Posté le 22-01-2006 à 11:24:37    

chrisbk a écrit :

non mais je pense pas qu'il fasse le "moyennage" des normales. Il emet ptet une normale par vtx, mais c'est la meme normale pour tous les vtx d'une meme face. Enfin c'est comme ca que je le comprends. J'imagine aussi qu'il utilise les odieuses fonctions glVertex3f & cie...


 
Bin donne moi une solution plus propre :)

Reply

Marsh Posté le 22-01-2006 à 11:26:32    

Zavie a écrit :

Ton image dit le contraire. Tu calcules peut-être une normale pour chaque sommet, mais manifestement les sommets d'une même face ont la même normale. Si ce n'était pas le cas, elles auraient une couleur en dégradé.


 
C'est du flatshading que je fais.

Reply

Marsh Posté le 22-01-2006 à 11:28:45    

WarDrone a écrit :

Bin donne moi une solution plus propre :)


 
Bah a terme regarde les glmachinarray, et apres les machins pour mettre les vtx en carte video
 
(quel bordel ogl)

Reply

Marsh Posté le 22-01-2006 à 11:34:13    

chrisbk a écrit :

Bah a terme regarde les glmachinarray, et apres les machins pour mettre les vtx en carte video
 
(quel bordel ogl)


 
Je découvre et vu le nombre de primitives c'est pas gagné :)
Je vais regarder ce que tu me dis, et en ce qui concerne le stockage dans la carte video j'utilise une display list, c'est peut être ça dont tu me parles.

Reply

Marsh Posté le 22-01-2006 à 15:17:20    

Petite minute nécessaire d'OpenGL...
 
Il existe en OpenGL trois méthodes pour envoyer les données à la carte graphique :
- le mode immédiat à coups de glVertex et compagnie, qui est le plus lent ;
- les listes d'affichages, qui consistent à compiler des appels OpenGL et à les stocker sur le serveur graphique, ce qui est sensiblement plus rapide pour les commandes répétitives, et en particulier si le client et le serveur sont deux machines différentes ;
- les tableaux de données, qui consistent à ranger les données dans un tableau pour permettre à OpenGL de les traiter en un parcours de tableau (et il existe plusieurs types de rangements avec des perfomances différentes).
 
Le mode immédiat c'est bien pratique pour bricoler et tester, mais pour les perfomances il faut passer par les tableaux de données.
 
(Edit : oublié un 's')


Message édité par Zavie le 22-01-2006 à 23:35:31

---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 22-01-2006 à 15:40:33    

Merci, j'étudierai ça avec soin :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed