Xamarin IOS Opentk - 具有透明纹理的 BlendFunc

问题描述

我正在尝试在 Xamarin 中使用 OpenTK 渲染一些具有透明背景的标签纹理。起初标签似乎显示正常(见图1),但是当视图旋转时,一些标签背景不再透明(见图2)。

启用的 BlendFunc 是 GL.BlendFunc(BlendingFactorSrc.SrcAlpha,BlendingFactorDest.OneMinusSrcAlpha)。

我的问题是,我怎样才能始终保持标签透明度,而不管它们的位置如何? 顺便说一下,相同的代码和着色器可以在 Android 设备上正常运行。

Labels displayed OK

Labels cover each other

解决方法

是的,古老的透明度问题。不幸的是,这是一个图形程序员必须自己解决的问题。

对于少数标签,最直接的解决方案可能是按 z 深度对标签进行排序,然后从最远到最接近的顺序渲染它们。您可能需要对该标签位置进行一些矩阵数学运算以调整视口旋转。

对于我正在开发的 3d 游戏,我选择实施名为 WBOIT by Morgan McGuire 的与顺序无关的透明度方法,该方法实施起来相当简单并且产生了相对较好的结果。