首页 > 其他分享 >1_Scene渲染流程分析

1_Scene渲染流程分析

时间:2023-11-28 12:47:01浏览次数:34  
标签:渲染 流程 passState Scene scene ._ framebuffer globeDepth

参考:
Cesium原理篇:6 Render模块(4: FBO)

Scene渲染流程分析

// Scene.js
function render(scene, time) {
  //...

  // 1) 渲染到哪里?
  // updateAndExecuteCommands -> executeCommandsInViewport -> updateAndClearFramebuffers
  updateAndClearFramebuffers();

  // 2) 执行渲染命令
  // updateAndExecuteCommands -> executeCommandsInViewport -> executeCommands
  executeCommands();

  // 3) 处理渲染结果
  resolveFramebuffers();

  // ...
}

1、渲染到哪里?

fn updateAndClearFramebuffers() {
  // 这里选择其中一种情况,渲染到 globeDepth 的 帧缓冲区中。
  passState.framebuffer = view.globeDepth.framebuffer;

  // 选择好后清除上一次的渲染结果
  clear.execute(context, passState);
}

2、执行渲染命令

executeCommands() {
  // 深度清除
  clearDepth.execute(context, passState);
  clearStencil.execute(context, passState);
}

Context.prototype.draw = function(drawCommand, passState) {
 passState = defaultValue(passState, this._defaultPassState);
 // 获取对应的FBO,优先离屏渲染
 var framebuffer = defaultValue(drawCommand._framebuffer, passState.framebuffer);
 beginDraw(this, framebuffer, drawCommand, passState);
 continueDraw(this, drawCommand);
};

3、处理渲染结果

globeDepth._colorTexture,绑定在GlobeDepth中,而之前的FBO的过程正是对这张纹理的渲染。

function resolveFramebuffers(scene, passState) {
 if (useFXAA) {
  if (!useOIT && useGlobeDepthFramebuffer) {
  // 绑定到FXAA中的FBO中
  passState.framebuffer = scene._fxaa.getColorFramebuffer();
  // 将globeDepth的_colorTexture渲染到fxaa中
  scene._globeDepth.executeCopyColor(context, passState);
  }
  // framebuffer置空,即渲染到屏幕
  passState.framebuffer = environmentState.originalFramebuffer;
  // 将fxaa._texture渲染到屏幕
  scene._fxaa.execute(context, passState);
 }
}

标签:渲染,流程,passState,Scene,scene,._,framebuffer,globeDepth
From: https://www.cnblogs.com/lianming/p/17861660.html

相关文章

  • Scene渲染命令集合(executeCommands)分析
    Scene渲染命令集合(executeCommands)分析前提条件://已经确定了渲染缓冲区:view.globeDepth.framebufferpassState.framebuffer=view.globeDepth.framebuffer1、简单流程,没有pick和后处理//一般性流程executeCommands(scene,passState){//更新相机us.update......
  • 如何实现CRM销售流程自动化?
     销售业绩是衡量企业经营的重要指标,也是销售人员一直要达成的目标。销售业绩能否提高取决于销售人员的能力、客户服务水平,还需要借助有效的工具。CRM系统就是这样的一款软件。企业如何提高销售业绩?不妨试试CRM销售流程自动化。CRM如何实现销售流程自动化?数据自动化:CRM可以通......
  • 界面控件DevExpress WPF流程图组件,完美复制Visio UI!(二)
    DevExpressWPFDiagram(流程图)控件帮助用户完美复制MicrosoftVisioUI,并将信息丰富且组织良好的图表、流程图和组织图轻松合并到您的下一个WPF项目中。在上文中(点击这里回顾>>),我们为大家介绍了DevExpressWPFDiagram(流程图)组件性能优异切信息丰富的流程图功能、轻松地从数据源......
  • 从前端的角度来梳理微信支付(小程序、H5、JSAPI)的流程
    因业务需要,开发微信支付功能,涉及三种支付方式:JSAPI支付:微信内网页支付,需要开通微信服务号小程序支付:在小程序中支付,需要开通小程序H5支付:在手机浏览器(出微信内网爷)中网页支付使用微信支付的前提必开通微信商户号,要使用到那种的支付方式要前需在商户平台开通(要审核)。支付......
  • django 创建model 并迁移生成表 在创建记录的写法流程
    django创建model并迁移生成表在创建记录的写法流程在Django中,创建一个新的模型并迁移生成表的步骤如下:在你的应用的models.py文件中定义模型。例如,我们创建一个名为Person的模型,它有name和age两个字段:fromdjango.dbimportmodelsclassPerson(models.Model):name=m......
  • Vue3中 使用v-for嵌套 获取其他数组中的值作为key值 渲染数据
    <tbody><trv-for="(row,idx)inrows":key="idx"><tdv-for="(item,key)intitle":key="key">{{row[key]}}</td></tr>......
  • 虚拟机安装流程图
    ......
  • Redis深入理解-内核请求处理流程、数据传输协议
    Redis内核级请求处理流程RedisServer其实就是Linux服务器中的一个进程主要还是下图的流程应用先和server端建立TCP连接建立连接之后,server端就会有一个与该客户端通信的socket,客户端的读写请求发送到服务端的socket那么通过IO多路复用,收到读写请求的socket会到队列......
  • multipleWindow3dScene代码解释
    title:深入分析:GitHubTrending项目"multipleWindow3dScene"banner_img:https://cdn.studyinglover.com/pic/2023/11/b57a22bd9cf8a1c0a954fd61e6c311f2.pngdate:2023-11-2719:18:00tags:-文字生成图片这是由chatGPT生成的文章,内容是关于GitHubTrending项目"multi......
  • 浪潮信息赵帅:实现算力全流程绿色化,理清数据中心可持续发展解题思路
    近日,2023IDC中国可持续发展峰会在北京顺利召开。大会以“铸就可持续发展业务的绿色科技”为主题,从IDCESG洞察、先锋企业低碳化案例研究及合作伙伴解决方案等方面,帮助企业理清“双碳政策”下的解题思路。浪潮信息服务器产品线总经理赵帅受邀参会并发表了“绿色算力助力产业可持续......