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 :

visualisation d'une scene avec opengl


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut visualisation d'une scene avec opengl
    Bonjour tout le monde,
    j'essaye de faire un petit programme (c++ et opengl) de visualisation de scene, dans laquelle je dois être capable de se balader en utilisant les touches tu clavier.
    voici une portion du code :

    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
    rad = 0.0174532925f (PI/180);
    GLvoid display()
    {
            glLoadIdentity();
     
    	GLfloat xtrans = -xpos; 
            GLfloat ztrans = -zpos;	
            GLfloat ytrans = -ypos;
    	GLfloat SceneRot = 360.0f - LookLeftRight;
     
    	glRotatef(lookupdown,1,0,0);
    	glRotatef(SceneRot,0,1,0);
    	glTranslatef(xtrans, ytrans, ztrans);
     
            drawscene()
    }
     
    GLvoid clavier(int key, int x, int y)
    {
     
    	switch (key)
    	{
    		case GLUT_KEY_UP:
    			xpos -=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad);
    			ypos -= (float)sin(lookupdown*rad)*sin(LookLeftRight*rad);
    			zpos -= (float)cos(lookupdown*rad);
    			glutPostRedisplay();			
    			break;
     
    		case GLUT_KEY_DOWN:					
    			xpos +=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad);
    			ypos += (float)sin(lookupdown*rad)*sin(LookLeftRight*rad);
    			zpos += (float)cos(lookupdown*rad);
    			glutPostRedisplay();			
    			break;
     
    		case GLUT_KEY_LEFT:					
    			LookLeftRight -= 1.0f;
    			glutPostRedisplay();			
    			break;
     
    		case GLUT_KEY_RIGHT:		
    			LookLeftRight += 1.0f;
    			glutPostRedisplay();			
    			break;
                    case 'y': 
    			lookupdown-= 1.0f;
    			glutPostRedisplay();			
    			break;
     
    		case 'Y': 
    			lookupdown+= 1.0f;
    			glutPostRedisplay();			
    			break;
    	}
    }
    Malheureusement le résultat n'est pas vraiment satisfaisant, et je crois que le problème se produit lors de la récupération des coordonnées cartésiennes à partir des coordonnées sphérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            xpos -=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad);
    	ypos -= (float)sin(lookupdown*rad)*sin(LookLeftRight*rad);
    	zpos -= (float)cos(lookupdown*rad);
    J'espère que j'ai bien expliqué mon problème. si quelqu'un pourra m'aidé je serai très reconnaissante
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Citation Envoyé par fleurdelys77 Voir le message
    Malheureusement le résultat n'est pas vraiment satisfaisant,
    C quoi exactement votre problème
    tu compte faire une translation à droite, à gauche, vers le haut et vers le bas??, ou quoi exactement??
    Merci d'expliquer d'avantage ce que vous voulez faire et quel est le résultat que vous avez obtenu (avec plus de détails)

    Merci

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    C quoi exactement votre problème
    tu compte faire une translation à droite, à gauche, vers le haut et vers le bas??, ou quoi exactement??
    Merci d'expliquer d'avantage ce que vous voulez faire et quel est le résultat que vous avez obtenu (avec plus de détails)

    Merci
    Je veux se déplacer dans une scene 3D dans toutes les directions (si je me déplace en appuyant sur GLUT_KEY_UP ou GLUT_KEY_DOWN alors le déplacement se fait dans la direction de vue).

    Au lieu les commandes que j'ai utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xpos -= (float)sin(lookupdown*rad)*cos(LookLeftRight*rad);
    ypos -= (float)sin(lookupdown*rad)*sin(LookLeftRight*rad);
    zpos -= (float)cos(lookupdown*rad);
    Dans un tutorial de NEHE il a utilisé http://nehe.gamedev.net/tutorial/loa...d_world/22003/:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    xpos -= (float)sin(yrot*rad)*10;
    zpos -= (float)cos(yrot*rad)*10;
    if (walkbiasangle >= 359.0f){
    	walkbiasangle = 0.0f;
    }else{
    	walkbiasangle+= 10;
    }
    walkbias = (float)sin(walkbiasangle * rad)/20.0f;
    Mais je n'ai pas compris pourquoi il a utilisé "sin" pour calculer xpos et cos pour zpos et encore pour ypos (walkbias) j'ai rien pigé

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Bonjour,
    si tu compte faire une simple translation alors pourquoi compliquer les choses avec des sin et des cos???
    voici un exemple qui te permet de faire plusieurs opérations avec le clavier
    http://www.codeproject.com/KB/openGL...avigation.aspx
    j'espère que ça vous soit util
    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    Bonjour,
    si tu compte faire une simple translation alors pourquoi compliquer les choses avec des sin et des cos???
    voici un exemple qui te permet de faire plusieurs opérations avec le clavier
    http://www.codeproject.com/KB/openGL...avigation.aspx
    j'espère que ça vous soit util
    Merci
    Merci 3aychoucha pour ton lien mais malheureusement ce n'est pas ce que je cherche. Pour être plus explicite je veux quelque chose comme la simulation d'une camera d'un simulateur de vol (en épargnant bien sûr la force de vol ,...)

    Merci encore

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 132
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Un tuto intéressant, qui si je me rappelle bien, fait ce que vous voulez:
    http://www.riemers.net/eng/Tutorials...uaternions.php

    Par contre, il faut convertir le code en OpenGL (ce qui n'est pas trop dur).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/01/2014, 11h48
  2. Probleme de chargement d'une image avec opengl
    Par JilyJ dans le forum OpenGL
    Réponses: 11
    Dernier message: 30/05/2007, 14h11
  3. Afficher une image avec opengl
    Par kmaniche dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/02/2006, 09h04

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