粗略看完了geometry,那么接下来看geometry的上一层,objects吧,一般是geometry和material两者组成了一个object,然后添加到场景中。Objects的结构还是比较清楚的,类似geometry,所以接下来就看objects吧。
renderer这个最硬核的东西,留到之后好好看!


这么多文件,这么多类型的object,看文件结构是平行关系,不过还是有点区别的。

  • Group:相当于一个虚拟objet,用于组合多个object
  • Mesh:最基础也是最常使用的,也就是将geometry和material组合起来,用来表示使用最广泛的三角面片mesh
  • InstancedMesh:如其名称,是Mesh的instanced版本
  • Bone,Skeleton,SkinnedMesh是一系列的
  • Line,Line Loop,LineGeometry,这三个一系列,是为了表示line的对象,跟WebGL对应
  • LOD:特殊对象,Level of Detail,还是很高级的,看demo的话很酷,实现也要好好看下
  • Points:区别于Mesh,LineXXX的第三种普通对象
  • Sprite:特殊对象,展示始终面向屏幕的对象,在许多场合还是很必要的

没了~
所以还是可以的,逐个看起来~~


其中许多的对象,其实只是为了标识,或者说一个name alias,功能上跟Object3D差不多,比如:

  • Group

Mesh

对于具体的Mesh,接收了geometry和material的参数
除此之外,有关于morph的两个属性以及相关的操作:

  1. this.morphTargetInfluences = [];
  2. this.morphTargetDictionary = {};

对此,完全摸不着头脑,因为文档中也没有具体的体现,之后看到使用的时候再说吧,TODO

除此之外,是对Object3D中的raycast的实现

raycast

首先是,判断boundingSphere和boundingBox是否相交,这个一个快速拒绝的步骤
这里有个小细节,boundingSphere是在世界坐标系下判断,boundingBox在物体坐标系下判断,个人感觉有些冗余,不够优雅

checkIntersection

判断一个三角面是否与array相交

啊啊啊啊啊,跟material相关的好多,感觉,可能还是看完geometry之后看material比较好,之前可能自己都忽略了材质的重要性

大大的TODO