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

Moteurs 3D Discussion :

OpenGL et sunlight


Sujet :

Moteurs 3D

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut OpenGL et sunlight
    Bonsoir !

    J'ai cherché toute l'après midi, et ça commence à m'agacer :
    je veux faire une lumière toute simple qui représenterai le soleil sur ma heightmap. Hors quand je tourne, il semble que la lumière reste toujours sur ses coordonnées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    GLfloat            LightAmbient[4]= { 0.0f, 0.0f, 0.0f, 1.0f };
    GLfloat            LightDiffuse[4]= { 1.0f, 1.0f, 1.0f, 1.0f };
    GLfloat            LightPosition[4]= { 1.0f, 0.0f, 0.0f, 0.0f };                  
     
    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
    glLightfv(GL_LIGHT0, GL_POSITION,LightPosition);
     
    glEnable(GL_LIGHT0);
     
    glEnable(GL_LIGHTING);
    Pour les rotations j'utilise les quaternions... alors ma question : comment se fait il que le "soleil" reste statique, et que mon monde tourne comme il faut.
    Le problème se voit quand je regarde le sol, il devient sombre suivant son angle avec l'axe des x. Comment donc qu'on fait ? Hormis l'utilisation de lightmaps pour représenter le soleil, cela veut dire que si je pose des lumieres dans mon programme (genre une map la nuit), elles auront toutes ce comportement, ce qui n'est pas jojo...

    PS : je précise, les vertices de ma mp snt stockés dans une displaylist, si ça peut servir...

  2. #2
    Membre expérimenté Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GLfloat            LightPosition[4]= { 1.0f, 0.0f, 0.0f, 0.0f };
    Tu définis une direction, pas une position comme semble l'indiquer LightPosition[].

    Rappel: si LightPosition[3] == 1.0f, alors c'est une position;
    si LightPosition[3] == 0.0f, alors c'est une direction.

  3. #3
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Justement, quoi que j'y mette en [4], ça ne change rien à la direction ni à la position...
    J'essaye d'uploader des screenshots pour que vous ayez un visu, mais avec ma connexion en carton...



    la même colline de face... pas du tout comme il faudrait.


    Sur la première image, la lumière éclaire presque de face, et quand on tourne la caméra, (donc le monde dans le sens opposé en principe), elle vient de la droite.

  4. #4
    Membre expérimenté Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Par défaut
    N'oublie pas la fonction glShadeModel(GL_SMOOTH); dans l'initialisation pour avoir une lumière moins marqué et plus linéaire.

    EDIT: met une lumière spéculaire aussi.

    EDIT2: et n'oublie surtout pas les matériaux aussi !!!

  5. #5
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    j'ai déjà fait tout ça, et pourtant cette lumière continue à ne pas bouger avec l'ensemble de la carte.

  6. #6
    Membre expérimenté Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Par défaut
    En ce qui concerne le rendu, 1- vérifie tes normales et 2- Normalise-les avec glEnable(GL_NORMALIZE); et conclut par glDisable(GL_NORMALIZE); la section de ton code où tu actives les normales.

    Sinon, en ce qui concerne la lumière que tu veux déplacer, tu veux la déplacer par rapport à quoi ?
    En théorie il suffit de lui modifier sa position en fonction d'un point de référence qui peut être la caméra par exemple.

    Si ton tableau LightPosition[] reste inchangé, la position de ta lumière le restera aussi.

Discussions similaires

  1. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  2. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  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