red/green stereo with orthognal projection

Hi, all,

I’m writing one red/green 3D display program based on the demo program “pulsar”. I want to use orthogonal projection instead of perspective projection used in the demo program. I made the modifications as follows (use glOrtho() to replace glFrustum()), but there was no disparity any more. Could you please help me out on this issue? I’m wondering whether I should change the equation related to camera positions somehow. Million thanks.

if (stereo) {

/* Misc stuff */
ratio  = camera.screenwidth / (double)camera.screenheight;
radians = DTOR * camera.aperture / 2;
wd2     = here * tan(radians);
ndfl    = here / camera.focallength;
  /* Derive the two eye positions */
  CROSSPROD(camera.vd,camera.vu,r);
  Normalise(&r);
  r.x *= camera.eyesep / 2.0;
  r.y *= camera.eyesep / 2.0;
  r.z *= camera.eyesep / 2.0;

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  left  = - ratio * wd2 - 0.5 * camera.eyesep * ndfl;
  right =   ratio * wd2 - 0.5 * camera.eyesep * ndfl;
  top    =   wd2;
  bottom = - wd2;
//  glFrustum(left,right,bottom,top,here,there);
  glOrtho(left,right,bottom,top,here,there);

  glMatrixMode(GL_MODELVIEW);
  glDrawBuffer(GL_BACK_LEFT);
  glLoadIdentity();
  gluLookAt(camera.vp.x + r.x,camera.vp.y + r.y,camera.vp.z + r.z,
            camera.vp.x + r.x + camera.vd.x,
            camera.vp.y + r.y + camera.vd.y,
            camera.vp.z + r.z + camera.vd.z,
            camera.vu.x,camera.vu.y,camera.vu.z);
  
  /* Write only the red component */
  glColor4f(0.5, 0.0, 0.0, 0.0);
  glColorMask ( 1, 0, 0, 0 ) ;
  //MakeLighting();
  MakeGeometry();
  
  /* Clear depth buffer to get proper color blending*/
  glClear(GL_DEPTH_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
 left  = - ratio * wd2 + 0.5 * camera.eyesep * ndfl;
  right =   ratio * wd2 + 0.5 * camera.eyesep * ndfl;
  top    =   wd2;
  bottom = - wd2;

// glFrustum(left,right,bottom,top,here,there);
glOrtho(left,right,bottom,top,here,there);

  glMatrixMode(GL_MODELVIEW);
  glDrawBuffer(GL_BACK_LEFT);
  glLoadIdentity();
  gluLookAt(camera.vp.x - r.x,camera.vp.y - r.y,camera.vp.z - r.z,
            camera.vp.x - r.x + camera.vd.x,
            camera.vp.y - r.y + camera.vd.y,
            camera.vp.z - r.z + camera.vd.z,
            camera.vu.x,camera.vu.y,camera.vu.z);
  
  /* Write only the green component */
  glColor4f(0.0,0.5,  0.0, 0.0);
  glColorMask ( 0, 1, 0, 0 ) ;
  //MakeLighting();
  MakeGeometry();

}