we
    Preparing search index...

    摄像机抽象类

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    _animation: BaseAnimation[] = []

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

    _animationGroup: undefined | AnimationGroup[]

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

    _back: Float32Array<ArrayBuffer> = ...
    _children: NodeObject[] = []

    子节点 child nodes

    _control: CamreaControl
    _directInWorldSpace: boolean = false

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

    _entity: undefined | BaseEntity

    实体对象 entity object

    _far: number = 1000.0
    _fixedSize: boolean = false

    是否固定大小,默认是false 1、如果固定大小,则相机的尺寸不跟随canvas 的resize而改变。(this.size是undefined) 2、用途: A、镜面反射等场景下,需要固定相机的尺寸,否则会导致反射效果异常 B、其他一些场景需要固定相机的尺寸的情况 3、如果固定大小,则相机的尺寸不能改变,GBuffer的尺寸也不能改变(也会单独处理)

    _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。

    _lookAt: Float32Array = ...

    相机的lookAt坐标

    _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

    _near: number = 0.10
    _parent: undefined | NodeObject

    父节点 parent node

    _parentMatrixWorld: undefined | Float32Array<ArrayBufferLike>

    父空间的矩阵世界

    _particle: undefined | BaseParticle[]

    粒子对象 particle object

    _physicBody: undefined | PhysicBody

    物理体对象 physical body object

    _position: Float32Array = ...
    _positionOfModelMatrix: 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

    _right: Float32Array<ArrayBuffer> = ...
    _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
    _up: Float32Array<ArrayBuffer> = ...
    _upDirection: Float32Array<ArrayBufferLike> = ...

    上方向

    _weightMixAnimation: undefined | WeightMixAnimation

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

    aspect: number
    backGroundColor: [number, number, number, number]

    背景颜色 无,则使用场景的背景色

    boundingBox: Box3
    boundingSphere: Sphere
    bufferOf_ST_SystemMVP: Float32Array = ...

    shader 中的systemMVP的arraybuffer struct st_system_mvp {
    model: mat4x4f, view: mat4x4f, projection: mat4x4f, cameraPosition: vec3f, reversedZ: u32, };

    device: GPUDevice
    direction: Float32Array

    归一化的方向 lookAt 的 vector

    enable: boolean = true
    inputValues: I_Update

    初始化参数

    isLookAtGlobal: boolean = true

    是否全局坐标系的lookAt

    lastUpdaeTime: number = 0
    manager: CameraManager
    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的累计乘积

    modelMatrix: Float32Array<ArrayBuffer> = ...

    model matrix

    MVP: Float32Array<ArrayBufferLike>[] = []

    MVP的Mat4的数组,[VP,view,projection] MVP中的M=V*P V=viewMatrix P=projectionMatrix

    needToneMapping: boolean = true

    是否进行色调映射,默认是true 1、在camera应用在反射或镜像等场景,不需要进行色调映射,否则会进行二次映射射,导致在主camera的最终颜色异常。

    needUpdateLocalMatrix: boolean = true

    是否需要更新本地矩阵

    needUpdateuserDefine: boolean = false

    是否用户自定义更新函数

    needUpdateuserDefineAtEnd: boolean = false

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

    needUpdateWorldMatrix: boolean = true

    是否需要更新全局矩阵

    premultipliedAlpha: boolean = false

    单独设置背景色的预乘, 初始化参数中: 1、无|false:使用系统的背景色和预乘 2、true;则需要设置背景颜色

    projectionMatrix: Float32Array

    projection Matrix

    resourcesGPU: ResourceManagerOfGPU
    scene: Scene
    size: undefined | { height: number; width: number }

    todo:20251011,需要一系列验证;另外,最终输出的时候也需要考虑尺寸,尤其是copy的情况

    相机管理器的大小 1、默认与场景大小相同 2、可以手动设置大小,有大小的camera,其尺寸不跟随canvas 的resize而改变。

    stageID: number = 0

    stageID

    systemUniformBuffersOfGPU: GPUBuffer

    GPUBuffer :系统的uniform buffer, 1、MVP 2、cameraPosition 3、reversedZ

    type: string

    节点类型 node type

    uniformBufferSize: number = ...

    4*4=matrix *4=byte *n=行数

    UUID: string

    节点UUID node UUID

    viewMatrix: Float32Array<ArrayBuffer> = ...

    view matrix

    viewport: I_viewport
    visible: boolean = true

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

    worldPosition: Float32Array = ...

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

    Accessors

    • get PositionOfModelMatrix(): Float32Array<ArrayBufferLike>

      Returns Float32Array<ArrayBufferLike>

    • set PositionOfModelMatrix(vec: Float32Array): void

      Parameters

      • vec: Float32Array

      Returns void

    • 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

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

      Returns void

    • 直接更新相机的位置和方向 1、手工更新Position和LookAt之后执行。 2、如果有控制器,需要更新Position和LookAt执行,否则控制器不会检查变化(从而无法更新位置和方向)。

      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

    • 更新 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

    • 更新camera的modelMatrix and viewMatrix 1、用途: A、更新_position 和worldPosition B、通过position,dir更新camera的modelMatrix and viewMatrix 更新this.MPV[](M,V,P),其中projectionMatrix不再整理更新

      • 2、调用
      • A、updateSelf()调用
      • B、onResize时有Manager的onResize()调用
      • C、控制器update调用
      • 3、position:
      •  A、position必须是camera的世界坐标系下 position
        
      •  B、如果是camera的local坐标系(控制器模式),需要显示增加isControlMode=true.然后转换为世界坐标。
        
      • 4、isControlMode:
      •  A、如果是控制器模式,需要将position转换为世界坐标。
        
      •  B、direction 和normalize 不使用,通过lookat的世界坐标,重新计算方向。若使用,或需要确保也是世界坐标系下的位置或方向
        

      Parameters

      • position: Float32Array

        :摄像机位置 *

      • direction: Float32Array

        :摄像机方向(归一化)||看向的位置(非归一化) *

      • normalize: boolean = false

        :摄像机方向是否归一化的 *

      • OptionalisControlMode: boolean

      Returns Float32Array<ArrayBufferLike>[]

      MVP的Mat4[]

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

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

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

      Returns Float32Array

    • 更新自身属性。 1、更新控制器或根据worldPosition更新属性 A、updateByPositionDirection B、updateByPositionYawPitch

      2、本fn在update()的updateMatrix()之后调用。 updateMatrix(): ->updateMatrixWorld() ->updateMatrix() ->updateWorldPosition() 所以,调用控制器更新数据之后,需要再次更新position数据: 包括 : _position:下一帧updateMatrix()使用; worldPosition:system中camera的世界坐标 PositionOfModelMatrix:shader 的uniform 使用 MVP中的modelMatrix

      Parameters

      Returns void

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

      Parameters

      • Optional_matrixWorld: Float32Array<ArrayBufferLike>

        世界矩阵

      Returns Float32Array

      世界位置