Bonjour à tous
J'essaye de faire un petit modeleur avec Ogre et étant débutant, j'ai un petit souci de Caméra et de SceneNode.
En fait je voudrais faire une Caméra orbitale (ou ArcBall, à la 3DS Max et autre) : je voudrais que lorsque je clique sur une objet, ma caméra (au moyen d'un drag and drop) puisse tourner autour du centre de cet objet.
Donc pour faire ma caméra, j'ai crée un nœud NodeCamera auquel j'ai ajouté un fils PitchNode : L'entité caméra étant attaché à ce dernier ! Maintenant pour gérer la rotation j'ai créer un noeud CentreRotation et j'y est attaché mon NodeCamera. Pour l'exemple, ajoutons aussi un noeud qui contient l'objet sélectionné et qui sera le fils du SceneMgr. ... Bon je sais pas si je suis bien clair, alors voici un p'tit schéma récapitulant la hiérarchie de nœuds :
mSceneMgr -> CentreRotation -> NodeCamera -> PitchNode
-> NodeSelection
Alors pour faire bouger ma caméra, je peux facilement faire une translation sur le NodeCamera et tout se passe bien. Et pour faire mes rotations, je fais des "pith" et des "yaw" sur mon nœud CentreRotation : mais cette méthode ne marche que si le centre de la rotation est immobile, et il ne dépend pas de la sélection !
Le problème est que je n'arrive pas à mettre à jour mon centre de rotation si je déplace l'objet sélectionne... Parce que je ne peux pas déplacer mon centre sinon je bouge la caméra et rien ne va plus !!!
En OpenGL, ce serait plus facile, je ferai 2 "translate" entre la rotation pour me positionner d'abord sur le centre voulu, puis après revenir au bon endroit, mais Ogre ne semble pas aimer cette méthode.
Quelqu'un à une idée à me proposer ?
Ou savez vous faire une rotation à partir d'un point qui n'est pas le centre du nœud ?
Partager