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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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

Discussions similaires

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

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