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

  FORUM HardWare.fr
  Programmation
  C++

  OpenGL : combien de lumières on peut utiliser ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

OpenGL : combien de lumières on peut utiliser ?

n°682163
yawen
Posté le 24-03-2004 à 08:00:43  profilanswer
 

Voilà, je suis en train de coder un jeu en OpenGL, et il me semble que le nombre de lumières utilisables est GL_MAX_LIGHTS. Donc j'affiche la valeur de GL_MAX_LIGHTS pendant l'éxécution de mon programme, et je vois un truc genre 2270, sauf que quand je met un certain nombre de lumières, les dernières ne sont pas utilisées, j'ai l'impression que seules les 8 premières fonctionnent. De plus, il est dit dans la doc que le nombre de lumières dépand de l'implémentation (d'où l'utilité de GL_MAX_LIGHTS) et est de 8 au minimum. Moi j'ai l'impression que malgré le fait que la valeur de GL_MAX_LIGHTS soit énorme, je ne peux mettre que 8 lumières :( Si quelqu'un peut m'éclairer (ah ah ah) à ce sujet, svp. Ah oui, et aussi, pour les lumières "de position" (pas directionnelles), l'éclairage sur une face triangulaire est calculé aux 3 extrémités, et ensuite les autres points de la face sont éclairés en faisant des moyennes des valeurs trouvées aux extrémités, donc si on place une lumière assez près de la face, au milieu, l'éclairage sur les extrémités est très faible (angle important avec la normale), et donc la moyenne au milieu est faible aussi, alors que la lumière est juste en face, donc le milieu de la face devrait être très lumineux... je ne sais pas comment changé le mode de calcul, si c'est possible... Merci d'avance si quelqu'un peut m'aider...


---------------
~~ Yawen ~~
mood
Publicité
Posté le 24-03-2004 à 08:00:43  profilanswer
 

n°682189
LeGreg
Posté le 24-03-2004 à 08:47:05  profilanswer
 

Tu peux avoir plus de lumiere en faisant tout toi meme: plusieurs passes en fonction du nombre de lumières, heureusement pour toi la luminosité est additive (tant que tu n'utilises pas de post filtrage style HDR lighting.).  
 
Pour l'éclairage au centre du triangle, c'est un problème bien connu qui est résolu par l'éclairage par pixel.
Pas de bol l'éclairage par pixel tu dois aussi le faire toi meme avec un fragment program par exemple.
 
A+
LeGreg

n°682195
LeGreg
Posté le 24-03-2004 à 08:56:03  profilanswer
 

sinon generalement on évite d'avoir plus de 8 lumières "simultanément".
 
Tu peux en avoir plus de 8 dans ta scene mais tu peux te débarrasser de quelques unes en fonction de leur puissance relative et de leur distance à l'objet à éclairer ou des éléments qui font de l'ombre.
 
LeGreg

n°682218
pascal_
Posté le 24-03-2004 à 09:16:04  profilanswer
 

Yawen a écrit :

Voilà, je suis en train de coder un jeu en OpenGL, et il me semble que le nombre de lumières utilisables est GL_MAX_LIGHTS. Donc j'affiche la valeur de GL_MAX_LIGHTS pendant l'éxécution de mon programme, et je vois un truc genre 2270, sauf que quand je met un certain nombre de lumières, les dernières ne sont pas utilisées, j'ai l'impression que seules les 8 premières fonctionnent. De plus, il est dit dans la doc que le nombre de lumières dépand de l'implémentation (d'où l'utilité de GL_MAX_LIGHTS) et est de 8 au minimum. Moi j'ai l'impression que malgré le fait que la valeur de GL_MAX_LIGHTS soit énorme, je ne peux mettre que 8 lumières :( Si quelqu'un peut m'éclairer (ah ah ah) à ce sujet, svp. Ah oui, et aussi, pour les lumières "de position" (pas directionnelles), l'éclairage sur une face triangulaire est calculé aux 3 extrémités, et ensuite les autres points de la face sont éclairés en faisant des moyennes des valeurs trouvées aux extrémités, donc si on place une lumière assez près de la face, au milieu, l'éclairage sur les extrémités est très faible (angle important avec la normale), et donc la moyenne au milieu est faible aussi, alors que la lumière est juste en face, donc le milieu de la face devrait être très lumineux... je ne sais pas comment changé le mode de calcul, si c'est possible... Merci d'avance si quelqu'un peut m'aider...


 
Déjà, pour GL_MAX_LIGHTS aucune carte ne gère 2270 lights.
Sur ma Geforce2, GL_MAX_LIGHTS est à 8. Il me semble que sur les cartes plus récentes c'est passé à 16, mais c'est vraiment pas sûr...
 
 
 
 
 
 
 
 

n°682517
yawen
Posté le 24-03-2004 à 12:40:17  profilanswer
 

Le 2270 me semble assez énorme aussi, mais c'est ce que je vois en faisant printf("%d",GL_MAX_LIGHTS), maintenant, j'avoue que je ne sais pas quel est le type de GL_MAX_LIGHTS, et donc si on peut afficher la valeur comme ça...
 
En ce qui concerne l'éclairage par pixel, je vois ce que c'est (avant de me lancer dans OpenGL, j'ai fais quelques programmes pour faire du rendu en ray tracing), mais par contre, je vois pas comment le faire en OpenGL (c'est quoi, un "fragment program" ?).
En trainant un peu sur internet, j'ai lu quelques trucs, en particulier en rapport avec le bump mapping : une des methodes consistait à faire un tableau de normales qu'on applique un peu comme une texture, pour que chaque point de la face soit éclairé avec la normale qui va bien, mais je ne sais pas non plus comment faire ça en OpenGL (dans le fond, ça revient au même problème que l'éclairage par pixel : est ce qu'il existe des fonctions en OpenGL qui permettent de le faire ? parce que si je le fais moi même, c autant dire que l'affichage sera entièrement software...).
 
En ce qui concerne les ombres, je vois bien quelques moyens de les faire, par exemple en "projetant" toutes les faces sur la face qu'on est en train de dessiner, selon la position de la lumière, et de ne dessiner la face que là où les projections des autres faces ne sont pas (par exemple en utilisant le stencil buffer), puis de procéder de même pour les autres lumières, et enfin de tout refaire pour chaque face... mais ça necessite beaucoup de passes par face (autant qu'il y a de lumières) et beaucoups de calculs pour chaque faces... je suppose que ce n'est pas du tout la meilleure méthode... de toute façon, mon jeu se passe dans l'espace, donc je pense que je vais laisser tomber les ombres portées, ça ne se voit pas trop...


---------------
~~ Yawen ~~
n°682599
pascal_
Posté le 24-03-2004 à 13:09:36  profilanswer
 

Yawen a écrit :

Le 2270 me semble assez énorme aussi, mais c'est ce que je vois en faisant printf("%d",GL_MAX_LIGHTS), maintenant, j'avoue que je ne sais pas quel est le type de GL_MAX_LIGHTS, et donc si on peut afficher la valeur comme ça...


 
Aie, c'est pas ça du tout  :D .
La, tu récupères une valeur de constante.
 
Faut faire :

Code :
  1. GLint gl_max;   
  2.     glGetIntegerv(GL_MAX_LIGHTS, &gl_max);
  3.    
  4.     printf( "GL_MAX_LIGHTS = %d\n", (int)gl_max );


Message édité par pascal_ le 24-03-2004 à 13:09:50
n°682611
yawen
Posté le 24-03-2004 à 13:15:03  profilanswer
 

ah, ok, merci... mais de toute façon je n'ai plus vraiment besoin de connaitre la valeur puisque je sais que c 8 ou au mieux 16, et que de toute façon j'irais pas très loin avec ça... (ceci dit, j'ai pas trop compris le truc, là, c quoi, exactement, GL_MAX_LIGHTS ?)


---------------
~~ Yawen ~~
n°682619
pascal_
Posté le 24-03-2004 à 13:17:07  profilanswer
 

Yawen a écrit :

 
En ce qui concerne les ombres, je vois bien quelques moyens de les faire, par exemple en "projetant" toutes les faces sur la face qu'on est en train de dessiner, selon la position de la lumière, et de ne dessiner la face que là où les projections des autres faces ne sont pas (par exemple en utilisant le stencil buffer), puis de procéder de même pour les autres lumières, et enfin de tout refaire pour chaque face... mais ça necessite beaucoup de passes par face (autant qu'il y a de lumières) et beaucoups de calculs pour chaque faces... je suppose que ce n'est pas du tout la meilleure méthode... de toute façon, mon jeu se passe dans l'espace, donc je pense que je vais laisser tomber les ombres portées, ça ne se voit pas trop...


 
Effectivement, c'est la première solution qui vient tout de suite à l'esprit. Mais faut vite l'oublier si tu veux faire du temps réel.
 
Va voir sur ce site http://tfpsly.planet-d.net/francais/index.html sous la rubrique "3D doc". Il y a quelques explications simples (et c'est en français).
 

n°682624
pascal_
Posté le 24-03-2004 à 13:19:08  profilanswer
 

Yawen a écrit :

ah, ok, merci... mais de toute façon je n'ai plus vraiment besoin de connaitre la valeur puisque je sais que c 8 ou au mieux 16, et que de toute façon j'irais pas très loin avec ça... (ceci dit, j'ai pas trop compris le truc, là, c quoi, exactement, GL_MAX_LIGHTS ?)


 
Du gl.h :

Code :
  1. #define GL_MAX_LIGHTS                           0x0D31


 
En décimale, 0x0D31 ça fait 3377.

n°682638
yawen
Posté le 24-03-2004 à 13:28:38  profilanswer
 

erf, ouais, maintenant que tu me le dis, ça dois effectivement être la valeur que je lisais (j'ai pas relancé le programme depuis, je suis en période de partiels... dur de programmer quand on est étudiant...). Merci pour tout, j'irais voir le site quand j'aurais finis les partiels...


---------------
~~ Yawen ~~

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

  OpenGL : combien de lumières on peut utiliser ?

 

Sujets relatifs
opengl/linux : ATI et NVIDIA : le mystere de glXGetProcAddressprogrammation de jeux 3D en OpenGL
utiliser la carte graphiqueutiliser 1 formule de calc stckée dans 1 champ d'1 bd access
[HTML]Comment utiliser la sélection d'une liste de choix ?[OpenGL] Une bonne equation pour heightmap avec grayscale
comment utiliser le Protocol SNMPcomment lire une ligne dans un fichier text pour l'utiliser dans
[BCB6] Comment utiliser les librairies MySQL ?configurer KDevelop pour utiliser javac et java
Plus de sujets relatifs à : OpenGL : combien de lumières on peut utiliser ?


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