在不透明的物体内绘制透明物体

时间:2011-07-04 13:33:59

标签: c++ opengl programming-languages transparency

我正试图在一个不透明的笼子里面画一个透明的物体,但是我似乎试着尝试一下我无法做到这一点。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); 

glDisable(GL_BLEND);

glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK);

glColor4f(1.0, 1.0, 1.0, 1.0);
drawCage();

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glColor4f(0.0, 0.0, 0.0, 0.5);
drawObject();   

glPopAttrib();

这使透明物体出现在它的前面,尽管它在里面。

我做错了什么,可能与我正在使用的着色器有关

2 个答案:

答案 0 :(得分:1)

一些事情。

  1. 检查初始化中的深度函数,并确保像素格式 深度缓冲区。
  2. 首先使用标准的gouraud着色器尝试。
  3. 三重检查透明物体的所有顶点是否在笼子内。
  4. 每帧使用某种相机旋转,以便您可以从各个角度查看渲染的场景。 (这样你可以检查你是否意外地将对象从里到外渲染出来[当我离开一段时间后回到3D时经常发生在我身上])
  5. 希望有所帮助

答案 1 :(得分:0)

然后您的透明度没有问题。如果您启用了深度测试,并且您的对象出现在另一个对象的前面,那么您的几何图形或绘图程序中都会出现问题。可能是一百万件事,尝试先禁用剔除,看看会发生什么。

另一方面,您尝试使用具有1.0f alpha的常量颜色渲染透明对象。这意味着完全不透明。你确定吗?