we
    Preparing search index...

    节点对象 1、导入导出需要实例化 2、readyForGPU需要实例化 3、_destroy需要实例化 4、updateSelf需要实例化

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    _animation: BaseAnimation[] = []

    动画对象 animation object
    1、有数据,则存在动画。 2、每个元素为一个动画对象。

    _animationGroup: undefined | AnimationGroup[]

    动画组对象 animation group object
    1、gltf等模型使用

    _children: NodeObject[] = []

    子节点 child nodes

    _directInWorldSpace: boolean = false

    直接在世界坐标下(不考虑层级树状关系),默认false

    _entity: undefined | BaseEntity

    实体对象 entity object

    _id: number

    节点ID node ID

    _isDestroy: boolean = false
    _jointsMat: undefined | ArrayBuffer

    骨架皮肤数据 ArrayBuffer of jointsMat 1、有数据,则存在骨骼动画。 2、工作流(每个NodeObject的逆绑定矩阵(世界逆绑定矩阵)=NodeObject的matrixWorld*inverseBindMatrix) A、获得matrixWorld, B、根据jointsMat,计算出每个joint的world matrix。

    _manager: undefined | ECSManager<RootGPU>
    _matrix: undefined | Float32Array<ArrayBufferLike>

    初始化矩阵

    _modelOrigin: undefined | BaseModel

    模型对象 model object
    如果此节点为模型实例化的根节点,则_modelOrigin为模型对象。

    _morphTarget: undefined | ArrayBuffer

    morphTarget 目标值数据 ArrayBuffer of morphTargetMat 1、有数据,则存在morphTarget动画。

    _name: string

    节点名称 node name

    _parent: undefined | NodeObject

    父节点 parent node

    _parentMatrixWorld: undefined | Float32Array<ArrayBufferLike>

    父空间的矩阵世界

    _particle: undefined | BaseParticle[]

    粒子对象 particle object

    _physicBody: undefined | PhysicBody

    物理体对象 physical body object

    _position: Float32Array = ...
    _positionOld: undefined | Float32Array<ArrayBufferLike>
    _quaternion: undefined | Float32Array<ArrayBufferLike>

    四元数

    _quaternionOld: undefined | Float32Array<ArrayBufferLike>
    _readyForGPU: boolean

    节点是否以及GPU准备好 node is ready of GPU

    _renderID: number

    renderID,use for pickup generate by stage

    _rodriguesRotation:
        | undefined
        | [
            Float32Array<ArrayBufferLike>,
            Float32Array<ArrayBufferLike>,
            number,
            boolean,
        ]

    任意点的任意轴的罗德里格斯旋转(考虑_position位置) 1、数组第一个元素为旋转点,第二个元素为旋转轴 2、数组第三个元素为旋转角度 3、数组第四个元素为是否在世界坐标下旋转

    _rodriguesRotationOld:
        | undefined
        | [
            Float32Array<ArrayBufferLike>,
            Float32Array<ArrayBufferLike>,
            number,
            boolean,
        ]
    _rotate: undefined | weVec4

    旋转:自身原点为中心( 不,考虑_position位置)

    _rotateOld: undefined | Float32Array<ArrayBufferLike>
    _scale: Float32Array = ...
    _scaleOld: undefined | Float32Array<ArrayBufferLike>
    _skinAnimation: SkinAnimation[] = []

    骨架动画数据 SkinAnimation object 目前只设计了一个蒙皮动画。同一节点上不存在多个蒙皮动画。

    _spaceType: E_BVHSpaceType = E_BVHSpaceType.none

    BVH空间类型

    _state: E_lifeState = E_lifeState.unstart
    _weightMixAnimation: undefined | WeightMixAnimation

    权重动画 weight animation object 1、有数据,则存在权重动画。权重动画存在于_animation[]中,这里是指针的概念。 2、工作流 update(),根据是否有权重动画,选择matrixWorld的更新方式。 3、如果存在多个权重动画组,这个标志为当前使用的权重动画组。

    device: GPUDevice
    enable: boolean = true
    inputValues: I_Update
    lastUpdaeTime: number = 0
    mapList: { key: any; map?: string; type: string }[] = []
    matrix: Float32Array = ...

    local matrix

    matrixWorld: Float32Array = ...

    当前entity在世界坐标(层级的到root),可以动态更新 1、在directInWorldSpace为true时,matrixWorld与matrix相同 2、在directInWorldSpace为false时,matrixWorld为matrix的累计乘积

    needUpdateLocalMatrix: boolean = true

    是否需要更新本地矩阵

    needUpdateuserDefine: boolean = false

    是否用户自定义更新函数

    needUpdateuserDefineAtEnd: boolean = false

    是否用户自定义更新函数,在update()函数最后调用

    needUpdateWorldMatrix: boolean = true

    是否需要更新全局矩阵

    resourcesGPU: ResourceManagerOfGPU
    scene: Scene
    stageID: number = 0

    stageID

    type: string

    节点类型 node type

    UUID: string

    节点UUID node UUID

    visible: boolean = true

    节点是否可见,如果不在root的树,则visible为false,但没有删除,还在资源池中 node visible

    worldPosition: Float32Array = ...

    在世界坐标下的位置(x,y,z)

    Accessors

    • get RodriguesAnyPoint(): | undefined
      | [
          Float32Array<ArrayBufferLike>,
          Float32Array<ArrayBufferLike>,
          number,
          boolean,
      ]

      Returns
          | undefined
          | [
              Float32Array<ArrayBufferLike>,
              Float32Array<ArrayBufferLike>,
              number,
              boolean,
          ]

    • set RodriguesAnyPoint(
          rodriguesRotation:
              | [
                  Float32Array<ArrayBufferLike>,
                  Float32Array<ArrayBufferLike>,
                  number,
                  boolean,
              ]
              | [weVec3, weVec3, number, boolean],
      ): void

      任意点的任意轴的罗德里格斯旋转 1、数组第一个元素为旋转点,第二个元素为旋转轴 2、数组第三个元素为旋转角度

      Parameters

      • rodriguesRotation:
            | [
                Float32Array<ArrayBufferLike>,
                Float32Array<ArrayBufferLike>,
                number,
                boolean,
            ]
            | [weVec3, weVec3, number, boolean]

      Returns void

    • set RodriguesZeroPoint(
          __namedParameters: [
              weVec3
              | Float32Array<ArrayBufferLike>,
              number,
              boolean,
          ],
      ): void

      旋转:以point(0,0,0)为原点为中心,考虑_position位置 1、数组第一个元素为旋转轴+旋转角度 2、数组第二个元素为是否在世界坐标下旋转

      Parameters

      • __namedParameters: [weVec3 | Float32Array<ArrayBufferLike>, number, boolean]

      Returns void

    Methods

    • 添加子节点

      1. 如果是子节点,直接添加到children中 A、camera B、light C、其他类型的NodeObject,直接添加到children中 model,particle 2、entity A. 如果是BaseEntity,通过新建参数, 并将entity附着到新建Node Object上。
        B. 如果是IV_Node,根据参数创建对应的Node Object; 如果存在entity,并将entity附着到NodeObject上。 C、将entity和node添加到entityManager中 3、如果不存在entity,将node添加到children中

      4、如果是Model,根据modelAttachValue创建对应的Node Instance

      Parameters

      Returns Promise<NodeObject>

      Promise

    • 附着entity到NodeObject上

      1. 如果NodeObject已经有entity,抛出错误
      2. 如果entity已经constructed,但没有init,则init entity
      3. 将entity添加到entityManager中

      Parameters

      Returns Promise<void>

    • 销毁节点 1、递归销毁所有子节点 2、需要entityManager中移除entity;entity的updateSelf()会更新instance 相关 3、需要注销动画 4、需要注销骨骼动画 5、需要注销动画组 6、需要注销粒子系统 7、需要注销BVH和物理引擎中的相关数据

      Returns void

    • remove child from this node 移除子节点

      Parameters

      • child: NodeObject

        子节点

      • onlyOne: boolean = true

        是否只移除一个子节点,默认:true 只删除单个节点,删除后,从children中移除 删除所有子节点,不从children中移除(防止for失效),最后由removeChildren()移除

      Returns boolean

      是否移除成功

    • 替换pos的位置(matrix的:12,13,14),其他的matrix数据不变, 将entity的位置变为POS,等价wgpu-matrix的mat4的translation,是替换,不是增加

      Parameters

      • pos: Float32Array

        :Vec3

      Returns void

    • 在现有matrix(原有的position)上增加pos的xyz, 将entity的矩阵应用POS的位置变换,是在原有矩阵上增加

      Parameters

      • pos: Float32Array

        :Vec3

      Returns void

    • 更新 1、判断是否需要更新(时间上) 2、调用super.update()更新, A、NodeSpace:更新空间属性 B、RootGPU:更新user call back,调用最终子类更新自身updateSelf() 3、更新NodeObject的属性 4、更新子节点

      Parameters

      • clock: Clock

        Clock 时钟

      • updateSelftFN: boolean = true

        是否调用自身的updateSelf(),默认=true 此参数可以方便子类重载时,决定调用的updateSelf()的时间顺序或是否调用updateSelft()

      • updateAtEndFN: boolean = true

      Returns boolean

    • 1、矩阵操作一般来说: CPU中:SRT(右乘),行向量列矩阵=行向量 GPU中: TRS(左乘),列矩阵列向量=列向量

      2、更新矩阵的顺序是先进行线性变换,再进行位置变换。其实是没有影响,线性工作在3x3矩阵,位置变换在[12,13,14],列优先。

      3、旋转部分,四元数优先,然后后轴旋转。 A、在模型gltf中,旋转使用四元数。

      Returns Float32Array

    • 更新世界矩阵, 递归乘以父节点的矩阵

      Parameters

      • Optional_parentMatrixWorld: Float32Array<ArrayBufferLike>

      Returns Float32Array

    • 更新世界位置 1、entity的worldPosition 是entity的position在世界坐标系下的位置 2、如果没有提供世界矩阵,默认使用entity的matrixWorld

      Parameters

      • Optional_matrixWorld: Float32Array<ArrayBufferLike>

        世界矩阵

      Returns Float32Array

      世界位置