目前,我有混合和深度测试开启2D游戏。当我画我的纹理,“上”纹理去除下部纹理的某些部分,如果他们相交。显然,纹理的透明像素被考虑深度测试的,并且它清除掉绘制下纹理的所有的颜色,如果他们相交。此外,α-blendings被错误地呈现。是否有任何种类的功能,可以告诉OpenGL不包括透明像素入深度测试?

有帮助吗?

解决方案

没有这是不可能的。这是所有硬件深度测试的真

GL(全部或ES - 和D3D)都有相同的模型 - 他们在你指定多边形的顺序绘制。如果在多边形B前,上和逻辑上多边形A应该是在上多边形B前绘制多边形A,多边形B将不会被涂(深度测试提供)。

的解决方案是绘制多边形你为了从最远到最近的当前视图原点。令人高兴的是在2D游戏这应该只是一个简单的排序(一个你可能甚至不需要经常这样做)。

在3D游戏的BSP是基本解决这个问题。

其他提示

glEnable( GL_ALPHA_TEST );
glAlphaFunc( GL_EQUAL, 1.0f );

此将放弃所有的像素具有比完全不透明的任何其他的α。这些像素会的话,不会被渲染到Z缓冲区。这不,但是,影响各种Z轴缓冲管道的优化,因此它可能会导致一些严重的放缓。只有当你的使用真的的有太多。

如果您使用的着色器,可以尝试禁用混合,用α-丢弃的像素0

if(texColor.w == 0.0)
    discard;

您正在使用什么类型混合的?

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

应该防止用0阿尔法任何片段从写入深度缓冲器。

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