调试最长的一帧(第十天)

2023-11-16

依照惯例,先看总体流程

到了更新回调

一边抄一边记忆

OSG更新回调的作用与事件回调有类似之处,由专门的访问器对象_updateVisitor负责场景图形更新遍历

所有的节点和Drawable几何体对象都可以使用setUpdateCallback设置更新回调

 

通过重载NodeCallback::operator()或者Drawable::UpdateCallback::update函数,可以在回调对象中添加自定义的工作。

 

 

更新回调与事件回调最大的不同在于:每当一个用户交互或系统事件产生时,每一个节点(以及Drawable对象)的事件回调都会被调用一次;而节点(以及Drawable对象)的更新回调只会在每帧中被调用一次。这一区别决定了我们应当在什么时候使用事件回调,什么时候使用更新回调。

osg的更新遍历函数updatteTraversal在系统每帧的执行过程中,除了处理用户的更新回调对象外,还要负责更新摄像机的位置,并且更新分页数据库DatabasePager和图像库ImagePager的内容。流程如下

空的。。。。。。。

 

 

 

由于电子书后面有详细解释,所以这里就不多调试了。在第11天调试进去。

一般operation对象可以用来处理与图形设备以及opengl底层API相关的工作,不过用户级的工作在这里实现也没有问题。

先说的更新工作队列_updateOperations。更新工作需要继承osg::Operation并重写operator()操作符,以实现一些特定的用户操作。

这里是个纯虚函数,需要重载。

这里还举了个例子,定义场景预处理

可以写入多组更新处理器

也可以移除

接下来是从摄像机_slaves的更新

接下来论述了从摄像机组各个从摄像机的投影矩阵和观察矩阵分别是主摄像机的投影矩阵和观察矩阵再各自加上一个偏移量,场景筛选设置也是从主摄像机继承的。

设置从摄像机Cullsettings的继承掩码

 

这里可以看到cullsettings有很多种场景筛选设置选项。

 

先说如何设置这些cullsettings的继承掩码

看看如何使用的。

咦,camera在用。看看camera类

当然是osg::Camera派生于osg::Cullsettings类了

现在看看有多少种剔除方式,跟过去这个枚举类型。

这里有几个设置项

背面裁剪

剪切平面

细节筛选判断对象是否足够细微

如果怕忽略掉细节,则设置最小的包围盒

聚集筛选

 

设置一种或多种筛选方式可以使用CullSetting::setCullingMode函数,(采用“或”运算来指定多种筛选方式),如果希望暂时屏蔽某一种筛选方式,则可以类似

camera->setCullingMode(camera->getCullingMode() & ~osg::Cullsetting::SMALL_FEATURE_CULLING):

有关各种筛选方式的详细算法,在CullingSet::isCulled()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试最长的一帧(第十天) 的相关文章

  • 第二天(七)osg::Object* readObjectFile_const std::string& filename_const ReaderWriter::Options* options

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • osg传递数组到shader,(以qedl为例)

    一 对float类型的数组 osg ref ptrosg FloatArray m dampingPixelDist 赋值 void ccBilateralFilter updateDampingTable m dampingPixelDi
  • qedl中的fixDepth()简化

    如果将PerspectiveMode的设置为1 则会传递zNear和Zfar 在fixDepth 中 而将perspectiveMode 0 则大大简化fixDepth float fixDepth float depth return c
  • osg fbo(一),生成颜色缓冲区图片

    由于工作需要 重新捡了下shader 很明显 fbo是重中之重 好记性不如烂笔头 先记录下 1 生成一个颜色纹理 为了省事 可以将纹理宽高 屏幕宽高 osg ref ptr
  • 调试最长的一帧(第七天)

    先看看总体进展 eventTraversal函数的任务 在每帧仿真过程中 取出已经发生的所有事件 摒弃哪些对场景不会有助益的 比如 在视口外的鼠标事件 依次交付给各个事件处理器 最后清空现有的事件队列 等待下一帧的到来 在View的几个成员
  • 调试最长的一帧(第17天)

    先看看流程 电子书上介绍了渲染器osgViewer Renderer类 osgViewer Renderer为摄像机渲染场景的工作提供了一个公共接口 当我们向视景器viewer添加了一个新的摄像机camera时 一个与摄像机相关联的渲染器R
  • 调试最长的一帧(第22天)

    先看看全流程 先抄一抄节点访问器NodeVisitor的工作原理 当我们执行节点的accept NodeVisitor nv 函数时 当前节点自动调哟个NodeVisitor apply方法 将自身的信息传递给节点访问器nv 由它负责执行相
  • 调试最长的一帧(第12天)

    先看看总体 流程走到了更新分页数据库 分页数据库的数据流图 先找上图的4个成员变量 上图中 左侧的图框表示数据的检索和输入 中间的白色图框表示用于数据存储的内存空间 而右边的图框表示存储数据的输出 此外 蓝绿色图框表示可以在DataBase
  • osgFBO(九)多pass---2,pass2,shader将背景从红色变为绿色

    二 pass2是比较完整的 同时有输入纹理和输出纹理 与pass1类似 这里只列出不同的地方 1 pass2摄像机输入tex1 osg ref ptr
  • 调试最长的一帧(第八天)

    先看看总体进度 先获取所有的图形上下文 然后进行checkEvents 请求分发消息并通过takeEvents 获取交互事件 再交由GUIEventHandler处理交互事件 中间的步骤 在checkeEvents里面 消息分发函数 消息处
  • ViewerBase::renderingTraversals()的简易理解

    前两篇说到了camera用来剔除 context用来渲染 多线程渲染就是把cpu尽可能的分配给context 如果土豪的话 在剔除过程也分配cpu 另外 也要注意到过期请求数据不处理 当然 首先要获取场景 摄像机和上下文 现在看下摄像机剔除
  • 调试最长的一帧(第16天)

    终于到达绘制了 先看总体流程阶段 然而 从并行堆栈上看 已经有渲染线程开启了 跟着电子书走 先是介绍 抄一抄 加深印象 osg的场景渲染过程可以简单地分为三个阶段 用户APP阶段 更新用户数据 负责场景对象的运动和管理等 筛选cull阶段
  • 分页数据库其实就是两个生产者与消费者

    再次看osg 最长的一帧 因为分页数据库适合于PagedLod和ProxyNode 一般调试还得准备数据 比较麻烦 突然想起 和我以前封装的引擎类似 分页数据库就是几个生产者与消费者 回过头来看这个图 看似复杂 实际上并不复杂 如果简化 只
  • 调试最长的一帧(第20天)

    电子书上给了个例子 抄一抄 加深下印象 也验证下以前的想法对不对 对于场景实例 其中 ss 加上数字代号来标识这些Stateset对象 后面括号中的两个参数分别表示setRenderBinDetails的两个设置项 表示空字串 R 表示 R
  • 调试最长的一帧(第14天)

    看看流程 可见分页数据库的更新也是和场景的筛选绘制是同时进行的 再看看大图 第14天要进行左下角的 依照惯例 跟过去 现在开始步入正轨 发现第0个fileName为空 这是有问题的 创建pagelod时修正为 这次进来了 在这里删除 放入r
  • osgfbo(六)从pass的角度考虑,改写fbo(二)

    什么是pass 这个问题 看似简单 也让我头疼 看了osgdefered pass定义为osg Camera 杨石兴的osg视频教程定义为osg Group 我认为一个passRoot可以定义为一个Group 包含三部分 到目前pass为止
  • 调试最长的一帧(第三天)

    先看看整体 以及进度 第三天的内容 主要讲根据窗口参数建立图形上下文设备 建立一个全屏显示的图形设备 这个WindowingSystemInterface是纯虚基类 也就是下一步就要父类调用子类了 获取或新建显示设置 各成员变量 成员变量的
  • osg+shader光照半透明

    先记录下 免得时间久了忘了 对于光照 光源有点光源 聚光灯 方向光 每种光源又有ambient diffuse specular emission几个属性 这里用点光源 不考虑衰减 1 diffuse是入射光与物体法线之间的余弦起作用 2
  • 调试最长的一帧(第21天)

    看看全流程 主要讲sceneview cull 跟过去 重点在cullstage 状态树与渲染树的构建都是在pushStateSet和popStateSet函数中完成的 而CullVisitor apply函数 在遍历节点时调用 则负责根据
  • 调试最长的一帧(第23天)

    看看总体进度 第22天通过CUllvisitor创建了渲染树和状态树 并进行必要的剔除 接下来进行排序和优化 RenderStage sort函数时按照前序渲染台 当前渲染台和后续渲染台的顺序进行 其中前序渲染台和后续渲染台通过Camera

随机推荐

  • Win7连接共享打印机时,报 0x00000bcb 错误

    打印服务器添了台 DocuCentre VI C3371 富士施乐3371打印机 问题描述 Win8 1 Win10等系统均能正常连接 部分 Win7 客户端连接时 报0x00000bcb错误 解决方法 后来桌面小哥找到了解决方法 Win7
  • 带头节点链表的操作使用讲解

    带头结点链表 链表一共具有创建 增添 删除 查找四种基本操作 接下来会对这四种操作进行挨个讲解 在此之前首先提供链表结点 初始化链表 删除链表的代码 链表结点 每一个节点都包含有一个数据以及指向下一结点的指针 以及定义一个链表的头指针 ty
  • 【Java八股文总结】之面试题(二)

    文章目录 面试题 一 几种锁的区别 1 synchronized 和ReentrantLock的区别 二 Java高级 1 反射 1 反射的应用场合 2 Java反射API 3 反射使用步骤 获取Class 对象 调用对象方法 4 获取Cl
  • shell脚本学习笔记2

    小试牛刀 文章目录 小试牛刀 1 7 别名 1 8 获取并设置日期及延时 1 9 调试脚本 1 10 函数和参数 1 11 将一个命令的输出发送给另一个命令 1 11 1 利用子 shell 生成一个独立的进程 1 11 2 通过引用子sh
  • 轻型数据库SQLite与Android实例

    SQLite 是一款轻型的数据库 是遵守ACID的关联式数据库管理系统 它的设计目标是嵌入式的 而且目前已经在很多嵌入式产品中使用了它 它占用资源非常的低 在嵌入式设备中 可能只需要几百K的内存就够了 它能够支持Windows Linux
  • 双口RAM及Vivado RAM IP核的使用

    目录 1 双口RAM概述 2 Vivado 双口RAM IP核 2 1 Block Memory Generator概述 2 2 真双口RAM的设置 2 2 1 Basic设置 2 2 2 Port设置 3 双口RAM例程 4 仿真 4 后
  • 当UNet遇见ResNet会发生什么?

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 1 前言 这篇文章主要以几篇经典的分割论文为切入点 浅谈一下当Unet遇见ResNet会发生什么 2 UNet 首先回顾一下UNet UNet的结构如下图所示 UNet
  • ubuntu下x86架构中交叉编译arm架构的程序

    ubuntu下x86架构中交叉编译arm架构的程序 交叉编译工具链安装 操作步骤 我们平时使用的大多数电脑都是英特尔的处理器 使用的是x86架构 因此仿真过程的代码是在x86架构的处理器运行的 但是当我们需要将程序部署到终端用于实物调试时
  • 工作小记:异步线程中事务不生效的问题

    在日常的开发中经常会遇到在线程池或者异常异步中执行自己的业务代码 lz最近在开发业务代码的时候也遇到一个类型的需求 因为请求处理的时间比较长 在设计接口的时候要求异步完成 直接上业务代码 executeOccupyStock 方法也添加了事
  • python并行计算(完结篇):并行方法总结

    转自 https zhuanlan zhihu com p 46678895 由于python相当易学易用 现在python也较多地用于有大量的计算需求的任务 本文介绍几个并行模块 以及实现程序并行的入门技术 本文比较枯燥 主要是为后面上工
  • 2023版最新最全React面试题

    React 作为前端使用最多的框架 必然是面试的重点 我们接下来主要从 React 的使用方式 源码层面和周边生态 如 redux react router 等 等几个方便来进行总结 1 使用方式上 这里主要考察的是 在开发使用过程中 对
  • 均匀分布的期望和方差的推导_概率论中均匀分布的数学期望和方差该怎么求啊?...

    展开全部 数学期望是分布区间e68a8462616964757a686964616f31333431343065左右两端和的平均值 方差为分布区间左右两端差值平方的十二分之一 均匀分布是经常遇到的一种分布 其主要特点是 测量值在某一范围中各
  • Ubuntu下安装Matlab步骤

    1 下载matlab iso镜像文件 可以从verycd上下载 搜索matlab unix版可得到 我下的是2010a 2 打开终端 输入sudo mkdir mnt temp 建立临时文件夹存放装载后的iso文件 再输入 sudo mou
  • Come on和我一起做基于深度学习的缺陷检测一(数据准备)

    基于深度学习的织物疵点检测 数据集的制作 数据标注 数据增强 图像和xml文件同时增强 这里有几句话要说 这个项目会持续更新 由于要忙于毕业答辩和论文修改 更新时间不定 由于本人研三 今年毕业要去工作 可能会出现拖更的现象 我把以前Pyth
  • Java从入门到实战总结-3.3、Java的IO处理

    Java从入门到实战总结 3 3 Java的IO处理 文章目录 Java从入门到实战总结 3 3 Java的IO处理 1 java io File 1 类的声明 2 字段 3 类的构造函数 4 类方法 5 示例 2 文件遍历 3 文件过滤器
  • ckplayer 播放视频

    备注 其中引用文件无法上传 如果需要私信即可
  • “GPT+健康医疗”赋能医疗行业“数智化”发展,景联文科技提供高质量医疗数据库

    近日 ChatGPT这个代表着通用版的大型语言模型以其出色的表现在全球互联网上引人注目 它所使用的GPT技术基础为人工智能应用开启了全新的世界 大模型时代已经到来 它已变成基础设施 变成算力 变成生产力 大模型可能有通用技术 但更重要的是如
  • 实体识别和关系抽取的联合模型总结

    实体识别和关系抽取的目标是从非结构化的文本中发现 实体1 关系 实体2 的三元组 它对知识库的构建和问答任务都很重要 是信息抽取的核心问题 现有的关系抽取方法主要有两种 1 使用流水线方法进行抽取 先对句子进行实体识别 然后对识别出的实体两
  • UE常用使用技巧

    UE使用技巧1 如何在行末添加指定字符如 方法 ctrl r 用 p全部替换 n即可 p n 2 如何删除空行 查找 p 替换为空即可 p 空 3 括号自动匹配 Ctrl b4 加书签 Ctrl F2 加书签 Alt F2 在多个书签中进行
  • 调试最长的一帧(第十天)

    依照惯例 先看总体流程 到了更新回调 一边抄一边记忆 OSG更新回调的作用与事件回调有类似之处 由专门的访问器对象 updateVisitor负责场景图形更新遍历 所有的节点和Drawable几何体对象都可以使用setUpdateCallb