gpt4 book ai didi

c++ - 在 3D 世界中使用 Alpha 混合的 Z 顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:19 24 4
gpt4 key购买 nike

我正在开发一款只有 2D Sprite 的 3D 世界游戏(比如 Don't Starve 游戏)。 (带有 C++ 的 OpenGL ES2)

目前,我在不分批绘制它们之前将元素从后往前排序(因此 1 个元素 = 1 个 drawcall)。我想在我的框架中实现批处理以减少绘制调用。

这是我目前得到的:

  • 将场景中的所有元素重新排序。
  • 将元素的顺序列表发送到渲染器。
  • 渲染器查看他的批处理管理器是否存在给定元素及其 Material 的批处理。

    • 批处理不存在:创建一个新的。
    • 具有此 Material 的元素存在批处理:将 Sprite 添加到批处理中。
  • 为每个批处理计算包含所有 Sprite 的大网格(1 种 Material 类型 = 1 批处理)。

  • 当所有批处理都正常时,批处理管理器会为渲染器计算绘制命令。

  • 渲染器处理绘制命令(绑定(bind)着色器、绑定(bind)纹理、绑定(bind)缓冲区、绘制元素)

此处显示我的问题的图像:Image Image

但我遇到了一些问题,因为对象可能位于另一个批处理中的另一个对象后面。

我怎样才能做这样的事情?

最佳答案

听起来您正在尝试为两个相互排斥的目标优化渲染。

  • 以排序的 Z 顺序呈现以产生正确的透明度结果
  • 渲染按 Material 类型分组,大概是为了减少切换 Material 引起的 GL 状态更改次数。

其中一个必须优先于另一个。由于 Z 顺序对于透明的正确外观至关重要,因此您可能必须优先考虑它。完成后,您仍然可以自由地在 Z 顺序中批量处理相同 Material 的项目。

关于c++ - 在 3D 世界中使用 Alpha 混合的 Z 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21550953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com