Avis aux pros : comment faire de belles ombres? [Résolu] [Open GL] - Divers - Programmation
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)
Marsh Posté le 20-01-2006 à 13:33:16
là je me dirigerai vers un problème de coefficient diffus/spéculaire.
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)
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.
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 :
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 ?
Marsh Posté le 21-01-2006 à 17:56:34
En fait ça ressemble plus à ca :
Edit :
Effectivement mes normales sont identiques sur la face entiere.
Marsh Posté le 22-01-2006 à 00:52:21
Pourquoi faut faire comment pour avoir un ombrage plat de meilleur qualité?
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é.
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...
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
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.
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)
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 |
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.
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')
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 :
C'est un peu nul, je préfèrerais quelque chose de ce style (screen de vrmlview) :
Après avoir lu plusieurs tutorial je suis arrivé à ceci :
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