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 :

mouvement de la lumière.


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut mouvement de la lumière.
    Voilà je cherche faire bouger ma lumière en même temps que la caméra.
    En gros voilà je voudrais la placer la ou se trouve la caméra.
    Le top du top serait de faire un spot dans la direction du champs de vision.

    Les mouvements de caméra sont réalisé par la fonction gluLookAt et mes elements sont stockés dans un DisplayList.

    Je voudrais savoir comment faire donc pour que quand je change les paramètres de la caméra ma lumière suit et éclaire toujours ce que je regarde:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    void CMyViewGL::OnCreateGL()
    {
      glClearColor(0.0F,0.0F,0.0F,1.0F);
      glEnable(GL_LIGHTING);
      glEnable(GL_LIGHT0);
      glEnable(GL_DEPTH_TEST);
      glEnable(GL_LINE_STIPPLE);
      glEnable(GL_COLOR_MATERIAL);
    }
     
    void CMyViewGL::OnDrawGL()
    {
    	GLfloat		LightPos[4] = {0.0f, 0.0f, 0.0f, 1.0f};
    	GLfloat		Diffuse[4]  = {0.8f, 0.8f, 0.8f, 1.0f};
    	GLfloat		Specular[4] = {1.0f, 1.0f, 1.0f, 1.0f};
    	GLfloat		Ambient[4]  = {0.2f, 0.2f, 0.2f, 1.0f};
     
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    	glMatrixMode(GL_MODELVIEW);
     
    	glLoadIdentity();
        //Light position
    	glLightfv(GL_LIGHT0, GL_DIFFUSE,  Diffuse);
    	glLightfv(GL_LIGHT0, GL_SPECULAR, Specular);
    	glLightfv(GL_LIGHT0, GL_AMBIENT,  Ambient);
    	glLightfv(GL_LIGHT0, GL_POSITION, LightPos);
     
    	gluLookAt(cam.x, cam.y, cam.z, ref.x, ref.y, ref.z, up.x, up.y, up.z);
    	if (Gr3DHLMode == Gr3D_HL)
    		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    	else
    		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
     
    	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);	
    	glLineStipple(1, 0xFFFF);
    	glLineWidth(1.0);
     
    	// Draw Element
    	if (update)
    	{
    		glNewList(MY_ELEMENT_LIST, GL_COMPILE);
    		Draw();
    		glEndList();
    		update = false;
    		glCallList(MY_ELEMENT_LIST);
    	}else
    		glCallList(MY_ELEMENT_LIST);
    }
     
    void CMyViewGL::OnSizeGL(int cx, int cy) 
    {
    	// set correspondence between window and OGL viewport
    	glViewport(0, 0, cx, cy);
     
    	glMatrixMode(GL_PROJECTION);
     
    	glLoadIdentity();
     
    	gluPerspective(45, float(cx)/float(cy), 0.01, 1000);
    }
    merci d'avance.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    mmm tu as presque la réponse dans ton code.
    - Tu as utilisé pour la lumière le paramètre GL_POSITION, qui sert à gérer la position de la lumière. Donc tu n'as qu'à positionner ta lumière au même endroit que la caméra.
    - Ensuite, le paramètre GL_DIRECTION te donne la direction dans laquelle la lumière est orientée, donc tu peux mettre le même point d'orientation que celui du gluLookAt().

    Bonne continuation...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    ah oky... MERCI :-)

    donc je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    ....
    	glMatrixMode(GL_MODELVIEW);
     
    	glLoadIdentity();
     
    	LightPos[0] = (GLfloat) cam.x;
    	LightPos[1] = (GLfloat) cam.y;
    	LightPos[2] = (GLfloat) cam.z;
     
    	CV3 v(cam, ref); // calcul du vecteur entre cam et ref
    	v.Unit();            // transfo vecteur unitaire
     
    	LightDir[0] = (GLfloat) v.x;
    	LightDir[1] = (GLfloat) v.y;
    	LightDir[2] = (GLfloat) v.z;
     
        //Light position
    	glLightfv(GL_LIGHT0, GL_DIFFUSE,  Diffuse);
    	glLightfv(GL_LIGHT0, GL_SPECULAR, Specular);
    	glLightfv(GL_LIGHT0, GL_AMBIENT,  Ambient);
    	glLightfv(GL_LIGHT0, GL_POSITION, LightPos);
    	glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, LightDir);
     
    	gluLookAt(cam.x, cam.y, cam.z, ref.x, ref.y, ref.z, up.x, up.y, up.z);
    ..........
    bon bah j'ai quand meme mon calcul de normal qui merde car ca me fait n'importe quoi...

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    j'y suis arrivé... en fait faut positionner la lumière et donner sa direction.. apres le gluLookAt.. et ca marche nickel.

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

Discussions similaires

  1. Vocabulaire : besoin de vos lumières...
    Par SteelBox dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 27/02/2004, 13h25
  2. [FLASH MX]le mouvement et les sacades
    Par VincentB dans le forum Flash
    Réponses: 6
    Dernier message: 16/01/2004, 23h42
  3. Réponses: 19
    Dernier message: 07/11/2003, 08h10
  4. Problème lumière
    Par Francky033 dans le forum DirectX
    Réponses: 3
    Dernier message: 15/07/2003, 05h05
  5. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09

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