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 :

Class camera : problème


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut Class camera : problème
    Bonjour,

    Voici ce que j'ai : http://zenux.free.fr/camera.jpg
    Donc j'ai mon nain qui est positionné en 0.0, -1.0, -5.0.
    Et le sol qui est en y=-1.0

    J'aimerai pouvoir déplacer le nain avec les flèches directionnelles. Donc quand j'appuie sur la touche directionnelle de gauche le nain tourne à gauche. Ensuite quand j'appuie sur la flèche pour avancer, le nain devrait avancer face à lui. (En fait le nain ne doit pas bouger mais c'est le sol qui bouge pour faire croire que le nain se déplace).

    Je ne sais pas dutout comment faire, si l'utilisateur fait une rotation et puis avance, c'est tout à fait différent d'avancer et puis de faire une rotation...et ça m'ennuie bien

    Voici ma fonction draw:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void draw()
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity(); //Faut-il le mettre ou pas (tout dépend de l'algo se trouvant dans la class camera) ?
     
    	cam->placeCamera();
     
    	//Affichage du sol ici.
     
    	glPushMatrix();
    	glLoadIdentity();
    	//Affichage du nain ici en 0.0, -1.0, -5.0
    	glPopMatrix();
    }
    Et voici ce qui se trouve dans la fonction membre placeCamera de la classe camera:
    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
    void camera::placeCamera(void)
    {
    	if(bTurnLeft==true || bTurnRight==true)
    	{
    		rotY+=degreeRotY;
    	}
     
    	if(bMoveFront==true || bMoveBack==true)
    	{
    		frontBack+=distFrontBack;
    	}
     
    	//TRANSLATION :
    	render::translate(0.0, 0.0, frontBack);
     
    	//ROTATION Y :
    	render::translate(0.0, 0.0, -5.0);
    	render::rotateY(rotY);
    	render::translate(0.0, 0.0, 5.0);
    }
    Le 2 translates entre le rotate c'est pour que la rotation s'effectue sous les pied du nain et non en z=0.0

    Ce code fait en peu n'importe quoi...
    -Si je fait une rotation avec une des flèches directionnelles : ça fonctionne.
    -Si j'avance : ça fonctionne.
    -Si je refait une rotation après m'être avancé : la rotation ne s'effectue pas en dessous des pied du nain mais tout à fait autre part.

    Description des variables:
    bTurnLeft : est à true quand la flèche directionnelle est appuyé (pareil pour les autres variables commençant par "b")
    degreeRotY : contient le nombre de degrée de rotation à effectuer.
    distFrontBack : contient la distance à avancer quand on appuie sur les flèches directionnelles haut-bas.

    Merci d'avance...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    J'ai su résoudre mon problème...

    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
    void camera::placeCamera(void)
    {
    	if(bMoveFront==true || bMoveBack==true)
    	{
    		x+=sin(-rotY/57.2957795131)*dist;
    		z+=cos(-rotY/57.2957795131)*dist;
    	}
     
    	if(bTurnLeft==true || bTurnRight==true)
    	{
    		rotY+=degreeRotY;
    	}
     
    	render::translate(0.0, 0.0, -5.0);
    	render::rotateY(rotY);
    	render::translate(x, 0.0, 5.0+z);
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2006, 02h20
  2. [MySQLi] Classe Session, problèmes Help !
    Par sirbaldur dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/11/2006, 10h43
  3. Classe clavier problème avec char
    Par benjiprog dans le forum Langage
    Réponses: 30
    Dernier message: 30/06/2006, 17h04
  4. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 19h56

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