views:

2759

answers:

4

I need to show the same object in OpenGL in two different viewports, for instance, one using ortographic projection and the other using perspective. In order to do this, do I need to draw again the object after each call to glViewport()?

+5  A: 

Nehe has a good tutorial on how to do this, and his site is generally a good resource for OpenGL questions.

Ed Woodcock
For me, the linked article suggests a "yes, [you have to]" answer - but its author seems to *want* to draw something different on each viewport. Therefore, I'd still appreciate if someone confirmed in plain words if it's "yes, you have to redraw objects in each viewport", or "no, you don't have to - see <some-link>"
akavel
+2  A: 

yes,

and you should also change the scissor settings to have a clean separation between the two views if they are in the same window.

fa.
+3  A: 

These bunch of excellent tutorials do exactly that.

shoosh
A: 
 // normal mode
  if(!divided_view_port)
 glViewport(0, 0, w, h);
else
{
 // right bottom
 glViewport(w/2, h/2, w, h);
 glLoadIdentity ();
 gluLookAt(5.0f, 5.0f, 5.0f,
     0.0f, 0.0f, 0.0f,
     0.0f, 1.0f, 0.0f);

 display();

 // left bottom
 glViewport(0, h/2, w/2, h);
 GlLoadIdentity();
 gluLookAt (5.0f, 0.0f, 0.0f,
     0.0f, 0.0f, 0.0f,
     0.0f, 1.0f, 0.0f);

 display();

 // top right
 glViewport(w/2, 0, w, h/2);
 glLoadIdentity();
 gluLookAt(0.0f, 0.0f, 5.0f,
     0.0f, 0.0f, 0.0f,
     0.0f, 1.0f, 0.0f);

 display();

 // top left
 glViewport(0, 0, w/2, h/2);
 glLoadIdentity();
 gluLookAt(0.0f, 5.0f, 0.0f,
     0.0f, 0.0f, 0.0f,
     0.0f, 1.0f, 0.0f);

 display();
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if (w <= h)
    glOrtho(-2.0, 2.0, 
            -2.0 * (GLfloat) h / (GLfloat) w, 2.0 * (GLfloat) h / (GLfloat) w, 
 -10.0, 100.0); 
else
    glOrtho(-2.0 * (GLfloat) w / (GLfloat) h, 2.0 * (GLfloat) w / (GLfloat) h, 
 -2.0, 2.0, 
 -10.0, 100.0);

glMatrixMode(GL_MODELVIEW);