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); |
Partager