gpt4 book ai didi

c++ - 如何在 OpenGL 3.3 中渲染多个对象,每个对象都有多个着色器?

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:47 25 4
gpt4 key购买 nike

我正在尝试使用 C++ 使用 OpenGL 制作一个 3D 渲染器,好吧,到目前为止,我有一个包含对象和 Material 对象列表的场景类(我也有这些类,我编写了我的代码,这样一个对象就可以有多个着色器(每个着色器都能够影响对象中的一组顶点)但现在我正试图找到一种将所有这些信息发送到 openGL 的好方法。

I've seen people suggest taking everything that uses the same shader and rendering that at once, and do the same for every shader ,好吧,如果我理解得足够好,但是如果你可以在不同的对象中包含相同的着色器,这是一个好主意,例如,如果我合并具有着色器 A 的每个顶点,那么该组包含单独的顶点不会受到伤害吗当我尝试一次绘制对象时?如果我获取每个对象并根据它们的着色器分离每个对象,那么对于渲染,我将获取对象 A 然后拆分为其着色器组,然后在对象 1 中绘制 shadergroup1,然后在对象 2 中绘制着色器组 2,依此类推。不会那也是太多的绘制调用。

您推荐什么策略来实现这一目标?

最佳答案

我建议的第一件事是,就渲染过程而言,您不要再从“对象”的角度思考。渲染时,唯一合理的分组是执行相同渲染步骤(渲染管道)的绘图批处理(特定基元、点、线、三角形)。过去几个月发布的现代渲染 API(Vulkan、DirectX 12 和 Metal)明确了这一点。

渲染场景时,推荐的策略是遍历所有对象,将它们分成渲染管道组,并为每个图元逐个管道组执行一次绘图批处理调用。总体目标应该是尽量减少绘图调用的总数。

关于c++ - 如何在 OpenGL 3.3 中渲染多个对象,每个对象都有多个着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41243711/

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