Bonjour a tous,
Dans un projet, on dispose d’un visualiseur de scène 3D fait maison. Actuellement, lors d’une rotation, si la camera passe au dessus de l’axe Z, la camera va "flipper" (ie, faire une rotation de 180 degrés autour de l’axe Z) pour éviter de se retrouver "la tète en bas". Ce n’est pas agréable et cherche a empercher cela.
Au début, je me suis dit, facile, suffit de bloquer les angles de la camera et le tour est joue. Mais il y’a plusieurs soucis.
-
Tout d’abord la camera est représentée "en position", c’est a dire par :
- Sa position P
- Le point Q qu’elle vise
- Un vecteur "up"
- Ensuite la rotation est actuellement une fonction d’état (au sens physique du terme), c’est a dire que la rotation ne dépends que de la position du clic droit initial pour la démarrer et de la position actuelle de la souris1. Elle est realisee par l’utilisation d’un quaternion.
Actuellement, ma limite de rotation est implémentée en bloquant la souris de l’utilisateur des qu’il s’approche trop de l’axe Z. Mais on me dit qu’il faudrait pouvoir bloquer la rotation tout en laissant la souris libre. Si la souris continue a monter, il ne se passe rien, mais si elle descend, la rotation se fait.
Et la je commence a sécher sur la manière de faire. C’est un problème que je suppose assez classique dans les moteurs 3D/JV, mais pas moyen de trouver une ressource qui explique comment faire. Toutes mes recherches me tombent sur Blender, Unity, Autodesk…
Si vous avez des ressources / lien, je suis preneur /
Merci beaucoup. David
-
ce qui est en soit logique, pour aller d’un point A a un point B, si on ne passe pas en ligne droite, il faut que la souris fasse le trajet dans un sens, puis dans l’autre, ce qui annule les rotations correspondantes.
↩