I have done a scene in opengl where I'm using a third person camera (that I can control with the mouse). Then, inside it, it has the camera of the first view (that I called thirdpersonCamera
, see the code above), drawing the camera, the frustum etc..
It looks like this picture:
and I've done with this code:
void GLView::drawSubThirdpersoncamera()
{
// set perspective viewing frustum in the 3rd person camera
thirdpersonCamera.setFrustum(FOV_Y, (float)(W)/(H), NEAR, FAR);
// use 3rd person camera projection matrix (the frustum, the perspective etcetera)
// as the opengl camera
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(thirdpersonCamera.projectionMatrix.getTranspose());
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
{
// First, transform the camera (viewing matrix) from world space to eye space
glLoadMatrixf(thirdpersonCamera.viewMatrix.getTranspose());
// translate and rotate the mouse control
// (keeping the camera fixed because
// we want only the scene to rotate/translate)
// for thinking about modern opengl: should be a matrix..
glTranslatef(mousePosition[0], mousePosition[1], mousePosition[2]);
glRotatef(mouseAngle[0], 1, 0, 0); // pitch
glRotatef(mouseAngle[1], 0, 1, 0); // heading
glRotatef(mouseAngle[2], 0, 0, 1); // roll
// now the draw the scene
drawScene();
// draw the first person camera
glPushMatrix();
{
glMultMatrixf(physicalCamera.viewMatrix.getTranspose());
drawAxis(4);
drawCamera();
drawFrustum(physicalCamera.fovy, physicalCamera.aspectRatio, physicalCamera.near, physicalCamera.far);
}
glPopMatrix();
}
glPopMatrix();
}
Now I want to switch to the eye of the camera I've drawn, with this code:
void GLView::drawSubPhysicalCamera()
{
// use physical camera projection matrix (the frustum, the perspective etcetera)
// as the opengl camera
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(physicalCamera.projectionMatrix.getTranspose());
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
{
// the view matrix: how the camera is positioned in the world space
glLoadMatrixf(physicalCamera.viewMatrix.getTranspose());
drawScene();
}
glPopMatrix();
}
I think it should go because I'm using the same matrix once for translate the object in the screen, once for translate the camera but.. in the second view I don't see anything.. I don't find any error because the transformation in the space is the same but.. it doen't work..
Where am I wrong?