La position de la caméra devrait être connue côté CPU, car c'est avec elle que l'on génère la matrice de vue. Donc, pas besoin du
gluUnProject. La matrice de projection aussi, car elle est générée suivant le viewport voulu (et la projection voulue
). Ces matrices sont ensuite envoyées au GPU (avec la matrice modèle) pour transformer la position des points du modèle en un point à l'écran. Tout est dit dans
ce chapitre et
système de coordonnées"]le suivant (et
celui d'après ).
Mais bon, vous semblez vouloir récupérer le tout d'une scène OpenGL, pour mettre dans OSG. Quel est le but ? Pourquoi ne pas tout faire depuis OSG, ou dans OpenGL ?
Lorsque je vois cet
antique tutoriel (il doit y en avoir une traduction sur Developpez.com
), j'ai l'impression que les matrices doivent être passées à la fonction et ce n'est donc pas une fonction pour récupérer ces matrices.
Ce que la fonction vous retourne, c'est une droite, allant de l'oeil de la caméra et avec la direction indiquée par le point que vous passez (suivent la projection). Mais, comme dit précédemment, en théorie, vous avez déjà la position de la caméra, utilisée pour créer la matrice vue.
Le centre, pour la fonction
setViewMatrixAsLookAt, c'est le point regardé par la caméra. Du coup, qu'est ce que l'inverse de la position de la caméra ? Le point symétriquement opposé à la position de la caméra, par rapport à 0,0,0. Dans un tel cas, mettre 0,0,0, reviens au même
. Par contre, cela créer une caméra de type "satellite", qui orbite autour de 0,0,0 et les translation de caméra ne pourront pas fonctionner (déplacer une caméra sur un rail, tout en regardant 0,0,0) (tout en tournant la tête). Autrement dit, c'est pas une caméra libre/type FPS.
Pour finir, vous jouez avec deux caméras. Seulement pour hacker une solution ? Ou parce que vous avez deux scène et vous avez un rendu dans une texture (style, caméra de surveillance dans un coin de l'application) ?
Voilà, j'espère que cela permettra de vous faire avancer
Partager