请教立体投影源的OpenGL实现

//我按照下面的代码渲染后效果不佳。希望有高人能指点一下。

  float fWidth=m_cyClient,fHeight = m_cxClient;
  float fNear = 0.1f,fFar = 10000.0f,fAngle=45.0f, fRatio=fWidth/fHeight;
  float fVal = 0.0174532925f;
  float fRadans=fAngle*fVal;
  float fViewWidth=0.0f,fViewHeight=0.0f;
  float fLeft=0.0f,fTop = 0.0f,fRight=0.0f,fBottom = 0.0f;
  float fEyeSpace=g_Camera.m_fEyeSpace ;

  fViewHeight = fNear*tan(fRadans) ;
  fViewWidth  = fViewHeight * fRatio ;

  glDrawBuffer(GL_BACK_LEFT);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glDrawBuffer(GL_BACK_RIGHT);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  CVector3 v1 = g_Camera.GetCameraView(m_cxClient/2.0f,m_cyClient/2.0f);
  v1 = gf_Global_Normalize(v1);
  CVector3 vRight = ::gf_Global_CrossProduct(v1,g_Camera.m_vUpVector);
  vRight = gf_Global_Normalize(vRight);
  vRight = ::gf_Global_MulVectorByScaler(vRight,g_Camera.m_fEyeSpace/2.0f);

  //(右眼)
  glPushMatrix();
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  fLeft  = -fRatio *fViewHeight-0.5f*fEyeSpace* 0.3f;
  fRight =  fRatio *fViewHeight-0.5f*fEyeSpace* 0.3f;
  //fLeft   = -fViewWidth + 0.5f * fEyeSpace * 0.3f;
  //fRight  =  fViewWidth + 0.5f * fEyeSpace * 0.3f;
  fTop    =  fViewHeight;
  fBottom = -fViewHeight;
  glFrustum(fLeft, fRight, fBottom, fTop, fNear, fFar);
  glMatrixMode(GL_MODELVIEW);
  glDrawBuffer(GL_BACK_LEFT);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();
  gluLookAt( g_Camera.m_vPosition.x,
     g_Camera.m_vPosition.y,
     g_Camera.m_vPosition.z,
     g_Camera.m_vView.x+vRight.x,g_Camera.m_vView.y+vRight.y,g_Camera.m_vView.z+vRight.z,
     g_Camera.m_vUpVector.x,g_Camera.m_vUpVector.y,g_Camera.m_vUpVector.z);
  WriteBuffer();
  glFlush();
  glPopMatrix();

  //(左眼)
  glPushMatrix();
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  fLeft  = -fRatio *fViewHeight+0.5f*fEyeSpace* 0.3f;
  fRight =  fRatio *fViewHeight+0.5f*fEyeSpace* 0.3f;
  //fLeft   = -fViewWidth + 0.5f * fEyeSpace * 0.3f;
  //fRight  =  fViewWidth + 0.5f * fEyeSpace * 0.3f;
  fTop    =  fViewHeight;
  fBottom = -fViewHeight;
  glFrustum(fLeft, fRight, fBottom, fTop, fNear, fFar);
  glMatrixMode(GL_MODELVIEW);
  glDrawBuffer(GL_BACK_RIGHT);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();
  gluLookAt( g_Camera.m_vPosition.x,
     g_Camera.m_vPosition.y,
     g_Camera.m_vPosition.z,
     g_Camera.m_vView.x-vRight.x,g_Camera.m_vView.y-vRight.y,g_Camera.m_vView.z-vRight.z,
     g_Camera.m_vUpVector.x,g_Camera.m_vUpVector.y,g_Camera.m_vUpVector.z);
  WriteBuffer();
  glFlush();
  glPopMatrix();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值