3D立体成像程序(C语言,主动式显示器+快门眼镜)

{
wglMakeCurrent(m_hDC,m_hRC);
//是否打开反走样
if(m_bAntiAlias)
{篮子鱼
glEnable (GL_LINE_SMOOTH);
glEnable (GL_BLEND);可降解塑料袋子吹膜机
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
glLineWidth (1.125);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
}
else
{
glDisable (GL_LINE_SMOOTH);
glLineWidth (1);
口吃矫正器glDisable (GL_BLEND);
}
//是否采用渲染或线框模式
if(!m_bShowShaded)
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
else
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glViewport( 0, 0, m_pCamera->m_nScreenWidth, m_pCamera->m_nScreenHeight);
//下面的立体视觉计算方法,可参见Doc目录的3D_Stereo_Rendering_Using_OpenGL_(and_GLUT).pdf
//或参见URL:www.tav/3d/3d_stereo.htm
CVector3D r;
double ratio,radians,wd2,ndfl;
double left,right,top,bottom,near_,far_=10000;
//中间变量
near_ = m_pCamera->m_dFocalLength / 5;
ratio  = m_pCamera->m_nScreenWidth / (double)m_pCamera->m_nScreenHeight;
radians = DTOR * m_pCamera->m_dAperture / 2;
wd2    = near_ * tan(radians);
ndfl    = near_ / m_pCamera->m_dFocalLength;
r.CrossProduct(m_pCamera->m_ViewDirection,m_pCamera->m_ViewUpDirection);
r.Normalise();
r.x *= m_pCamera->m_dEyeSep / 2.0;
r.y *= m_pCamera->m_dEyeSep / 2.0;
r.z *= m_pCamera->m_dEyeSep / 2.0;
//处理右眼
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
left  = - ratio * wd2 - 0.5 * m_pCamera->m_dEyeSep * ndfl;
right =  ratio * wd2 - 0.5 * m_pCamera->m_dEyeSep * ndfl;
top    =  wd2;
bottom = - wd2;
glFrustum(left,right,bottom,top,near_,far_);
glMatrixMode(GL_MODELVIEW);
glDrawBuffer(GL_BACK_RIGHT);
glClearColor(1,1,1,1);//改这里可以改变背景图颜(右眼)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(m_pCamera->m_ViewPos.x + r.x,m_pCamera->m_ViewPos.y + r.y,m_pCamera->m_ViewPos.z + r.z,
m_pCamera->m_ViewPos.x + r.x + m_pCamera->m_ViewDirection.x,
m_pCamera->m_ViewPos.y + r.y + m_pCamera->m_ViewDirection.y,
m_pCamera->m_ViewPos.z + r.z + m_pCamera->m_ViewDirection.z,
自动化检测m_pCamera->m_ViewUpDirection.x,m_pCamera->m_ViewUpDirection.y,m_pCamera->m_ViewUpDirection.z);
RenderObject(); 
//处理左眼
glMatrixMode(GL_PROJECTION);
nfs5
拼接墙glLoadIdentity();
left  = - ratio * wd2 + 0.5 * m_pCamera->m_dEyeSep * ndfl;
right =  ratio * wd2 + 0.5 * m_pCamera->m_dEyeSep * ndfl;
top    =  wd2;
bottom = - wd2;
glFrustum(left,right,bottom,top,near_,far_);
glMatrixMode(GL_MODELVIEW);
glDrawBuffer(GL_BACK_LEFT);
glClearColor(1,1,1,1);//改这里可以改变背景图颜(左眼)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(m_pCamera->m_ViewPos.x - r.x,m_pCamera->m_ViewPos.y - r.y,m_pCamera->m_ViewPos.z - r.z,
m_pCamera->m_ViewPos.x - r.x + m_pCamera->m_ViewDirection.x,
m_pCamera->m_ViewPos.y - r.y + m_pCamera->m_ViewDirection.y,
m_pCamera->m_ViewPos.z - r.z + m_pCamera->m_ViewDirection.z,
m_pCamera->m_ViewUpDirection.x,m_pCamera->m_ViewUpDirection.y,m_pCamera->m_ViewUpDirection.z);
RenderObject(); 
glFlush();
SwapBuffers(m_hDC);
}

本文发布于:2024-09-22 09:29:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/253590.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:是否   参见   计算方法   视觉   颜色   背景图   改变
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议