您的位置:首页 > 运维架构

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);


这样分离出透明和不透明的两种物体分别使用不同的深度缓存读取策略进行绘制,能得到较好的视觉效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: