Bonjour

J'aurais besoin d'un coup de main.
J'aimerais reporter la caméra d'une scène OpenGL sur ma scène OpenSceneGraph.

Pour l'instant j'ai mis en place ce morceau de code qui me permet de récupérer la caméra de la scène OpenGL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
        GLdouble camera_pos[3];
        osg::Vec3f centre;
        // Get the camera from the opengl model
        double rationZoom = m_pModel->GetView()->m_graphEnv.GetZoomRatio();
        int* viewport = m_pModel->GetView()->m_graphEnv.GetViewport();
        double* projetMatrix = m_pModel->GetView()->m_graphEnv.GetProjMatrix();
        double* modelMatrix = m_pModel->GetView()->m_graphEnv.GetModelMatrix();
 
        double screenCenterX = m_pModel->GetView()->m_graphEnv.GetScreenCenterX();
        double screenCenterY = m_pModel->GetView()->m_graphEnv.GetScreenCenterY();
 
        gluUnProject((viewport[2] - viewport[0]) / 2, (viewport[3] - viewport[1]) / 2,
            0.0, modelMatrix, projetMatrix, viewport, &camera_pos[0], &camera_pos[1], &camera_pos[2]);
 
        // Set the camera position and rotation to OSG camera
        osg::Vec3 updateCameraPosition((camera_pos[0] / 2) / rationZoom, (camera_pos[1] / 2) / rationZoom, (camera_pos[2] / 2) / rationZoom);
 
        osg::Vec3f eye(updateCameraPosition);
        centre = osg::Vec3f(screenCenterX * (-1.0), screenCenterY * (-1.0), 0);
        osg::Vec3f up(0.f, 0.f, 1.f);
 
        nodeCamera->setViewMatrixAsLookAt(eye, centre, up);
Pour l'instant j'arrive a récupérer la position de la caméra lors du lancement de la scène et le zoom.

-Premier problème : Lorsque j'atteint une valeur négative sur l'axes Z lors du zoom dans ma scène OpenGL, sur OSG la caméra se positionne a la valeur 0 sur l'axe Z.
-Deuxième problème : Lorsque je déplace un objet sur ma scène OpenGL, j'aimerais que la caméra suis l'objet mais avec les valeurs inverses de l'objet.

Les scène sont lancer en même temps et tourne sur 2 thread différents du coup les modifications de la scène OSG sont fait dynamiquement (si sa peut aider)

Je pense qu'il doit me manquer une information ou sinon j'ai mal passer mes valeurs.
(j'espère avoir était suffisamment précis )

Merci d'avance