glEnable(GL_BLEND); //打开融合
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //设置融合系数
//在这里绘制相应的三维统计结果
glDisable(GL_BLEND); //关闭融合
glDisable(GL_STENCIL_TEST); //关闭蒙板测试
//以融合方式显示地板
最后,正常显示周围的效果画面和三维统计结果。
3.4动态阴影的实现
使用OpenGL蒙板缓冲区实现平面阴影,关键是利用光源的矢量位置和地板的法线矢量,生成平面阴影投射矩阵。然后:
glEnable(GL_STENCIL_TEST); //启用蒙板测试
glStencilFunc(GL_LESS, 2, 0xffffffff);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glEnable(GL_BLEND); //启动融合
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_LIGHTING); //关闭灯光
glColor4f(0.0, 0.0, 0.0, 0.5); //设置阴影颜色
glPushMatrix();
glMultMatrixf((GLfloat *) floorShadow); //对显示画面乘上平面阴影投射矩阵
//在这里,显示产生阴影的对象
glPopMatrix();
glDisable(GL_BLEND); //关闭融合
glEnable(GL_LIGHTING); //打开灯光
glDisable(GL_STENCIL_TEST); //关闭蒙板测试
4 结语
利用OpenGL技术,可以充分利用当前各种具有3D加速功能的显卡,使得开发的显示系统具有实时性和可移植性。文中实现的实时投票结果三维显示,给人以生动、直观的视觉效果。它可以应用到不同的领域,如:投票表决、数据可视、结果统计等。
|