本文介绍: 【代码】Scene渲染命令集合(executeCommands)分析。

Scene渲染命令集合(executeCommands)分析

前提条件:

// 已经确定了渲染缓冲区: view.globeDepth.framebuffer
passState.framebuffer = view.globeDepth.framebuffer
1、简单流程,没有pick和后处理
// 一般性流程
executeCommands(scene, passState) {
  // 更新相机
  us.updateCamera(camera);

  // 更新视锥
  us.updateFrustum(frustum)

  // -------------------------- 一、渲染环境 -----------------
  us.updatePass(Pass.ENVIRONMENT);
  // sky, sun, moon...

  // ------------------------- 二、渲染视椎里的内容 ---------------------------
  // ----------- 0、准备 -------------------
  // 确定如何处理半透明表面。
  executeTranslucentCommands = scene._executeOITFunction;

  // 读环境状态
  const clearGlobeDepth = environmentState.clearGlobeDepth;
  const useDepthPlane = environmentState.useDepthPlane;
  const usePostProcessSelected = environmentState.usePostProcessSelected;

  // 读场景状态
  const clearClassificationStencil = scene._classificationStencilClearCommand;
  const clearDepth = scene._depthClearCommand;
  const clearStencil = scene._stencilClearCommand;

  // 清除深度缓冲区和模板缓冲区, 颜色缓冲区呢?
  clearDepth.execute(context, passState);
  clearStencil.execute(context, passState);

  // ----------- 1、绘制 GLOBE -------------------
  us.updatePass(Pass.GLOBE);

  // 执行深度拷贝
  // 读入 view.globeDepth._outputFramebuffer 的 getDepthStencilTexture()
  // 写入 view.globeDepth._copyDepthFramebuffer
  globeDepth.executeCopyDepth(context, passState);

  // ----------- 2、绘制 terrain -------------------
  us.updatePass(Pass.TERRAIN_CLASSIFICATION);

  // ----------- 3、绘制 3D Tiles-------------------
  us.updatePass(Pass.CESIUM_3D_TILE);

  // ----------- 4、绘制 体素-------------------
  us.updatePass(Pass.VOXELS);

  // ----------- 5、绘制 不透明元素-------------------
  us.updatePass(Pass.OPAQUE);

  // ----------- 6、绘制 透明元素-------------------
  us.updatePass(Pass.TRANSLUCENT);

  // 执行深度拷贝
  // 读入 globeDepth.depthStencilTexture
  // 写入 pickDepth._framebuffer,用于位置拾取
  const depthStencilTexture = globeDepth.depthStencilTexture;
  const pickDepth = scene._picking.getPickDepth(scene, index);
  pickDepth.update(context, depthStencilTexture);
  pickDepth.executeCopyDepth(context, passState);

  // 如果 picking || !usePostProcessSelected, 就结束了

  // todo...
}

原文地址:https://blog.csdn.net/qq_21476953/article/details/134664626

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_1375.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注