我正在使用 OpenGL 编写一个简单的 3D 引擎。我已经使用以下模式实现了一个简单的场景图:
ISceneNode
IMeshSceneNode
StaticMeshSceneNode
ICameraSceneNode
StaticCameraSceneNode
TrackBallCameraSceneNode
ILightSceneNode
PointLightSceneNode
但我想知道“渲染器”(实现着色器程序的类)是否也可以是场景节点(将渲染代码从 MeshSceneNode 提取到 RenderSceneNode)。对我来说这可能是一个正确的选择,因为如果我必须使用相同的顶点和片段着色器渲染多个网格(例如 42 个网格),那么绑定和取消绑定着色器程序一次而不是 42 次应该很有用!
那么您如何看待以下架构:
第一个代表我当前的概念(为简单起见,我不代表“Light”和“Camera”场景节点)。
因此,在这里,如果我想渲染我的 3 个网格(使用相同着色器的 3 个着色程序),我将为每帧绑定和取消绑定 3 次着色程序(在每个网格节点的“渲染”方法中)。
这是另一个概念:
正如您在上面看到的,这次我将在渲染节点中为所有子节点绑定一个唯一的着色器程序。所以它可能会更快。
你觉得我的想法怎么样?