2011-10-05 84 views
3

透明物体荫试图渲染使用OpenGL的一些3D对象。要求是我需要隐藏所有透明对象,它们是在另一个透明对象后面的z。所有三角形都在单个三角形缓冲区中,并且会立即绘制。请抛出一些光。呈现在OpenGL

+0

你能对你的对象是如何透明意见和OpenGL的是什么版本的()你正在处理? – masebase

+0

我正在处理opengl 1.1 ..例如有一个玻璃花瓶里面有玻璃门的房间。用户应该只能通过玻璃门看到房间内的不透明物体,如木制家具,而不能看到房间内的玻璃花瓶。 – user942502

回答

3

您可以通过排序场景,这是你必须做的反正拿到透明度正常工作是什么做到这一点。

这里就是你需要做的:

  1. 启用Z缓冲区写入并测试
  2. 渲染所有不透明的物体
  3. 渲染的所有透明物体从前向后。 z缓冲区将防止透明对象显示在其他透明对象后面。 ()
+0

感谢您的回复。是的,我可以通过排序透明三角形(从前到后)来实现此目的。但透明物体的所有三角形都是一次绘制的。当我旋转场景时,效果应该保留。不幸的是,我的任务中不允许排序,因为我正在处理场景中的三十万个三角形。你认为我可以使用一些混合函数的combimation来达到这个目的。 – user942502

+0

我不确定这是可能的,至少在OpenGL 1.1的功能。你可以分成2个缓冲区吗? – geofftnz

+0

不,我不能分裂,2个缓冲区,因为我没有分类,其中三角形形状的花瓶和三角形形态门在我的三角缓冲。 – user942502

5

尝试使用glDepthMask:

//Render all opaque objects 
    glDepthMask(false); //disable z-testing 
    //Render all transparent objects* 
    glDepthMask(true); //enable z-testing (for the next frame) 

*技术上讲,你应该渲染从后到前的透明物体,但如果你不这样做很少是明显的。