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

2023-11-07

终于到达绘制了,先看总体流程阶段

然而,从并行堆栈上看,已经有渲染线程开启了

 

跟着电子书走,先是介绍,抄一抄,加深印象。

osg的场景渲染过程可以简单地分为三个阶段:用户APP阶段,更新用户数据、负责场景对象的运动和管理等;筛选cull阶段,负责对场景中的对象进行筛选裁剪,略过那些不会被用户所见(因而不必渲染)的物体,并根据渲染状态的相似性对即将进入渲染管线的对象排序(从而避免OpenGL状态量的频繁切换);绘制(DRAW)阶段,执行各种OpenGL操作,将数据送入OpenGL渲染管线及显示系统处理。

如果有多个图形设备(渲染窗口)时,需要分别为每个窗口的每个摄像机执行相应的筛选和绘制工作,因为各个摄像机的投影矩阵和观察矩阵均可能不同;不过用户APP阶段不需要被执行多次,因为用户数据应当是被各个图形设备所共享的。

对于单线程运行的系统来说,用户/筛选/绘制这三个阶段在每一帧中都应当是顺序执行的;而对于多线程运行,以至多CPU的系统来说,则可以将前后两帧的工作稍微有所交叠。用户更新和场景筛选,以及场景筛选和绘制的工作互相不能重叠;但是我们可以允许在上一帧的绘制没有结束之前,就开始下一帧的用户数据更新工作;我们还可以允许由不同的cpu执行不同图形设备的筛选和绘制工作,从而提高整体渲染的效率,实现实时渲染的目的。

接下来要针对OSG的四种线程模型,讲解osg的渲染机制。

 

启动渲染线程

几个多线程渲染的变量

 

而现在,开始单线程

开始跟踪

筛选和绘制是重点,由于电子书后面有,所以不展开。

在renderingTraversals()中,多线程渲染也是同函数,只是设置相应的_startRenderingBarrier,_endRenderingDispatchBarrier,_endDynamicDrawBlock阻塞

先到这里吧

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

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

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

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • 调试最长的一帧(第19天)

    这个主要是理论了 抄一抄 最常用到场景管理方式时场景节点树结构 场景树顶点的叶节点osg Geode包含了各种需要渲染的几何体的顶点和渲染状态信息 而组节点osg Group及其派生出的各种特殊功能节点则作为场景树的各个枝节节点 它们也可以
  • 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 由它负责执行相
  • 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阶段
  • 调试最长的一帧(第20天)

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

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

    什么是pass 这个问题 看似简单 也让我头疼 看了osgdefered pass定义为osg Camera 杨石兴的osg视频教程定义为osg Group 我认为一个passRoot可以定义为一个Group 包含三部分 到目前pass为止
  • osg+shader光照半透明

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

    依照惯例 先看总体流程 到了更新回调 一边抄一边记忆 OSG更新回调的作用与事件回调有类似之处 由专门的访问器对象 updateVisitor负责场景图形更新遍历 所有的节点和Drawable几何体对象都可以使用setUpdateCallb
  • osg fbo(四),将颜色缓冲区图片中的牛通过shader变绿

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

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

随机推荐

  • IDEA设置忽略idea文件和iml文件

    1 File gt Settings 2 Editor gt File Types 3 红框那里填上 iml idea
  • C语言中的宏定义

    1 简单宏定义 简单的宏定义有如下格式 define指令 简单的宏 define 标识符替换列表 替换列表是一系列的C语言记号 包括标识符 关键字 数 字符常量 字符串字面量 运算符和标点符号 当预处理器遇到一个宏定义时 会做一个 标识符
  • [Android]从零开始的内核编译

    从零开始的内核编译 本教程将基于小米 10S 的内核源码进行实例 其他型号的手机请自行寻找内核源码 具体内容可以参考我的内核编译项目 手机型号查询 1 获取设备 手机 代号 在安卓设备终端 adb shell 上执行 getprop gre
  • 检测之VOC转COCO

    文章目录 1 获取标注文件及label名与ID对应关系 1 1 获取label2id及标注xml路径 2 xml格式转coco 检测系列相关文章参考如下链接 VOC数据的结构介绍及自定义生成 用labelimg自已标注 VOC标准数据的生成
  • Servlet 作业

    一 填空题 1 Servlet 中使用Session 对象的步骤为 调用HttpServletRequest getSession 的得到Session对象 查看Session对象 在会话中保存数据 2 http 全称是 HyperText
  • Python 计算机视觉(二) —— OpenCV 基础

    目录 1 安装配置 2 OpenCV 基础语法 1 读取图像并显示 2 调整显示窗口大小 3 调整图像尺寸大小 4 图像灰度处理 3 几何图形绘制 1 绘制线段 2 绘制矩形 3 绘制圆形 4 绘制椭圆 5 添加文本 总结 1 安装配置 打
  • ssh遇到port 22:No route to host问题

    ssh遇到这个port 22 No route to host的这个问题其实是比较常见的问题 通常是两个思路 检查防火墙状态 检查ssh状态 这两个方面的解决方案非常常见 无非就是查看这两个 防火墙是否关闭和ssh是否正在运行 大家自行百度
  • SpringCloud 使用sentinel

    一 添加依赖
  • 都2023年了,还有必要学SSH框架吗

    在Web开发中 框架是开发效率和代码质量的保障 SSH框架是指结合了Struts2 Spring和Hibernate3三个开源框架所形成的一种框架 那么 在2023年 我们是否仍然需要学习SSH框架呢 本文将进行探讨 分析SSH框架的优缺点
  • 高中信息技术python知识点_高中信息技术《Python语言》模块试卷

    高中信息技术 Python语言 模块试卷 由会员分享 可在线阅读 更多相关 高中信息技术 Python语言 模块试卷 3页珍藏版 请在人人文库网上搜索 1 区县 姓名 座号 密 封 线 高中信息技术Python语言模块试卷本试卷分为五大题
  • 攻防世界Web:Web_php_wrong_nginx_config

    首先进来是一个登录页面 通过御剑扫描 发现了robots txt 打开发现两个php文件 hint php Hack php是跳转到登录页面 抓包看看Hack php 发现了可疑的点Cookie isLogin 0 不妨修改为1 进入控制中
  • Docker 自动启动和容器自动启动

    一 docker 服务启动启动 开启 docker 自启动 systemctl enable docker service 关闭 docker 自启动 systemctl disable docker service 二 docker 容器
  • C++ 线程局部变量thread_local

    本文转自 https blog csdn net aguoxin article details 103968031 Linux中的线程局部存储 一 本章节转自 https blog csdn net cywosp article deta
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记13——BTC匿名性篇2(零知识证明)

    北京大学肖臻老师 区块链技术与应用 公开课笔记 比特币回顾问答篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page 匿名性部分第一节 匿名性分析请见 cli
  • UncaughtExceptionHandler异常处理机制

    解释 UncaughtExceptionHandler类是java1 5里新增的 Thread类里面的一个函数式接口类的 类名意思为 未捕获的异常处理 该类的注释接口意思 接口处理器时调用线程突然终止 由于未捕获到异常 当一个线程要终止由于
  • mysql json字段长度_mysql5.7 新增的json字段类型

    一 我们先创建一个表 准备点数据 CREATE TABLE json test id int 11 unsigned NOT NULL AUTO INCREMENT COMMENT ID json json DEFAULT NULL COM
  • java什么场景使用克隆,Java设计模式----原型模式(克隆模式)

    场景 思考一下 克隆技术是怎么样的过程 JavaScript语言中的 继承怎么实现 那里面也有prototype 原型模式 通过new产生一个对象需要繁琐的数据准备或访问权限 则可以使用原型模式 就是java中的克隆技术 以某个对象为原型
  • Qt 搜索框

    一 前言 用户需要输入文本时 可使用QLineEdit控件进行编辑输入 缺点是样式相对单一 在使用百度搜索输入框时 发觉比较人性化 故采用QLineEdt QPushButton通过css样式实现自定义搜索框控件 包含如下功能 1 可设置占
  • 用 ChatGPT 解锁生成式游戏#StoryGames.AI

    生成式游戏 AI 是一种基于人工智能技术 自动生成游戏故事情节 关卡 角色等内容的游戏 AI ChatGPT 的发展生成式游戏 AI 产生了重要影响 为游戏开发者提供了更加灵活 自由的创作方式 每个人都有机会开发自己的专属游戏 StoryG
  • 调试最长的一帧(第16天)

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