IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Lumiere OpenGl (SPOT_DIRECTION)


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Par défaut Lumiere OpenGl (SPOT_DIRECTION)
    Bonjour,

    Je réalise actuellement un projet pour mes études avec OpenGl en C++. Le but du projet est de réaliser une gestion dynamique des lumières en 3D en utilisant une vue de face/ de coté et de dessus... Enfin bref tout marche bien sauf quand je choisis le spot_direction :

    GLenum lightEnum[]={GL_LIGHT0,GL_LIGHT1,GL_LIGHT2,GL_LIGHT3,GL_LIGHT4,GL_LIGHT5,GL_LIGHT6,GL_LIGHT7};
    int numlum = P[numPoint].numLumiere;

    GLfloat direction[3];
    direction[0]=P[numPoint].x;
    direction[1]=P[numPoint].y;
    direction[2]=P[numPoint].z;
    glLightfv(lightEnum[numLum], GL_SPOT_DIRECTION,direction);
    Alors que cela marche :

    glLightfv(lightEnum[numLum],GL_SPOT_CUTOFF,45.0);
    Notes :
    P[] contient en outre la position des lumières, le type du point (Direction/position pour l'affichage), le numéro de la lumière à laquelle apartient le point.
    J'ajoute que je suis sur à 100% que l'instruction est bien réalisée (J'ai vérifié avec le débugger) , le numéro de lumière est ok, direction[] est ok lui aussi, mais,lors de l'exécution de l'instruction sauf que rien ne se passe.

    si quelqu'un a une idée lumineuse...

  2. #2
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut tu as modifié toutes les propriétés de ta light ou juste la propriété gl_spot_direction ?

    toutes les propriétés ont des valeurs pas défaut il faut soit que tu les modifies toutes soit que tu regardes à quelles valeurs elles sont pas défaut
    (ces valeurs par défaut ne sont pas les mêmes pour gl_light0 et pour les autres)

    voila les valeurs par défaut (il me semblait que ces valeurs par défaut n'étaient pas les mêmes pour gl_light0 et pour les autres..)

    Table 6-1 : Default Values for pname Parameter of glLight*() Parameter Name GL_AMBIENT (0.0, 0.0, 0.0, 1.0) ambient RGBA intensity of light
    GL_DIFFUSE (1.0, 1.0, 1.0, 1.0) diffuse RGBA intensity of light
    GL_SPECULAR (1.0, 1.0, 1.0, 1.0) specular RGBA intensity of light
    GL_POSITION (0.0, 0.0, 1.0, 0.0) (x, y, z, w) position of light
    GL_SPOT_DIRECTION (0.0, 0.0, -1.0) (x, y, z) direction of spotlight
    GL_SPOT_EXPONENT 0.0 spotlight exponent
    GL_SPOT_CUTOFF 180.0 spotlight cutoff angle
    GL_CONSTANT_ATTENUATION 1.0 constant attenuation factor
    GL_LINEAR_ATTENUATION 0.0 linear attenuation factor
    GL_QUADRATIC_ATTENUATION 0.0 quadratic attenuation factor

    http://fly.cc.fer.hr/~unreal/theredbook/chapter06.html

    ha oui enfin c'est sûrement plus instructif de savoir faire les lumières (c'est pas compliqué) avec les shaders je te conseille vivement plutôt que les lumières de gl !

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Par défaut
    Ok merci pour le tuto il est bien je le garde sous le coude . Après une série de tests en tous genre j'ai trouvé d'autres soucis au niveau de l'exécution. Je vais commencer par régler ça en espérant que ça influera sur mon problème de départ, même si j'en doute un peu mais on ne sais jamais.

  4. #4
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bof pour se passer des lumières opengl ! :p

    Surtout en passant par un shader, les variables uniformes opengl "inbuilt" sont traitées beaucoup plus rapidement que celles qu'on passe au shader.
    Alors si on doit passer tout un tableau de lumière au fragment shader pour faire de l'éclairage par pixel, ça risque d'être un peu lourd.

    Bref, lorsque tu défini le vecteur direction du spot, il est transformé par la matrice modelview. Ses coordonées sont donc dans le repère objet de la lumière !
    Ensuite vérifie bien que le w de ta position est bien à 1. (un point) et celui de ta direction à 0. (un vecteur).

    Dailleurs tu n'as pas définis le w de ta direction, opengl n'aprécie peut être pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    direction[0]=P[numPoint].x;
    direction[1]=P[numPoint].y;
    direction[2]=P[numPoint].z;
    direction[3] = 0.;
    glLightfv(lightEnum[numLum], GL_SPOT_DIRECTION,direction);
    Bonne chance

  5. #5
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut, ce passage d'uniform est fait une fois par frame donc je suis pas sur que ce soit ça qui soit décisif, et puis quand je récupères ces uniform pour la lumière c'est dans gl_LightSource[i] donc je pensais que c'était à la même location que dans le fixed pipeline !

    quoi qu'il en soit l'éclairage par pixel est plus joli , pourquoi s'en priver ?

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Par défaut
    J'avais déjà testé en passant w = 0.0 et 1.0 en paramètre suplémentaire et ca ne marchait pas... J'ai revérifié en utilisant aussi GL_light1 pour éviter le cas par défaut mais rien de plus la direction ne varie pas.

    J'ai encore vérifié mon code mais je ne vois pas d'erreur et au débuggage lors de l'execution de la ligne les paramètres sont ok...

    Si vous ne voyez rien de problématique dans mon bout de code c'est très probable que l'erreur soit ailleur.

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Par défaut
    J'ai la réponse au problème et j'ai d'ailleur du mal à comprendre. Ca ne venait pas de mon code visiblement. En fait tant que je ne définis pas le cutoff du spot ca ne fonctionne pas. Une fois celui ci définit ca marche bien. Je ne comprends pas trop car en TP on avait pas eu à définir le cutoff pour pouvoir utiliser le spot direction. Le problème est résolu. Merci de votre aide.

  8. #8
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Arf

    Opengl a 3 types de lampes qu'il differencie selon certains critères :

    - cutoff = 180. , position.w = 1 => lumière ponctuelle
    - cutoff = 180. , position.w = 0 => lumière directionelle
    - cutoff != 180. => spot

    Or par défaut le cutoff est égal à 180. !
    C'est donc normal que ça ne fasse pas l'effet spot si tu ne le modifie pas

    C'est plutot comment ça peut marcher dans ton TP qu'il faudrait chercher à comprendre ^^

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Par défaut
    Ok merci . Pour le tp j'ai vérifier et ça ne marchais effectivement pas comme il faut mais comme la partie à éclairer l'était correctement j'ai supposé que ça marchais bien

    J'ai une petite question bonus :
    Existe il une fonction toute prête permettant de remettre les paramètres par défaut d'une light en vue de la supprimer ou faut il le faire à la main?
    Est il aussi possible de récupérer les paramètres d'une light (par exemple existe il une fonction permettant de savoir quel est la position actuelle de la lampe 0 ou son cutoff ou autre...?)

  10. #10
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    OpenGL c'est comme les chiottes :
    " Merci de laisser les toilettes dans le même état que vous l'avez trouver en entrant "

    C'est une machine a état, et si tu codes proprement, à chaque instant du dois savoir quel est l'état de tes variables.
    Donc je ne sais pas trop pourquoi tu as besoin de récupérer le cutoff ou la position d'une lumière mais c'est que ton code doit être mal organisé :p

    En gros, tu actives l'éclairage, tu changes les proprietés de ta lumières, tu dessines ce que tu veux, tu remets les proprietés de ta lumière par défaut, tu désactives l'éclairage.
    Et là tu sais qu'en dehors de ta fonction d'afichage, ben ton éclairage est désactivé, et les proprietés de ta lampe sont par défaut. Puis que dans ta fonction tu connais les proprietés de la lampe vu que tu les a modifié toi même.

    Pour les réponses bonus, non il n y a pas de fonction toute prête pour réinitialiser un lampe à ses valeurs par défaut.
    Et regarde ici pour la suite

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 46
    Par défaut
    En fait c'était juste pour pouvoir être sur que les paramètres étaient bien pris en compte et l'afficher dans la console, mais en effet les paramètres je les connais déjà.

    Merci pour tout en tout cas mon appli est quasi finie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 14/07/2008, 01h37
  2. Réponses: 5
    Dernier message: 09/10/2006, 17h29
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo