我正在渲染 3D 立方体,效果很好。然后,我将粒子渲染为点数组,几何着色器将其转换为四边形(2 个三角形)。我遇到的问题是,粒子纹理中的透明部分没有被其“后面”的粒子的非透明颜色替换:
如图所示,其后面的灰色/橙色纹理立方体“通过”粒子的透明部分正确显示。然而,在粒子纹理重叠的地方,“底部”纹理不会通过“顶部”纹理显示出来,即使是在据说是透明的部分中。
在渲染立方体之前,我调用
gl.Enable(EnableCap.DepthTest);
gl.DepthMask(true);
gl.Disable(EnableCap.Blend);
在渲染粒子之前,
gl.Enable(EnableCap.Blend);
gl.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
(方法名称与原始 openGL 略有不同,因为我使用的是 Silk.NET,openGL 的薄包装器) 我尝试过的事情
现在,我发现了大部分都很好。然而,我首先认为它后面的立方体已经消失了 - 但是当我移动相机时,我看到它的小碎片(我花了好几次尝试才能在屏幕截图上得到它)
好吧,我找到了,如果你知道的话,感觉是半显而易见的。
gl.DepthMask(false);
glClear()
,所以深度缓冲区根本没有被清除。