带着上次的疑问我们继续探讨Away3D 的渲染流程。

在Away3D中所有的显示对象都是继承Object3D 的我们先看看显示对象和继承关系。

Object3D

  |---ObjectContainer3D  (3D显示容器)

      |---Entity (所有的3D实体对象的抽象基类)

         |---Mesh (网格对象)

         |---Camera3D (摄影机[非显示对象])

         |---SegmentSet (线段的集合可以绘制线)

         |---Sprite3D (公告板始终面向摄像机)

以上显示对象中最常用的 是 Mesh 我们想看看Mesh 的结构。

Mesh 是由多个SubMesh 组成的,每个 SubMesh 可以拥有自己的 Geometry 和 Material。很多朋友说 Away3D 的mesh不支持多材质,其实是错误的。

你可以对 Mesh进行改造单独设置他的 SubMesh 即可。Geometry 和 Material这里占时不多说了大家自己用用就知道了。 每个Mesh都有一个MeshNode。

我们要寻找的答案也就在这里面。

我们搞清楚了显示对象下面就来了解下这些显示对象是如何被addChild 到舞台的。

ObjectContainer3D 类中实现了一个 addChild 的函数。在这个函数里大部分代码都是在做对象的管理,关键一步是 child.scene = _scene;

ObjectContainer3D 只是做了赋值处理并没有真正意义上的把对象添加到场景上。Entity类重写了scene的set 函数。

override public function set scene(value : Scene3D) : void
  {
   if (value == _scene)
    return;

if (_scene)
    _scene.unregisterEntity(this);
   
   // callback to notify object has been spawned. Casts to please FDT
   if (value)
    value.registerEntity(this);

super.scene = value;
  }

重写的scene set 函数 调用了 registerEntity 函数 把当前对象最为参数传递给了scene3d.由scene3d调用了添加到Partition3D中了。

但是添加到 Partition3D 中的时候并不是直接的添加当前对象 而是 添加了 当前对象的 node对象。至于为什么我们后面再说。

先回过头来看看之前收集器进过Partition3D 的 traverse函数。

if (_updatesMade)
    updateEntities();

当有新的显示对象添加到了Partition3D中 Partition3D 将 _updatesMade自动设置为true了 这时候开始跟新显示对象以及该显示对象的子对象。

最后把所有要显示的对象的Node 都添加到了_rootNode中。然后开始 调用 acceptTraverser函数。前面说到了 Partition3D 中并不是直接的添加当前对象 而是 添加了 当前对象的 node对象。原因是Away3d 为了分离渲染和对象收集 把视锥剔除的逻辑在 node 中实现了。而对象本身是没有这个逻辑的。再进一步的debug 跟进发现进入了enterNode函数 开始计算视锥剔除。如果当前显示对象不在 视锥范围内 将不会被渲染。

  下面再补充一下Away3D在渲染的过程中会先检查对象是否被 visible=false;如果是false 将不会被渲染。很多人在实际开发中把TextureMaterial 中的 alpha 设置等于0;但实际上这个显示对象还是会被渲染的。

转载于:https://www.cnblogs.com/ch06src/p/3874405.html

Away3D 的实体收集器流程2相关推荐

  1. Away3D 的实体收集器Bug

    最近在改Away3D源码的时候遇到个很郁闷的问题,发现创建的Mesh 释放不掉. 分析源码发现 EntityListItemPool 类中逻辑Bug在getItem()函数中发现_poolSize 对 ...

  2. 直通BAT必考题系列:深入剖析JVM之G1收集器、及回收流程、与推荐用例

    金三银四马上到了,即将进入面试的高峰期.在BAT面试中,JVM基本都是必考的系列.你至少需要掌握JVM内存模型与JVM参数详细配置,JVM的4种垃圾回收算法.垃圾回收机制与总结,以及今天重点谈到的JV ...

  3. JVM---垃圾收集器(万字详解)

    垃圾收集器万字详解 垃圾回收器 垃圾收集器万字详解 前言 垃圾收集器说明与发展史 垃圾收集器简要说明 垃圾收集器发展史 垃圾收集器的分类 衡量垃圾收集器性能的指标 不同的垃圾收集器概述 7款经典的垃圾 ...

  4. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

    本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 ...

  5. Stream流与Lambda表达式(四) 自定义收集器

    一.自定义SetCustomCollector收集器 package com.java.design.Stream.CustomCollector;import java.util.*; import ...

  6. 请问生产成本收集器与标准成本评估有什么关联?

    一.在创建生产成本收集器之前,为什么要先创建标准成本估算? cost collector是用于Repetitive Manufacturing的,平时生产不开production order,等产成品 ...

  7. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

    文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...

  8. 【备忘录】Product cost collectors – 成本收集器

    以生产角度来划分: 流程制造 - Product Cost by Period 离散制造 - Product Cost by Period & Product Cost by Order 这里 ...

  9. SAP成本收集器两则

    成本收集器作为成本对象,主要应用于按期间进行成本核算的情况,在这种情况下会把产品创建为成本收集器,实际成本的收集和差异的结算全部按照成本收集器进行处理,财务的成本分析也针对成本收集器进行. 成本收集器 ...

  10. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

    本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看 ...

最新文章

  1. 短短的 RESTful API 设计规范
  2. 深度学习问题解决:Check failed: stream-parent()-GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogra
  3. 约数个数定理约数和定理
  4. GooglePerformanceTools--tcmalloc
  5. html计算天数,Javascript实现简易天数计算器
  6. Segment Routing 之 Data-Plane Control-Plane
  7. 百度文库Android、Iphone客户端——下载、阅读无需财富值积分
  8. 跟着Nature Communications学作图--渐变火山图
  9. 企业微信Windows版本调试
  10. Ajax XHR响应
  11. 工业通讯 | Profinet协议基础知识(三)
  12. matlab限幅滤波法,几种常用的滤波方法
  13. 《复杂》作者梅拉妮·米歇尔发文直指AI四大谬论,探究AI几度兴衰背后的根源...
  14. Python之复制的cookie参数处理成规整的参数值
  15. 线性代数基本定理(核空间与行空间)——The Fundamental Theorem of Linear Algebra
  16. 【汇编语言学习】汇编语言基础(一)
  17. 2019_ICML_Domain Agnostic Learning with Disentangled Representations
  18. Webug4.0 越权修改密码
  19. matlab矩阵画柱状三维,[原创]利用MATLAB绘制三维彩色柱状图
  20. [bzoj2534]Uva10829L-gap字符串

热门文章

  1. Linux学习笔记(五):less|more的命令使用
  2. 【医疗影像处理】使用GMM分割3D T1得到wm/gm/csf/background
  3. LeetCode.206. Reverse Linked List(反转有序链表)C++ and PYTHON
  4. 联想昭阳k29轴拆机步骤图_【tableau入门教程23】雷达图
  5. pythonp2p网络_python Socket网络编程实现C/S模式和P2P
  6. Harmony OS — ToastDialog提示对话框
  7. 7-3 高空坠球 (20 分)
  8. Android Button 实现渐变背景色、外边框颜色、圆角弧度、点击变色(完整源码)
  9. 神经网络-GoogleNet的发展,介绍,贡献
  10. 【Python3 爬虫】14_爬取淘宝上的手机图片