Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1471 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [OpenGL] La lumière traverse tous les murs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL] La lumière traverse tous les murs

n°1356958
souliane
Posté le 01-05-2006 à 05:10:06  profilanswer
 

Salut, je me prend le chou avec OpenGL et les sources de lumières... J'ai une petite map avec plusieurs sources définies et un des problemes que je rencontre c'est que les sources ponctuelles traversent tous les murs. J'ai essayé en désactivant le blending, en modifiant les matériaux des murs avec glMaterial etc et je n'arrive vraiment à rien. Y'a t'il un moyen simple pour faire ça ou bien il faut coder en dur ?! :sweat: Je précise que je ne parle pas (encore) d'ombre, je voudrais juste que mes lumières ne traversent pas les murs. Merci  :hello:

mood
Publicité
Posté le 01-05-2006 à 05:10:06  profilanswer
 

n°1357004
theshockwa​ve
I work at a firm named Koslow
Posté le 01-05-2006 à 11:51:31  profilanswer
 

si la lumière ne traverse pas les solides (murs), c'est bien une gestion des ombres, non ?

n°1357077
bjone
Insert booze to continue
Posté le 01-05-2006 à 13:09:32  profilanswer
 

c'est normal bien venu dans le monde des API 3D temps réel :D


Message édité par bjone le 01-05-2006 à 13:13:37
n°1357079
bjone
Insert booze to continue
Posté le 01-05-2006 à 13:17:22  profilanswer
 

il faut que tu décompose ton niveau en salles, pour chaque salle et les objets contenus, tu élis les sources de lumière pertinentes, et de préférence tu fais des tests d'occlusion pour savoir si tes salles sont dans le champ de vision (boundingbox, portal vis à vis du frustum de vision). (tu peux aussi construire des tables de visibilitées entre salles de manière statique)
 
après si tu veux un modèle d'éclairage dynamique plus exact, tu fais des shaders pour de l'éclairage par pixel, et pour chaque source de lumière ponctuelle tu utilises une cubemap Z pour connaitre les surfaces les plus proches à la sources, et donc savoir quand tu traçes une surface du monde si tu est éclairé ou pas. (ou tu joues avec des volumes d'ombres pour connaitre les surface dans les zones d'ombres, à postériori quoique pas forcément)
 
si tu veux te contenter d'un modèle d'éclairage statique, tu utilises des textures de lighmap qui couvrent la surface des pièces, qui sont générée par un moteur de radiosité en offline.
 
il te manque plus qu'un arbre BSP pour accélérer les requêtes de collisions...
 
et plop t'as refais Quake (si tu choisi l'approche statique) :D
 
des heures de jeu en perspective non ? :D


Message édité par bjone le 01-05-2006 à 13:25:00
n°1357134
souliane
Posté le 01-05-2006 à 14:17:59  profilanswer
 

Oulala mais c'est hyper compliqué :sweat:
 
Je vais peut-etre répéter ce que tu as dit ou dire une connerie, mais c'est pour voir si j'ai bien compris :
 
Pour avoir un résultat minimalement correct et adaptable à la map (que je sois pas obligé de modifier le code de l'éclairage si je déplace une salle) il faudrait donc que je tire un trait entre la position du joueur et la source lumineuse, si y'a un obstacle entre les deux je désactive tout simplement la lumière... mais le problème c'est par exemple que si je suis dans une salle avec une porte ouverte et qu'il y a une lumiere dehors, si je me cache derriere un mur c'est tout noir et dès que je viens devant la porte ça devient éclairé. Savez vous comment résoudre ça sans trop de difficultés ? Car en fait il me semble qu'il faudrait lancer un rayon entre la source et chaque pixel, dans le cas ou je serais derriere la porte la source serait donc désactiver pour moi mais activé pour le mur d'en face qui lui me refleterait un peu de la lumiere et serait donc éclairé... c'est ça qu'on appelle lightmap ?
 
Par rapport à ce probleme, je l'ai en fait déjà en quelque sorte actuellement, mais je ne sais pas du tout d'ou ça vient ou si c'est lié. Je regarde par exemple un mur, il est très sombre et si je tourne la tête de quelques pixels il devient subitement éclairé :??:

n°1357176
_darkalt3_
Proctopathe
Posté le 01-05-2006 à 15:16:58  profilanswer
 

Je m'incruste:
 
bjone: pour la construction d'un arbre bsp, il faut savoir découper un triangle par un plan (ou bien je n'ai pas compris): il y a un algorithme éfficace pour cela ?

n°1357180
_darkalt3_
Proctopathe
Posté le 01-05-2006 à 15:19:40  profilanswer
 

souliane a écrit :

c'est ça qu'on appelle lightmap ?


 
la light map est en fait générée à la création du level: on calcul pour les sources fixes de lumière (qui ne changeront donc pas en temps réel) une texture que l'on superpose à la texture de mur par exemple, pour simuler un éclairage.

n°1357186
souliane
Posté le 01-05-2006 à 15:26:29  profilanswer
 

Ok, et le pixel shading c'est la version dynamique de la lightmap ?

n°1357190
_darkalt3_
Proctopathe
Posté le 01-05-2006 à 15:33:10  profilanswer
 

disons que c'est la version dynamique de l'éclairage;
 
plus de détails là :http://nehe.gamedev.net/data/articles/article.asp?article=21
 
et plus généralement:
http://nehe.gamedev.net/ (excellent site dont je te recommande chaudement l'éntière la lecture).

n°1357192
souliane
Posté le 01-05-2006 à 15:35:16  profilanswer
 

Merci à vous pour votre aide :)
Je connaissais déjà nehe mais c'est un peu long et compliqué pour moi pour l'instant :D

mood
Publicité
Posté le 01-05-2006 à 15:35:16  profilanswer
 

n°1357195
_darkalt3_
Proctopathe
Posté le 01-05-2006 à 15:36:15  profilanswer
 

ben si tu commences du début (lesson1), tu verras que c'est super facile: le code est commenté, etc.
 
C'est juste long (mais on a rien sans rien).

n°1357208
bjone
Insert booze to continue
Posté le 01-05-2006 à 15:50:17  profilanswer
 

souliane a écrit :

Oulala mais c'est hyper compliqué :sweat:
 
Je vais peut-etre répéter ce que tu as dit ou dire une connerie, mais c'est pour voir si j'ai bien compris :
 
Pour avoir un résultat minimalement correct et adaptable à la map (que je sois pas obligé de modifier le code de l'éclairage si je déplace une salle) il faudrait donc que je tire un trait entre la position du joueur et la source lumineuse, si y'a un obstacle entre les deux je désactive tout simplement la lumière... mais le problème c'est par exemple que si je suis dans une salle avec une porte ouverte et qu'il y a une lumiere dehors, si je me cache derriere un mur c'est tout noir et dès que je viens devant la porte ça devient éclairé. Savez vous comment résoudre ça sans trop de difficultés ? Car en fait il me semble qu'il faudrait lancer un rayon entre la source et chaque pixel, dans le cas ou je serais derriere la porte la source serait donc désactiver pour moi mais activé pour le mur d'en face qui lui me refleterait un peu de la lumiere et serait donc éclairé... c'est ça qu'on appelle lightmap ?
 
Par rapport à ce probleme, je l'ai en fait déjà en quelque sorte actuellement, mais je ne sais pas du tout d'ou ça vient ou si c'est lié. Je regarde par exemple un mur, il est très sombre et si je tourne la tête de quelques pixels il devient subitement éclairé :??:


 
oulà non, le critère d'éclairabilitée (ouch compliqué ça) est indépendant du point de vue.
quand je parles des tests de visiblité c'est pour rejeter les éléments du monde qui ne sont pas visibles et qui n'ont pas a être traité par la suite. (ça ne change rien à ton problème, c'est un principe d'optimisation global).
 
la philosophie générale c'est que lorsque tu as une source de lumière, tu dois être capable de déterminer le lot de géométrie impactée par cette lumière, si tu ne veux pas avoir d'éclairages bizarres.
ou plustôt réciproquement, par géométrie tu dois être capable de déterminer le lot de sources de lumières pertinentes a prendre en compte.
 
dans le cas d'un niveau en intérieur, il faut décomposer ton niveau en entitées: salles/décors dans la salle, acteurs, etc.... et déterminer les sources pertinentes impactant l'éclairage de ces entitées.
 
généralement c'est indépendant du point de vue.
 
donc par exemple si déjà tu fais un système d'organisation de salles, tu testes pour chaque salle puis chaque élément de la salle les lumières a utiliser.
 
c'est pour ça que généralement on utilise des méthodes plus ou moins assez chaudes.
 
A toi de déterminer le niveau de dynamicité et les artefacts d'éclairages provoquées par les méthodes sélectionnées que tu peux tolérer au rendu.


Message édité par bjone le 01-05-2006 à 15:54:43
n°1357213
bjone
Insert booze to continue
Posté le 01-05-2006 à 15:53:16  profilanswer
 

souliane a écrit :

Ok, et le pixel shading c'est la version dynamique de la lightmap ?


 
les shaders sont des programmes éxécutés au niveau vertex, pixel/fragment, puis bientôt avec D3D10 au niveau primitive géométrique (point sprite/ligne/triangle).
 
ces programmes sont éxécutés localement au gpu et remplaçent 90% de l'aspect "machine à états" des API.
 
l'avantage est que beaucoup de limites sont levées et cela permet une plus grande complexité & lattitude d'approches calculatoires.


Message édité par bjone le 01-05-2006 à 15:58:32
n°1357221
bjone
Insert booze to continue
Posté le 01-05-2006 à 16:06:20  profilanswer
 

_darkalt3_ a écrit :

Je m'incruste:
 
bjone: pour la construction d'un arbre bsp, il faut savoir découper un triangle par un plan (ou bien je n'ai pas compris): il y a un algorithme éfficace pour cela ?


 
bah je sais pas, fais un petit dessin avec un triangle et ses vertexs, un trait qui coupe le triangle, et tu regardes comment générer les vertexs aux (deux) points d'intersection entre un segment du contour du triangle et le plan.

n°1357253
_darkalt3_
Proctopathe
Posté le 01-05-2006 à 17:01:09  profilanswer
 

:jap:, genre thalès quoi...


Message édité par _darkalt3_ le 01-05-2006 à 17:01:23
n°1357330
bjone
Insert booze to continue
Posté le 01-05-2006 à 19:47:53  profilanswer
 

oué walla c'est un calcul de barycentre par rapport à la distance au plan. (vu dans un autre sens)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [OpenGL] La lumière traverse tous les murs

 

Sujets relatifs
"windows.h - 'empecher' fermeture fenetre" [opengl][openGL] couleur ne dépedant pas des lumieres
OpenGL -> multitexturing -> blend problemVos avis: mon jeu amateur Sonic 3D ( moteur perso OpenGL )
[OpenGL] animation camera[Java3D] problem de lumiere
[openGL]: passage coordonnées camera -> globalesinclure du Python pour une reconnaissence d'un .blend [openGL]
[OpenGL] Dessiner des voxelsProblème opengl et cpp managed
Plus de sujets relatifs à : [OpenGL] La lumière traverse tous les murs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR