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

DirectX Discussion :

Déplacer la caméra sous Directx


Sujet :

DirectX

  1. #21
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Personnellement je trouve plus contraignant d'utilisé CModelViewerCamera que de faire ça propre classe. De plus, c'est une classe simple au fond, qui reprend des principes de base à connaitre alors autant l'apprendre tout de suite . En plus, comme toute classe de framework elle nous force à un design que nous ne voulons pas forcement.

    C'est tellement bien de réinventé la roue comme on la voudrais

  2. #22
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 399
    Par défaut
    ouais, sauf que hohenheim37 change ses besoins en cours de route, au début que des translations, ensuite vinrent les rotations; résultat : un changement complet pour la gestion et comme il n'explique pas exactement le comportement qu'il veut, on patauge.

  3. #23
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Il s'agissait juste de le guider dans une solution qui lui convenait en simplifiant et corrigeant certaines approches, si les besoins change c'est que l'objectif à mal été assimiler et étudier je pense.

    Je pensais bien faire

    @hohenheim37
    Pour faire des transformations dans un monde 3D, évite un maximum d'utiliser les matrices car comme la dit stardeath, il n'est pas simple et évident de bouger une matrice de view ou de projection. Déplace le problème en le rendant simple, utilise les vecteurs, fait des croquis comme en mathématique pour évaluer un problème. Tes solutions te paraitrons beaucoup plus clair et simple et ton code n'en sera que plus performant et facile d'utilisation.

  4. #24
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 399
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Il s'agissait juste de le guider dans une solution qui lui convenait en simplifiant et corrigeant certaines approches, si les besoins change c'est que l'objectif à mal été assimiler et étudier je pense.

    Je pensais bien faire

    @hohenheim37
    Pour faire des transformations dans un monde 3D, évite un maximum d'utiliser les matrices car comme la dit stardeath, il n'est pas simple et évident de bouger une matrice de view ou de projection. Déplace le problème en le rendant simple, utilise les vecteurs, fait des croquis comme en mathématique pour évaluer un problème. Tes solutions te paraitrons beaucoup plus clair et simple et ton code n'en sera que plus performant et facile d'utilisation.
    tu as bien fait, j'ai juste une autre vision de la chose, y a pas assez d'explication sur ce qu'il veut d'après moi.

    @hohenheim37 : décris exactement ce que tu veux que ta caméra fasse

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    J'ai une carte en 3D, un peu comme dans google earth.

    J'ai un joystick 6 axes : 3 translastions et 3 rotations.

    Je veux avoir 2 vues dans mon programmes et pouvoir les choisirs avec une combo box.

    Les deux vues peuvents se déplacer en X, Y et Z.

    La premiére vue regarde le sol, on ne voit pas l'horizon.

    La deuxiéme vue est incliné a 45° par rapport au sol on peut donc voir "l'horizon". Dans cette vu je doit pouvoir également effectuer des rotations de la caméra qu'elle puisse faire des digonales entres les axes X et Y et pas seulement des translations et des angles droits.

    Dans ce second mode je veux pouvoir orienter la caméra comme dans un FPS.

    J'espére m'être mieux expliquer et je m'excuse de mon manque de précision précédent.

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    J'essaye de modifier la camera First Person je ne sais pas si c'est une bonne solution.

    Mais je ne comprend pas quelle valeur ni ou je devrais les incrémenter en fonction des mes entrées Joystick.

  7. #27
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Si c'est juste la position de la camera que tu bouges ajoute les deltas du joystick à ta position. Si c'est la ou tu regardes (rotation) ajoute le au lookat.

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Par défaut
    j'ai a peu prés résolu mon histoire de caméra !

    Je suis donc passé sur une caméra first person de DXUTCamera, j'ai ajouté à la classe CBaseCamera 2 attributs : un pour les rotations et un pour les tranlsation.

    J'ai récupéré du code (oui le code frankenstein s'est le mal) d'un sample directx : direct input qui me permet de récupéré l'état de mon joystick 30 fois par seconde.

    J'ai donc fait un fichier .h et .cpp contenant les méthodes pour récupérer les infos de mon joystick j'y incrémente donc les valeur de rotation et de translation que j'ai ajouté a CBaseCamera.

    Valeurs qui sont additioné, dans la fonction CBaseCamera::UpdateVelocity(float fElapsedTime)

    J'additionne les translations au vecteur vAccel et les rotations au vecteur m_vRotVelocity.

    Ainsi ma camera bouge en fonction de mon joystick, il me reste donc à la placer correctement dans mon repére.

    J'ai par contre du supprimer la matrice monde car sinon je ne peux pas déplacer ma caméra et je ne comprend pas pourquoi.

  9. #29
    Membre confirmé Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Par défaut
    Bonjour,

    Une solution sur laquelle je me suis appuyé est non plus de modifier directement des matrices mais d'avoir ma propre classe Camera au sein de laquelle sont stockés (entre autres) les trois vecteurs :
    • Position (vecteur de dimension 3)
    • Cible (vecteur de dimension 3)
    • Rotation (vecteur de dimension 2)

    Pour les calculs de matrices World, Projection et Perspective, le code des méthodes est relativement simple (Exemple avec la matrice World qui utilise CreateLookAt() gérant très bien la création de matrice à partir de vecteur3) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            /// <summary>
            /// Gets the world matrix based on the camera's parameters.
            /// </summary>
            /// <returns></returns>
            public static Matrix GetCameraWorldMatrix() {
                return Matrix.CreateRotationY((float)(cameraRotation.Y))
                    * Matrix.CreateRotationX((float)(cameraRotation.X))
                    * Matrix.CreateScale(cameraZoom)
                    * Matrix.CreateTranslation(cameraPosition);
            }

    Pour ce qui est de la translation, pas de souci, une bête addition de vecteur. Pour ce qui est de la rotation, ça se gère en quelques calculs.

    À titre d'exemple, voici ma méthode en C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            /// <summary>
            /// Turns the camera around the vector given and by the angle
            /// given.
            /// </summary>
            /// <param name="axis">The axis the camera turns around</param>
            /// <param name="angle">The angle of rotation (in degrees, NOT IN RADIANS)</param>
            public static void TurnAround(Vector3 axis, float angle) {
                if (angle != 0) {
                    axis.Normalize();
                    Matrix rotationMatrix = Matrix.CreateFromAxisAngle(axis, (float)((Math.PI) * angle / 180.0f));
                    cameraPosition = Vector3.Transform(cameraPosition - cameraTarget, rotationMatrix) + cameraTarget;
                }
            }
    À toi de l'adapter éventuellement à tes besoins. si tu es dans un autre langage

    PS : n'oublie pas le tag Résolu en cliquant sur le bouton Résolu en bas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Pile de matrice sous DirectX
    Par FunkyTech dans le forum DirectX
    Réponses: 6
    Dernier message: 14/03/2008, 17h38
  2. Réponses: 1
    Dernier message: 13/07/2007, 23h30
  3. Réponses: 1
    Dernier message: 25/06/2007, 22h59
  4. Comment déplacer des fichiers sous perl ?
    Par Ickou dans le forum Langage
    Réponses: 6
    Dernier message: 10/11/2005, 12h17
  5. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07

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