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

OpenSceneGraph Discussion :

[OSG]Utilisation d'une caméra personnalisé


Sujet :

OpenSceneGraph

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [OSG]Utilisation d'une caméra personnalisé
    bonjour,

    Je dois utiliser une souris 3d (space navigator de 3dconnexion) dans une application utilisant openscenegraph.
    La souris n'étant pas gérée en natif, il existe plusieurs solutions pour la supporter via le osgVRPN, néanmoins cette classe étant une vraie usine a gaz, je n'arrive pas à l'utiliser correctement.

    beaucoup de documentations existent et je consulte régulièrement la mailing list d'osg en ayant deja posté cette question mais personne ne me répond

    si qqun ici a une solution, cela m'aiderait énormément.

    je passe donc pas directinput qui me permet rapidement de récupérer les différents valeurs des axes de la souris.
    en l'état actuel, j'ai donc les 3 axes de translations etat.lx, etat.ly, etat.lz et ceux de rotations etat.lrx, etat.lry, etat.lrz variant entre 0 et 360.

    ma scène comporte un objet et un hud.
    j'aimerais faire en sorte de pouvoir utiliser ma souris comme dans google earth(pour ceux qui l'ont deja utilisé avec ce genre de périphérique)

    Le problème, en plus d'etre un manque de compréhension d'osg évident, vient surement d'un problème de logique/algorithmique.

    je ne déclare aucun osgGA::Manipulator dans le main mais une matrice.
    dans la boucle d'exécution while(!viewer.done()) je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cameraRotation.makeRotate(
       osg:: DegreesToRadians((float)etat.lRx/10),osg::Vec3(1,0,0), // roll
       osg:: DegreesToRadians((float)etat.lRz/10), osg::Vec3(0,0,1), // pitch
       osg:: DegreesToRadians((float)etat.lRy/10), osg::Vec3(0,1,0) ); // heading
    cameraTranslation.makeTranslate((etat.lX/10),-(etat.lZ/10),(etat.lY/10));
    myViewMatrix = cameraRotation*cameraTranslation;
    viewer.getCamera()->setViewMatrix(myViewMatrix);
    ce qui permet de déplacer l'objet dans la scène, les rotations ne sont d'ailleurs pas correct, ceci n'est pas le problème majeur.

    mais comment faire pour que la dernière position acquise par la souris, devienne la nouvelle position initiale de l'objet, pour l'instant la vue se réinitialise a la position initiale.

    merci pour la lecture et pour une possible piste

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Bonjour,

    En fait, tu met à jour ta matrice, sans prendre en compte sa position antérieure... donc au lieu de simplement mettre tes valeurs, accumule les avec les valeurs précédentes..

    tu fait un set(pos n)

    fait plutot un set(pos n-1 + pos n)

    (c'est imagé mais c'est le principe...)

    mémorise ta matrice en dehors de la boucle, et met là à jour plutot que de la redéfinir à chaque frame.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci ange_blond,

    du coup, effectivement le résultat est deja nettement plus cool

    j'ai une autre question qui ne découle pas forcément de la première mais néanmoins je la poste ici.

    L'objet chargé est une carte avec comme centre les coordonnées suisses. le centre est donc à 548000,201000.

    le positionnement initial de la matrice se fait avec makeLookAt ?
    cette fonction est comme le gluLookAt(vec3 eyes, vec3 center, vec3 up)

    je dois normalement donc utilisé pour le centre = -548000, -201000, 0 non ?
    pour eyes ~= -550000, -210000

  4. #4
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    le lookat ne fera que diriger la camera vers ta cible, en terme de champ de vision... (comprendre direction du regard)

    Si tu veux la positionner spacialement, heuu ben moi j'utilise un manipulator personalisé donc je me suis jamais posé la question...

    la camera est parametrée par 3 vecteurs : position (là où elle est dans la scene), direction (là où elle regarde), Up (=Z si tu veux qu'elle ait la tete droite, =un vecteur dans le plan XY si tu veux qu'elle regarde au sol)

    la direction et Up sont donc perpendiculaires normalement... si ce n'est pas le cas... à toi de gerer les cas... perso j'ai fait une projection de Up dans le plan normal à direction pour m'assurer qu'elle ne me fasse pas de truc bizzares...

    à toi de voir dans ton cas de figure..

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/04/2015, 12h04
  2. Utilisation d'une caméra
    Par PPEhelp dans le forum OpenCV
    Réponses: 1
    Dernier message: 15/04/2013, 17h32
  3. [2K8] Utilisation d'une fonction de code personnalisé
    Par hayassinet dans le forum SSRS
    Réponses: 0
    Dernier message: 29/09/2010, 11h39
  4. Réponses: 1
    Dernier message: 07/05/2008, 18h38
  5. Problème avec une caméra utilisant les quaternions
    Par Bakura dans le forum Développement 2D, 3D et Jeux
    Réponses: 17
    Dernier message: 15/12/2007, 19h26

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