gpt4 book ai didi

opengl - 对场景图概念的简单好奇

转载 作者:行者123 更新时间:2023-12-04 21:42:20 24 4
gpt4 key购买 nike

我正在使用 OpenGL 编写一个简单的 3D 引擎。我已经使用以下模式实现了一个简单的场景图:

ISceneNode
IMeshSceneNode
StaticMeshSceneNode
ICameraSceneNode
StaticCameraSceneNode
TrackBallCameraSceneNode
ILightSceneNode
PointLightSceneNode

但我想知道“渲染器”(实现着色器程序的类)是否也可以是场景节点(将渲染代码从 MeshSceneNode 提取到 RenderSceneNode)。对我来说这可能是一个正确的选择,因为如果我必须使用相同的顶点和片段着色器渲染多个网格(例如 42 个网格),那么绑定(bind)和取消绑定(bind)着色器程序一次而不是 42 次应该很有用!

那么您如何看待以下架构:

第一个代表我当前的概念(为简单起见,我不代表“Light”和“Camera”场景节点)。

enter image description here

因此,在这里,如果我想渲染我的 3 个网格(使用相同着色器的 3 个着色程序),我将为每帧绑定(bind)和取消绑定(bind) 3 次着色程序(在每个网格节点的“渲染”方法中)。

这是另一个概念:

enter image description here

正如您在上面看到的,这次我将在渲染节点中为所有子节点绑定(bind)一个唯一的着色器程序。所以它可能会更快。

你觉得我的想法怎么样?

最佳答案

Anton 所说的另一种说法是:如果您想优化状态更改,您不希望场景图中的节点直接进行任何绘制调用。将其委托(delegate)给您的渲染器,然后渲染器将能够构建一个中间表示,在此基础上它可以重新排序 OpenGL 调用以进行优化。

为您的渲染器定义一个干净的 API 还可以让您分离您的关注点:

  • 画什么,对比
  • 怎么画。

  • 然后你甚至可以使用双重分派(dispatch)(如进化的访问者模式)来使事情更通用。

    关于opengl - 对场景图概念的简单好奇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23314061/

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