我不能完全肯定,如果我可以做什么,我想在这里,但我有对象了一堆在OpenGL渲染(使用JOGL)。对于一个组对象,我希望确保该组中的某些对象在该组中的其他对象的前面被渲染。我试着清除深度缓冲位和渲染“前”最后的对象,而作品,但它弄乱其他深度缓冲在屏幕上。

什么它归结为是我被渲染对象的列表,我想,以确保在该列表中的某些对象在其他对象的前面呈现(他们都在同一Z坐标虽然)。有没有办法做到这一点?

感谢, 杰夫

有帮助吗?

解决方案

这是一个很常见的技术来绘制透明对象(即具有阿尔法份物体!= 1)。

最常见的方法是首先建造要绘制对象的树,然后可以沿着排序的“深度”通过投影*相机矩阵被传递之后。基本上,而不是在GPU只是一味地抛出三角形,您可以通过一个把你的对象一个为你在世界上处理他们到一个临时缓冲区。这些对象都有每个三角形,每顶点颜色/顶点着色器/纹理名称+编号等的全部知识然后你就可以排序的缓冲区(无论是天真的,目的是通过对象,或者一个完全成熟的排序基于跨对象类似的补丁)。

在glDepthMask招,如果我记错,是这样的:

glDepthMask(true);
drawOpaqueObjects();
glDepthMask(false);
drawTransparentObjects();

为了获得最佳效果的透明物体进行排序后到前,但在大多数(简单)应用中,这并不重要。

编辑:请注意,对于第二个技术,同时启用,然后关闭深度缓冲区写,你仍然可以使用深度缓冲测试,您的正常对象的后面那么透明物体(头盔指向“变成”屏幕为例)赢得”吨得到拉伸。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top