我正在为一个名为Gwen的 GUI 工具包开发 OpenGL 3 渲染器。我几乎让所有东西都正常工作,但我在让所有东西正确融合时遇到了一些问题。我已经按照它们使用的纹理对三角形进行了排序,并将它们打包到 VBO 中,因此通过单元测试,它基本上可以归结为 3 层:没有纹理的填充矩形、文本以及窗口、按钮等使用肌理。
填充矩形通常绘制在其他所有内容之上并混合在一起,但所有内容背后的背景也是填充矩形,所以我不能指望它。如果您最后绘制它们,则存在 Z 值冲突(例如:窗口的边缘周围有一个带纹理的阴影,由于背景未通过深度测试而变黑),如果您先绘制它们,则会出现混合/z 值冲突(例如:一些选择亮点被绘制在而不是像他们应该的那样混合)。
我不能指望能够识别除填充矩形之外的任何特定层。不同的层有混合的 z 值,所以我不能只是按照一定的顺序绘制它们来使事情正常工作。在写这篇文章时,我想到了一个简单的方法来绘制从前到后排序的三角形,但这可能意味着很多小的绘制调用,我希望避免这种情况。有没有一些涉及巫毒魔法混合的方法,可以让我保留我的大批量三角形?