OpenGL中三位物体的透明实现
2012-11-24 02:05
197 查看
想要画出透明物体就要先将后面的不透明物体按正常z-buffer算法画好,然后再将透明的物体叠合(而不是替换)到现有z-buffer上,要实现这个要求,就需要调用glDepthMask(GL_FALSE);函数,将深度缓冲区设置为只读形式。
具体在我的程序中的用法如下:
这样分离出透明和不透明的两种物体分别使用不同的深度缓存读取策略进行绘制,能得到较好的视觉效果。
具体在我的程序中的用法如下:
vector<HEFace*> TransparentFaces; for (vector<HEFace*>::size_type nIndex = 0; nIndex < m_Faces.size(); ++ nIndex) { if (m_Faces[nIndex] != NULL && m_Faces[nIndex]->m_mtl != NULL) { if (m_Faces[nIndex]->m_mtl->IsTransparent() == false) m_Faces[nIndex]->Draw(); else TransparentFaces.push_back(m_Faces[nIndex]); } else m_Faces[nIndex]->Draw(); } // Draw Transparent Objects glDepthMask(GL_FALSE); for (vector<HEFace*>::size_type nIndex = 0; nIndex < TransparentFaces.size(); ++ nIndex) TransparentFaces[nIndex]->Draw(); glDepthMask(GL_TRUE);
这样分离出透明和不透明的两种物体分别使用不同的深度缓存读取策略进行绘制,能得到较好的视觉效果。
相关文章推荐
- OpenGL Object Mouse Trackball 三维物体的trackball旋转实现原理
- 关于Opengl中将24位BMP图片加入一个alpha通道并实现透明的问题
- OpenGL: 通过射线求交实现物体的拾取
- 关于Opengl中将24位BMP图片添加一个alpha通道并实现透明的问题
- OpenGL实现的鼠标控制三维空间物体的移动
- 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题
- Ogre实现物体透明
- opengl透明mask图片做蒙版效果的实现
- Qt+openGL学习记录(4)`如何实现物体在三维坐标系中的旋转`
- 如何在OpenGl实现透明纹理贴图?(转)
- 关于Opengl中将24位BMP图片加入一个alpha通道并实现透明的问题
- Opengl 利用FBO实现物体移动轨迹变淡的效果
- FreeImage读取纹理,在OpenGL中实现透明纹理
- unity 2D 透明遮罩 简单实现物体一半透明
- freeglut 和 opengl实现三维物体的旋转和缩放
- 3D+OpenGL里的光照平面镜面反射以及漫游移动物体位置等的具体实现
- DirectX学习笔记(八):Direct3D融合技术详解及物体透明效果的实现
- OpenGL In C# 02 使用FBO的方式绘制OpenGL窗体 并在XP下实现全透明
- CSS实现背景透明,文字不透明(各浏览器兼容)
- [ATL/WTL]_[中级]_[原生的复选框(checkbox button)和单选按钮(radio button)实现透明背景效果解决方案]