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

2023-11-18

看看总体进度

第22天通过CUllvisitor创建了渲染树和状态树,并进行必要的剔除。

接下来进行排序和优化

RenderStage::sort函数时按照前序渲染台,当前渲染台和后续渲染台的顺序进行,其中前序渲染台和后续渲染台通过Camera::setRenderOrder实现,保存了指定摄像机及其场景子树和渲染树结构。

渲染树及其各个分支中数据的排序工作实际上时通过RenderBin::sortImplementation函数实现的,如果希望能实现自定义的渲染树排序动作,通过RenderBin::setSortCallback函数为根节点渲染台,(可以从摄像机的SceneView对象中取得)设置新的排序回调即可。

 

 

抄一抄继续,注意需要排序的对象仅仅时渲染树中各个渲染元(RenderBin)中保存的状态节点StateGraph或者渲染叶RenderLeaf,渲染元之间不需要进行排序(那样会打乱实际的绘制顺序)

StateSet对象的渲染细节可以设置为RenderBin(不透明体)和DepthSortedBin(透明体,按深度排序),对于设置为RenderBin或者缺省形式的渲染状态来说,再次进行排序的意义不大;因此OSG事实上仅针对DepthSortedBin渲染元中的各个渲染叶RenderLeaf进行排序,

可以用 RenderBin::setSortMode 加以指定排序类型
 
 

 

 

 

 

接下来查找状态树StateGraph中有没有无效的节点,并删除

 

设置用户变度的方式

场景筛选阶段进行了构建玩状态树和渲染数,剔除,排序后;接下来进行绘制了。这里用的单线程模型

可知,单线程渲染才行,

 

顺利进入

同样其他函数的删除集合

 

 

 

比如

 

对于非立体显示的情况

 

 

 

 

重点在RenderStage::draw()中,

 

运行摄像机第24天再详细,所以这里不扩展。

继续往下走

 

drawInner()会在下一天电子书中讲,所以这里暂时不展开。

copyTexture()也是电子书后面详细讲,这里暂时不展开。

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

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

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

    对于几个多线程渲染中的成员变量 继续抄一抄 Block阻塞器 BlockCount 计数器类 它与阻塞器类的使用方法基本相同 block 阻塞线程 release 释放线程 不过除此之外 BlockCount的构造函数还可以设置一个阻塞计数
  • 第二天(七)osg::Object* readObjectFile_const std::string& filename_const ReaderWriter::Options* options

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • osgFBO(十四)PrerenderOrder的使用

    由于前面是简单的demo 所以不用管渲染次序 然而 实际项目中 会出现多种渲染方式 这时候就要用到 camera gt setRenderOrder osg Camera PRE RENDER 还要加上具体次序 比如 采样摄像机设为2 处理
  • osgFBO(十)多pass-3,pass3,shader将背景从绿色变为蓝色

    pass3和pass2类似 只是再熟悉下 这个Pass设定为最后一步 可以不再输出纹理 即 1 pass3摄像机输入tex2 osg ref ptr
  • qedl中的fixDepth()简化

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

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

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

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

    先看看总体进度 先获取所有的图形上下文 然后进行checkEvents 请求分发消息并通过takeEvents 获取交互事件 再交由GUIEventHandler处理交互事件 中间的步骤 在checkeEvents里面 消息分发函数 消息处
  • 调试最长的一帧(第16天)

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

    再次看osg 最长的一帧 因为分页数据库适合于PagedLod和ProxyNode 一般调试还得准备数据 比较麻烦 突然想起 和我以前封装的引擎类似 分页数据库就是几个生产者与消费者 回过头来看这个图 看似复杂 实际上并不复杂 如果简化 只
  • 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
  • osg fbo(四),将颜色缓冲区图片中的牛通过shader变绿

    osg fbo 三 中 把整个屏幕变绿了 因为是把shader添加到了颜色缓冲区图片上了 如果只想把牛变绿 就需要把shader添加到原始场景根中 即 osg ref ptr
  • osgFBO(十二)深度纹理与颜色纹理混合

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

随机推荐

  • 一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除

    教你一个无敌删除的命令 所有的流氓软件及顽固程序等都可以轻松的删除 方法非常的简单 桌面右键 新建 文本文档 双击桌面的这个新建的文本文档 把下面的命令复制后粘贴进去 写入下列命令 DEL F A Q 1 RD S Q 1 文件 另存为 统
  • 一次安装Python插件mysqlclient受到的启发

    首先 我也是Python的初学者 环境是ubuntu22 04 pycharm 都安装好了以后 我打开了一个原来编辑过的项目 在新环境中提示没有安装mysqlclient 于是我就pip install mysqlclient 就有了以下的
  • 线性数据结构(线性表、链表、栈、队列、散列表)

    作者 disappearedgod 文章出处 http blog csdn net disappearedgod article details 23805707 时间 2014 4 16 线性表 基本概念 线性结构是最常用 最简单的一种数
  • 人脑神经网络计算法+机器

    人工神经网络编辑 人工神经网络 Artificial Neural Networks ANN 系统是 20 世纪 40 年代后出现的 它是由众多的神经元可调的连接权值连接而成 具有大规模并行处理 分布式信息存储 良好的自组织自学习能力等特点
  • 编码问题

    编码 字符 gt 字节数组 解码 字节数组 gt 字符 编码 String str 你好 byte bus str getBytes UTF 8 解码 String str1 new String bus UTF 8 System out
  • STM32F407 USART3串口使用DMA接收不定长数据和DMA中断发送

    一 前言 使用DMA通信的好处是 不占用单片机资源 不像普通串口中断 发送一个字节触发一次中断 发送100个字节触发100次中断 接收一个字节触发一次中断 接收200个字节触发200次中断 数据接收完毕触发一次DMA中断 发送数据完毕触发一
  • 如何克服开发团队缺乏专业知识,加速交付高质量项目成品

    持续测试是一个过程 使团队能够在软件开发中建立质量 并加速交付高质量的客户体验 通过持续测试 团队使用自动化测试获得关于代码健康的即时反馈 持续测试使企业能够评估商业风险 最近的行业调查显示 用于跟踪项目进展和成功的首要指标 高测试覆盖率
  • 设计一个能够获取栈中最小值的栈。

    设计一个栈 要求 支持 push pop top 操作 并能在常数时间内检索到栈中最小元素 示例 public Stack
  • 闭包-python

    闭包的概念 在 Python 中 闭包 closure 是一个常见的编程技巧 闭包是指一个函数对象 该函数能够访问其定义域外部的非全局变量 即使这些变量在函数调用时不处于活动状态也可以被访问 def outer func x def inn
  • ScriptManager和UpdatePanel控件的使用

    ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果 其中的UpdatePanel就是设置页面中异步局部更新区域 它必须依赖于ScriptManager存在 因为ScriptManger控件提供了客户
  • DNS 基础知识及 Linux DNS 服务器操作知识

    一 DNS域名结构与域名服务器 域名系统DNS Domain Name System 是因特网使用的命名系统 用来把便于人们使用的机器名字转换成为IP地址 域名系统其实就是名字系统 为什么不叫 名字 而叫 域名 呢 这是因为在这种因特网的命
  • 调用OpenAI接口失败的原因

    谈谈我研究OpenAI的感受 Chatgpt的后台时基于OpenAI研发的 但是国内一直无法使用Chatgpt 2023年2月份研究了OpenAI接口 为了国内能体验ChatGpt 就自己搭建了网站 并集成了几十个接口到自己的网站 也有很多
  • SpringBoot项目启动报错--“xxx程序包不存在“

    问题描述 SpringBoot项目 从主分支拉了一个新的分支 运行时报错xxx程序包不存在 原因分析 因为是从master新拉的分支 里面有以前已经编译好的target 可能是拉过来的分支有些地方没编译到 导致找不到程序包 解决方案 将项目
  • Ubuntu 18.04上安装CMake的简单经验流程

    这篇博客继续第一篇和第二篇的内容 这篇相对简单 按照这里的介绍 https cmake org install 我们直接把CMake的压缩包下载下来 解压后首先运行 bootstrap 如果是在一个比较新的系统上安装 则有可能会报下面的错
  • 【githubshare】无需编写一行代码,即可自动为静态数据集生成只读 API,快速完成静态数据的加载调用

    推荐 GitHub 上一款开源的开发者工具 ROAPI 无需编写一行代码 即可自动为静态数据集生成只读 API 快速完成静态数据的加载调用 GitHub github com roapi roapi 静态数据集所支持的格式 包括 CSV J
  • 学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

    前 言 前几篇文章介绍了 pytest 点的基本使用 学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求 从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数 插件开发等等 仔细去看过 pytest 文档的小伙伴
  • OO ALV checkbox更新的问题

    OO ALV在CHECKBOX的处理与FUNCTION ALV有稍微的不同 在调用set table for first display后需要加上以下语句才能实现点击后自动更新内表 CALL METHOD g grid gt registe
  • 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)...

    例如有一幅图 文件名为 a jpg 读取 from PIL import Image 或直接import Image im Image open a jpg 将图片转换成灰度图 im1 im convert L 所以 打开图片并转换成灰度图
  • 基于SVPWM改进的永磁同步电机直接转矩控制二更

    导读 本期对基于SVPWM的永磁同步电机直接转矩控制进行全面的分析和仿真搭建 之后与传统的DTC进行比较 凸显基于SVPWM改进的DTC方法的有效性 如果需要文中的仿真模型 关注微信公众号 浅谈电机控制 留言获取 一 传统直接转矩控制系统存
  • 调试最长的一帧(第23天)

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