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

2023-11-14

看看全流程,

主要讲sceneview::cull(),跟过去

重点在cullstage()

 

 

 

 

状态树与渲染树的构建都是在pushStateSet和popStateSet函数中完成的。而CullVisitor::apply函数(在遍历节点时调用),则负责根据不同的节点类型,在不同的时机调用这两个函数。

在遍历场景节点树时,使用pushStateSet将某个节点的渲染位置置入,然后再将它的子节点的渲染状态置入,如此反复。。。。。。结束这个子树的遍历时,则依次使用popStateSet弹出_currentRenderBin和_currentStateGraph,知道返回初始位置为止。如此即可在遍历节点子树中构建起渲染后台的状态树和渲染树;并且,如果在筛选(cull)过程中,我们判断某个节点(及其子树)应当被剔除掉时,只要跳过pushStateSet和popStateSet的步骤,直接返回,就不会在渲染时留下节点的任何蛛丝马迹。

 

下一步深入展开osgUtil::CullVisitor::pushStateSet(const osg::StateSet* ss)

 

 

 

popStateSet,是pushStateSet的逆过程。

 

 

 

下一步进行CullVisitor

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

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

  • 调试最长的一帧(第27天)

    对于几个多线程渲染中的成员变量 继续抄一抄 Block阻塞器 BlockCount 计数器类 它与阻塞器类的使用方法基本相同 block 阻塞线程 release 释放线程 不过除此之外 BlockCount的构造函数还可以设置一个阻塞计数
  • 调试最长的一帧(第19天)

    这个主要是理论了 抄一抄 最常用到场景管理方式时场景节点树结构 场景树顶点的叶节点osg Geode包含了各种需要渲染的几何体的顶点和渲染状态信息 而组节点osg Group及其派生出的各种特殊功能节点则作为场景树的各个枝节节点 它们也可以
  • osgFBO(十四)PrerenderOrder的使用

    由于前面是简单的demo 所以不用管渲染次序 然而 实际项目中 会出现多种渲染方式 这时候就要用到 camera gt setRenderOrder osg Camera PRE RENDER 还要加上具体次序 比如 采样摄像机设为2 处理
  • osg传递数组到shader,(以qedl为例)

    一 对float类型的数组 osg ref ptrosg FloatArray m dampingPixelDist 赋值 void ccBilateralFilter updateDampingTable m dampingPixelDi
  • osg fbo(一),生成颜色缓冲区图片

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

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

    正如以前所说 单线程模式是通过cull draw 进行剔除绘制的 如何进入的呢 其实很简单 逆推下 最后 回到梦开始的地方
  • osg fbo(三),将颜色缓冲区图片通过shader变绿

    这个其实很简单 一 写顶点着色器和片元着色器 static const char vertexShader void main void n n gl Position ftransform n n static const char ps
  • 调试最长的一帧(第22天)

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

    先看看总体 流程走到了更新分页数据库 分页数据库的数据流图 先找上图的4个成员变量 上图中 左侧的图框表示数据的检索和输入 中间的白色图框表示用于数据存储的内存空间 而右边的图框表示存储数据的输出 此外 蓝绿色图框表示可以在DataBase
  • 调试最长的一帧(第16天)

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

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

    电子书上给了个例子 抄一抄 加深下印象 也验证下以前的想法对不对 对于场景实例 其中 ss 加上数字代号来标识这些Stateset对象 后面括号中的两个参数分别表示setRenderBinDetails的两个设置项 表示空字串 R 表示 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函数 在遍历节点时调用 则负责根据
  • 调试最长的一帧(第十天)

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

    看看总体进度 第22天通过CUllvisitor创建了渲染树和状态树 并进行必要的剔除 接下来进行排序和优化 RenderStage sort函数时按照前序渲染台 当前渲染台和后续渲染台的顺序进行 其中前序渲染台和后续渲染台通过Camera
  • osgFBO(十二)深度纹理与颜色纹理混合

    前面涉及到了深度纹理和颜色纹理 由于qedl中 也要两者混合 所以 要考虑到两者混合 这里只是简单将其相加 一 设置纹理 采样颜色纹理 osg ref ptrosg Texture2D texColor createFloatRectang

随机推荐

  • led灯条维修_浅谈LED路灯驱动电源设计方案--海光照明

    LED路灯是LED照明中一个很重要应用 在节能省电的前提下 LED路灯取代传统路灯的趋势越来越明显 市面上 LED路灯电源的设计有很多种 早期的设计比较重视低成本的追求 到近期 共识渐渐形成 高效率及高可靠性才是最重要的 下面针对几种不同L
  • Python_OpenCV调用摄像头完成人脸识别

    核心是找到 haarcascade frontalface default xml 这个文件 一般来说下载了OpenCV库都有 直接去自己电脑找就行了 import cv2 调用模型库文件 face cascade cv2 CascadeC
  • docker制作镜像

    从 rootfs 压缩包导入 格式 docker import 选项 lt 文件 gt lt 仓库名 gt lt 标签 gt 压缩包可以是本地文件 远程 Web 文件 甚至是从标准输入中得到 压缩包将会在镜像 目录展开 并直接作为镜像第一层
  • 别让“低效沟通”成为企业的成本之痛

    管理学家曾说过 企业管理行为与沟通密不可分 80 的管理成本都与沟通有关 如今 有效沟通 在主流的企业管理价值倡导中越来越被广泛提及 渐渐成为每一个管理者必备的素质要求 其中最直接的体现就是各大商学院已经把它纳入核心课程体系中去 一 有效沟
  • WildFly 报错 java.lang.NoClassDefFoundError

    在eclipse上WildFly部署项目后 启动一直报错java lang NoClassDefFoundError 功夫不负有心人 终于解决 解决方案 查了网上很多资料 有说环境变量配置不对的 有说改wildfly 9 0 1 Final
  • Devops环境准备

    系统准备 https mirrors aliyun com centos 7 isos x86 64 安装Minimal 版本即可 root root 安装ifconfig yum install net tools x86 64 安装JD
  • 网络:网络协议基本原理

    引入 进程间通信 其实是通过内核的数据结构完成的 主要用于在一台linux上两个进程之间的通信 但是 一旦超出一台机器的范畴 我们就需要一种跨进程的通信机制 一台机器将自己想要表达的内容 按照某种约定好的格式发送出去 当另一条机器收到这些信
  • 八家校招公司的面试问题总结

    八家校招公司的面试问题总结 阿里 1 String s abc s存储在哪个区域 2 HashMap实现原理 ConcurrentHashMap实现原理 3 红黑树 为什么允许局部不平衡 4 TCP UDP区别 为什么可靠和不可靠 5 一次
  • Linux之Samba服务配置与管理

    Linux之Samba服务配置与管理 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件 由服务器及客户端程序构成 SMB Server Messages Block 信息服务块 是一种在局域网上共享文件和打印机的一种通信
  • Jetpack Compose — 让Composable具备生命周期感知

    Jetpack Compose 让Composable具备生命周期感知 我们将研究不同的方法来实现可组合 Composable 的生命周期感知 我们还将了解可组合生命周期和视图 View 生命周期之间的区别 我们将逐步探索不同的解决方案 以
  • 开源中国-仿写代码

    开源中国源码 div class page div
  • 微信小程序获取用户唯一标识openid

    相关知识 微信小程序 spring boot 一 步骤 1 获得的用户登录凭证code 有效期五分钟 2 发送参数code至后端 3 通过code获取openid 二 实现 1 获取code 接口 wx login 接口地址 https d
  • 工作中碰到的git问题

    这是平时工作中遇到的问题 百度结果很多 觉得有用的在此作个记录 一 git解决代码冲突 拉取时冲突 1 将本地的修改提交到本地库 2 执行命令 1 git pull origin master 将远程库代码拉取并合并到本地库 2 git p
  • 结构体字节对齐问题

    文章目录 一 结构体必知知识 二 结构体字节对齐有什么用 三 如何进行内存对齐 1 对齐规则 按结构体中最长类型字节为单位 2 结构体嵌套的情况 3 存在指定字节对齐单位的情况 pragma pack 总结 一 结构体必知知识 1 结构体内
  • Git 常用命令小结 -- 个人

    一 Git 放弃本地修改 强制pull代码 git fetch all git reset hard origin 分支 git pull 二 Git 基础命令 git status git diff 查看代码修改的状态和内容 git br
  • CAN初始化流程

    1 配置相关引脚的复用功能 使能CAN时钟 要用CAN 首先要使能CAN的时钟 CAN的时钟通过APB1ENR的第25位来设置 其次要设置CAN的相关引脚为复用输出 这里我们需要设置PA11位上拉输入 CAN RX引脚 PA12为复用输出
  • ubuntu14 java8_ubuntu14.04 安装Java8 (JDK8)

    目前腾讯云服务器 Ubuntu 14 04 系统用 sudo apt get install default jdk 安装的JDK还是 java 7的 会导致一些对于需要Java 8 支持的一些应用无法编译或者运行 所以 目前还需要自己手动
  • 浅谈后台管理系统

    一 后台是什么 二 模块管理 三 角色管理 四 账号管理 五 密码管理 六 更多讨论 一 后台是什么 后台不是某个独立系统 是多个模块的组合 并且之间还有信息交互 所以后台的设计对于PM要求一般较高 后台是用来数据维护的 后台需要一个管理模
  • 学了那么多年设计模式依然不会用!那可真蠢!

    什么是设计模式 设计模式 Design Pattern 代表了最佳的实践 通常被有经验的面向对象的软件开发人员所采用 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和
  • 调试最长的一帧(第21天)

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