当前位置: 首页 > 知识库问答 >
问题:

对场景图概念的简单好奇

裴欣然
2023-03-14

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

ISceneNode
    IMeshSceneNode
         StaticMeshSceneNode
    ICameraSceneNode
         StaticCameraSceneNode
         TrackBallCameraSceneNode
    ILightSceneNode
         PointLightSceneNode

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

那么您如何看待以下模式

第一个表示我当前的概念(为了简单起见,我不表示“灯光”和“相机”场景节点)。

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

另一个概念是:

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

你觉得我的主意怎么样?

共有1个答案

彭鹭洋
2023-03-14

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

为渲染器定义一个干净的API还将允许您分离关注点:

  • 画什么,vs.
  • 怎么画它。

然后你甚至可以使用双重分派(比如一个进化的访客模式)来让事情变得更加通用。

 类似资料:
  • 本文介绍了 DM 工具的一个简单使用场景(非分库分表合并场景):将三个上游 MySQL 实例的数据迁移到一个下游 TiDB 集群中。 上游实例 假设上游结构为: 实例 1 Schema Tables user information, log store store_bj, store_tj log messages 实例 2 Schema Tables user information, log

  • 爱客服简介 爱客服智能客服系统是由中科汇联科技股份有限公司自主研发,专门为中小企业量身定制的全智能、全渠道的云客服平台(以下简称爱客服)。 爱客服以清华、北大、哈工大,三大高校组成的中科汇联人工智能研究院为技术核心;具备精准的语义理解、自然的人机交互、智能的知识梳理等优势;采用机器人+人工坐席+工单+呼叫中心四位一体的服务模式,有效提升客服工作效率、降低管理成本,让企业的价值真正传递给每一位客户。

  • 图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。 图(Graph)通常会放在树(Tree)后面介绍,树可以说是图的特例。 一、图的基础概念 图的结构很简单,就是由顶点 V 集和边 E 集构成,因此图可以表示成 G=(V, E) 。 上图就是无向图,我们可以说这张图中,有点集 V=\{1, 2, 3, 4, 5,

  • 本文向大家介绍javascript闭包概念简单解析(推荐),包括了javascript闭包概念简单解析(推荐)的使用技巧和注意事项,需要的朋友参考一下 关于"闭包"这个概念的文章在网上铺天盖地,基本已经稀烂了,但是有时候总感觉读了这么多的文章还是云山雾罩,当然是由于它本身就比较难于理解和涉及的知识较多,还有一个很重要的原因就是网上很多教程介绍可能存在一定的误区,或者说侧重点不同,下面就通过代码实例

  • 1、面向对象的两个基本概念 编程语言中,一般有两种编程思维,面向过程和面向对象。 面向过程,看重的是解决问题的过程。 这好比我们解决日常生活问题差不多,分析解决问题的步骤,然后一步一步的解决。 而面向对象是一种抽象,抽象是指用分类的眼光去看世界的一种方法。 Python 就是一门面向对象的语言, 如果你学过 Java ,就知道 Java 的编程思想就是:万事万物皆对象。Python 也不例外,在解

  • 本文向大家介绍简述Python中的面向对象编程的概念,包括了简述Python中的面向对象编程的概念的使用技巧和注意事项,需要的朋友参考一下 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序