2011-07-04 78 views
1

我想在一个不透明的笼子里画一个透明的物体,但是我似乎试过的东西我无法弄清楚。在不透明的一个里面绘制透明物体

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

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

我在做什么错了,也可能是一些做的着色器,我使用

+0

如果这是C代码,添加适当的标签。 – karlphillip

+0

一张照片确实不错。 – Wroclai

+0

“不透明的一个*内部的透明物体”让我走了* Wha ...?*直到我看到不透明的物体是笼子。 :) –

回答

1

有几件事。

  1. 检查您的初始化和您的像素格式深度缓冲深度功能。
  2. 先用标准gouraud着色器尝试一下。
  3. 三重检查透明物体的所有顶点是否在笼内。
  4. 每帧使用某种相机旋转,以便您可以从各个角度看到渲染的场景。 (这样,你可以检查,如果你不小心渲染的对象由内而外[经常发生在我身上时,我回去3D是离开一段时间后])

希望帮助

+0

我正在做一些离屏渲染,我没有在我的原始问题中提及,因为我没有给这个FBO附加深度缓冲区这是造成问题。我已经给出了答案,因为你的调试技巧似乎是一个好主意。 – henryprescott

0

那你没有与您的透明度问题。如果您已经启用了深度测试,并且您的对象出现在另一个之前,则您的几何图形或绘图例程中都有问题。可能是一百万件事情,请尝试先关闭淘汰赛,看看会发生什么。

另一方面,您试图呈现一个具有1.0f alpha的常量颜色的透明对象。这意味着完全不透明。你确定吗?

+0

对不起,我应该留下的颜色,因为它正在改变这些方法。几何图形肯定没有问题,禁用背面剔除似乎没有效果。 – henryprescott

+0

你的着色器是什么样的?也许你可以发布截图? –