osg渲染过程

目录

1、渲染最简单代码

2、详解run方法

3、详细过程

4、回调函数

5、Node Visitor


1、渲染最简单代码

2、详解run方法

3、详细过程

3.1 advance()方法

进行帧计数

3.2 eventTraversal()

eventTraversal()响应用户操作,eventTraversal()遍历的是事件队列,而不 是场景图;而且这个事件队列是OSG自己的 Event Queue,并非操作系统的事件队列;

也就是说用户基于osg基类定义的事件,通过osg开放出来的接口注册了之后,在这里进行每一帧渲染,调用。

eventTraversal()与andvance()一起为更新 遍历提供依据。标记帧是否渲染完成。

3.3 updateTraversal()(更新遍历)

在updateTraversal()中实现,修改场景图,如渲染状态、结点参数等,以实现动态场景;更新摄像机。

备注:

渲染过程的几个遍历,特别是事件遍历和更新遍历,我们要想按照我们的意图去响应事件和更新场景图,就要用到回调函数 callback来参与到这些遍历中去。

详细事件遍历看章节4 回调函数。

详细更新遍历看章节5 节点访问器,访问者模式

3.4 在renderingTraversals()(裁剪遍历)

在renderingTraversals()中实现,剔除不可见结点,将可见结点置入render graph中。通过遍历render graph,向图形卡发送绘制命令;在线程中实现,可能没有执行完,主循环已进入下一轮。

4、回调函数

5、Node Visitor

基于访问者的设计模式,用来对相应的结点以各种方式进行遍历(遍历方式有只访问当前结点、遍历父结点、遍历子结点、遍历活动子结点等)。

最常见的最经典的NodeVisitor就是找到特定名字结点的那个Visitor了。

Visitor有很多种,如osgGA::EventVisitor、 osgUtil::UpdateVisitor和 osgUtil::CullVisitor,利用它们你可以控 制渲染过程中的相应遍历;在你所设置的相应回调函数中,也将可以利用它们进行遍历。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python knn算法

KNN(K-Nearest Neighbors)算法,即K最近邻算法,是一种基本且广泛使用的分类和回归方法。在分类问题中,KNN通过查找一个样本点的K个最近邻居,然后根据这些邻居的类别通过多数投票或加权投票来预测该样本点的类…

小型时间继电器ST3PA-C DC24V 带插座PF085A 导轨安装 JOSEF约瑟

ST3P系列时间继电器 系列型号 ST3PF-2Z(JSZ3F-2Z) 5s AC110V ST3PF(JSZ3F) 10s AC48V ST3PC-1(AH3-3) 5s DC24V ST3PC-1(AH3-3) 2h AC220V ST3PC-F(JSZ3C-F) AC380V ST3PA-E(JSZ3A-E) DC24V ST3PA-F(JSZ3A-F) DC24V ST3PF(JSZ3F) 10s AC36V ST3PC-1(AH3-3) 10s AC24V ST3PC-1…

0欧姆电阻、磁珠、电感的应用

作者声明:本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100163.com。 一、0欧姆电阻 电路设计中常见到0欧的电阻,大家往往会很迷惑:既然是0欧的电阻,那就是导线&…

OpenHarmony开发实例:【分布式游戏鉴权应用】

1.介绍 本文将介绍分布式游戏鉴权应用。操作过程为: 设备A点击“开始游戏”按钮,开始搜索周边设备。 设备A显示周边设备,点击设备B并发起连接请求,远程拉起设备B的FA。 设备B收到请求后,选择是否允许“开启游戏”。…

git am XXX.patch 文件内容解析

git am XXX.patch 文件内容解析 打补丁的两种方式: 1.patch XXX.patch 2.git am XXX.patch 例如: diff --git a/drivers/crypto/se/ce.c b/drivers/crypto/se/ce.c index e6f68286d4ce6..de1bcb46fbe6b 100644 --- a/drivers/crypto/se/ce.cb/drive…

【生产案例面试题】JVM调优

写作目的 最近上线了一个需求,遇到了一个JVM报警的问题,很荣幸能遇到,在此分享一下整个调优的过程。 背景 我们是中台服务,我们的甲方就是上游不同的业务。中台原则上是业务和能力分离,但是不可避免的是分不开&…

【示例】MySQL-SQL语句优化

前言 本文主要讲述不同SQL语句的优化策略。 SQL | DML语句 insert语句 插入数据的时候,改为批量插入 插入数据的时候,按照主键顺序插入 大批量插入数据的时候(百万),用load指令,从本地文件载入&#x…

Web地图服务规范之栅格瓦片地图服务:WMTS(WebMapTileService,网络地图瓦片服务)、TMS(TileMapService,瓦片地图服务)和XYZ

一、什么是栅格瓦片地图服务 这四种地图服务都是通过网络传输的栅格瓦片地图服务,这里有三个名词需要解释: 1、什么是栅格? 遥感影像、Dem等,就是图片。 2、什么是地图服务? 实际上,地图服务就是一个u…

如何在jmeter中把响应中的数据提取出来并引用

jmeter做接口测试过程中,经常遇到请求需要用到token的时候,我们可以把返回token的接口用后置处理器提取出来,但是在这种情况下,只能适用于当前的线程组,其他线程组无法引用到提取的token变量值,所以必须要生…

windows ubuntu子系统,单细胞篇 1.cellranger安装与分析

这几天,我将单细胞测序在windows ubuntu子系统中跑了一遍,将过程分享給大家。 单细胞测序conda create -n 10xdb #创建环境 conda activate 10xdbconda install -c bioconda cellranger -y #失败,可能源中没有 wget -O cellranger-7.…

使用深度学习集成模型进行乳腺癌组织病理学图像分类

基于预训练的VGG16和VGG19架构训练了四种不同的模型(即完全训练的 VGG16、微调的 VGG16、完全训练的 VGG19 和微调的 VGG19 模型)。最初,我们对所有单独的模型进行了5倍交叉验证操作。然后,我们采用集成策略,取预测概率…

说说你对链表的理解?常见的操作有哪些?

一、是什么 链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成 每个结点包括两个部分&…

软件测试面试题,建议收藏。。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行,可以实现跨平台&#x…

在Qt中为QWidget创建鼠标点击处理

当创建自定义控件MembershipCard时,需要继承QWidget类,并重写其鼠标点击事件。下面是完整的代码示例,包括前置声明、引入头文件以及详细解释: // membershipcard.h #ifndef MEMBERSHIPCARD_H #define MEMBERSHIPCARD_H#include &…

如何编写易于访问的技术文档 - 最佳实践与示例

当你为项目或工具编写技术文档时,你会希望它易于访问。这意味着它将为全球网络上的多样化受众提供服务并可用。 网络无障碍旨在使任何人都能访问网络内容。设计师、开发人员和撰写人员有共同的无障碍最佳实践。本文将涵盖一些创建技术内容的最佳实践。 &#xff0…

JS-30-async函数

上一节说,JavaScript异步操作需要通过Promise实现,一个Promise对象在操作网络时是异步的,等到返回后再调用回调函数,执行正确就调用then(),执行错误就调用catch()。 虽然异步实现了,不会让用户感觉到页面“…

2023年图灵奖揭晓,你怎么看?【模板】

2023年图灵奖揭晓,你怎么看? 2023年图灵奖,最近刚刚颁给普林斯顿数学教授 Avi Wigderson!作为理论计算机科学领域的领军人物,他对于理解计算中的随机性和伪随机性的作用,作出了开创性贡献。 提醒&#xff…

07 SQL进阶 -- 集合运算 -- 表的加减法

1. 表的加减法 1.1 什么是集合运算 集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。 在标准 SQL 中, 分别对检索结果使用 UNION, INTERSECT, EXCEPT 来…

构造JSON格式

后端构造JSON格式传给前端 方式一 后端 传递可迭代对象 记住,传json格式,如果你要用for循环 那么你的对象一定要是可迭代的对象 如果你单构造个类过去,你用for是肯定循环不了的,你必须使用List这种可以迭代的对象,才…

C# 中,可以使用以下方法优化 List 的 ForEach 循环速度

在 C# 中,可以使用以下方法优化 List 的 ForEach 循环速度: 使用 Dictionary 或 Hashtable 代替 List:在需要频繁查找元素时,Dictionary 或 Hashtable 的查找速度通常比 List 快。这是因为它们通过哈希码直接访问元素,…