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 :

[SDL - OPENGL] position souris


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut [SDL - OPENGL] position souris
    salut!
    j'essaye de developper un jeu en side scroller mais dans un environnement 3D, seulement je voudrai pouvoire projeter les coordonnées de la souri de mon ecran sur le plan XY ou se deplace le personnage, tout en ayant une vue de 3/4 c'est a dire la caméra est positionnée aux coordonnées (0,6,8) et mon personnage aux coordonnées (0,0,0) et ne se deplace que sur le plan XY , le personnage a une arme, et je voudrai faire en sorte que son arme soit en dessous de la souri, (mais son arme doit tourner autour du perso et elle doit donc rester sur le plan XY...)

    si quelqu'un pouvait m'aider ce serai vraiment super SYMPA!! je suis bloqué la dessus depuis 2 jours j'ai essayé plein de choses mais a chaque fois j'obtiens des resultats moyens...(soit larme se deplace de facon tres rapide par rapport a ma souri, soit l'arme a une position a lexterrieur de l'ecran)

    je suis vraiment fatigué :'( je n'y arrive vraiment pas :''(

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    Salut,
    Pour ce qui est de la projection 'inversée' t'as glUnproject(...) (la doc d'openGL t'en dira plus)
    Pour ce qui est de ton arme, il se peut (et je peux me tromper) que tu réalise mal les transformations 3D, par exemple, pour faire tourner l'arme autour du perso, tu peux multiplier la matrice courante (glMultMatrix) par une matrice de translation (qui contient les coordonnées globales du perso) par une matrice de rotation (une rotation de 5 degrès par seconde par exemple )
    Attention toute fois ! Si tu fais l'inverse (rotation*translation) l'arme tournera sur son origine, et je suppose que ce n'est pas le résultat souhaité.
    Si tu veux plus de précisions, montre un peu de code, des screens, on pourra encore t'aider d'avantage.
    Voila.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    ouah cool!
    bah tien voila mon projet, si tu veux jeter un coup d'oeil et me dire ce qui va pas ce serai vraiiiiiiment sympa je defini la position de l'arme de mon perso dans Personnage.cpp fonction set_position (c'est juste temporaire je fais des test :/)

    tu peux bouger avec les fleches du clavier et zoomer avec la molette
    ce que j'ai mis dans ma fonction Personnage::set_position est vraiment moche, parceque je n'arrete pas dessayer plein de choses...sans jamais ibtenir le resultat voulu.
    je compte renommer la fonction en set_positionArme

    MERCiii!!

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    Et bien de rien ^^
    Seulement voila, j'ai pas pu télécharger tes fichiers , mais tu peux exposer tes sources sur le topic (et même un screen pour l'occasion ^^ ), toute fois, utilise la balise code (sous forme de #) :p
    Voila

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    ok mais j'ai plusieurs fichiers.
    un pour chacune de mes classes, si tu veux j'upload sur un autre serveur?
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    #include <string>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include "Personnage.h"
    #include "fonction.h"
    #include <math.h>
    #define pi 3.1416
     
    using namespace std;
    //constructeur par defaut
    Personnage::Personnage()
    {
        p_vitesseDeplacement = 0.1;
        p_repere = new Repere();
        p_arme = new Arme();
    }
    //méthode d'acces a la position
    coord Personnage::get_position()
    {
        return p_position;
    }
     
    //changer la position du personnage
    void Personnage::set_position(const SDL_KeyboardEvent & event)
    {
        if((event.type == SDL_KEYDOWN) && (event.keysym.sym==SDLK_LEFT))
        {
            p_position.x-=p_vitesseDeplacement;
        }
        if((event.type == SDL_KEYDOWN) && (event.keysym.sym==SDLK_RIGHT))
        {
            p_position.x+=p_vitesseDeplacement;
        }
        if((event.type == SDL_KEYDOWN) && (event.keysym.sym==SDLK_UP))
        {
            p_position.y+=p_vitesseDeplacement;
        }
        if((event.type == SDL_KEYDOWN) && (event.keysym.sym==SDLK_DOWN))
        {
            p_position.y-=p_vitesseDeplacement;
        }
     
    }
    //ici on determine la position de l'arme du personnage
    void Personnage::set_position(const SDL_MouseMotionEvent & event)
    {
        glPushMatrix();
        coord souri,origine,pos1,pos2;
        souri.x=event.x;
        souri.y=event.y;
        origine.x=640/2.0;
        origine.y=480/2.0;
        double rayon ;
        rayon = (sqrt(((souri.x-origine.x)*(souri.x-origine.x))+((souri.y-origine.y)*(souri.y-origine.y))))/25;
        double angle1 = pi-atan(2/10)+pi/2;    p_arme->set_position(cos(angle(origine,souri))*rayon,-sin(angle(origine,souri))*rayon,0);
        glPopMatrix();
     
    }
    //dessine une sphere au niveau du personnage
    void Personnage::dessiner()
    {
        glPushMatrix();
            glMatrixMode( GL_MODELVIEW );
            glTranslated(p_position.x,p_position.y,p_position.z);
            p_arme->dessiner();
            p_repere->dessiner();
        glPopMatrix();
        glLineWidth(3);
        glBegin(GL_LINES);
        glColor3ub(0,255,0);    glVertex3d(0,0,0);
                                    glVertex3d(p_position.x,p_position.y,0);
        glEnd();
        glLineWidth(1);
    }
    //change la vitesse de deplacement du Personnage
    void Personnage::set_vitesseDeplacement(double vitesse)
    {
        p_vitesseDeplacement = vitesse;
    }
     
    //destructeur Personnage
    Personnage::~Personnage()
    {
        delete p_repere;
        delete p_arme;
    }

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    Bon, en gros comme ça dans le lot, ta méthode dessiner possède quelques moins, je vais ajouter ce qu'il faut (ce qui me semble manquant)
    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 Personnage::dessiner()
    {
    glMatrixMode( GL_MODELVIEW );
        glPushMatrix();
        glLoadIdentity();        
            glTranslated(p_position.x,p_position.y,p_position.z);
            p_arme->dessiner();
            p_repere->dessiner();
        glPopMatrix();
        glLineWidth(3);
        glPushMatrix();
        glLoadIdentity()
        glBegin(GL_LINES);
        glColor3ub(0,255,0);    glVertex3d(0,0,0);
                                    glVertex3d(p_position.x,p_position.y,0);
        glEnd();
        glPopMatrix();
        glLineWidth(1);
    }
    Je constate par ta méthode (ton implémentation) que t'as pas bien pigé le principe des piles des matrices, ce n'est pas bien grave, je vais essayer de te l'expliquer:
    1-Tu choisis le mode de matrice (GL_MODELVIEW ou autre).
    2-Tu empiles la matrice courante (glPushMatrix()) selon le cas.
    3-Tu mets la matrice courante à l'identité (glLoadIdentity()).
    4-Tu fais ce que tu veux (glVertex3*, glDrawElements ...)
    5-Tu remets en place l'ancienne matrice (glPopMatrice()).

    ça marche comme ça tout le temps, si tu pop une matrice sans la pusher avant, t'auras une pile de matrices incohérente, et du coup, un résultat qui n'est pas souhaité (généralement n'importe quoi).
    Voila, revis un peu tes autres fonction dessiner

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/04/2015, 02h02
  2. Souris bloquée SDL/OpenGL
    Par nightwar dans le forum SDL
    Réponses: 7
    Dernier message: 30/12/2008, 17h36
  3. Rapidité de SDL + openGL
    Par Clad3 dans le forum OpenGL
    Réponses: 23
    Dernier message: 27/02/2005, 08h27
  4. SDL+opengl+drivers nvidia 56.72 et plus
    Par ttf dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/05/2004, 14h28
  5. [Debutant] Sdl & OpenGl link ne marche pas
    Par Riko dans le forum OpenGL
    Réponses: 9
    Dernier message: 18/02/2004, 16h13

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