//我按照下面的代码渲染后效果不佳。希望有高人能指点一下。
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();