我应该如何做深度独立的混合
How should I do depth independent blending?
我正在制作一个名为Gwen的GUI工具包的opengl3渲染器。我几乎所有的工作,但我有一些问题,使一切正确混合。我已经根据它们使用的纹理对三角形进行了排序,并将它们打包到一个VBO中,所以在单元测试中,它基本上可以归结为3层:没有纹理的填充矩形,文本,以及使用皮肤纹理的窗口,按钮等。
填充矩形通常绘制在其他所有东西的顶部并混合在一起,但一切背后的背景也是一个填充矩形,所以我不能指望。如果你最后画它们,就会有z值冲突(例如:窗口的边缘有一个纹理阴影,因为背景没有通过深度测试而变成黑色),如果你先画它们,就会有混合/z值冲突(例如:一些选择高光被画在上面,而不是像它们应该的那样混合)。
我不能指望能够识别任何特定的层,除了填充矩形。不同的层有不同的z值,所以我不能按照一定的顺序来画。在写这篇文章的时候,我想到了一个简单的方法来绘制三角形,但这可能意味着很多小的绘制调用,这是我希望避免的。有没有什么方法能让我保留大量的三角形呢?
您正在绘制GUI;批处理不应该是您的首要任务,因为GUI并不能做很多事情。GUI几乎永远不会成为您的性能瓶颈。这有过早优化的味道;首先,让它工作。然后,如果它太慢,让它工作得更快。
没有简单的机制来实现与顺序无关的透明度。最好的方法是按照适当的Z轴顺序来呈现。
相关文章:
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 独立读取-修改-写入顺序
- 混合组合和继承的C++问题
- 在混合代码库中将C转换为C++时出现许多包含错误
- D3D11-将混合权重和索引传递到顶点着色器
- 带有多个独立参数的C++For循环
- C++分数混合比较运算符错误
- 是否可以混合使用SFINAE和模板专业化?
- 如何在 Python C++ 混合库中调试非确定性分段错误?
- 通过命令行在Visual Studio中编译单个独立文件
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 如何将独立的 c 应用程序组合到 c++ 应用程序中?
- C++11 中的混合列表初始化
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- C++以迭代方式搜索混合类型地图
- antlr 规则上下文是否可以独立于目标
- #pragma(*诊断)当将Clang分析器与GCC编译器混合时
- 混合 Rcpp 模块和 Rcpp::export
- C++/CLI 混合托管/本机 DLL 不起作用
- 我应该如何做深度独立的混合