we
    Preparing search index...

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    _animationType: Set<E_AnimationType> = ...

    动画类型 :Set<E_AnimationType>

    _cullMode: GPUCullMode = "back"

    剔除模式 默认=back

    _drawModeTemplate: I_drawModeIndexed | I_drawMode

    drawMode 模板,保存drawMode的模板,后续实例化时使用

    _dynamicAttribute: boolean = false

    是否支持动态attribute数据

    _entityCommonByteSize: number = 32

    uniform : st_entity 数据

    _geometry: undefined | BaseGeometry

    mesh的geometry内部对象,获取attribute使用

    _id: number

    节点ID node ID

    _insideInstanceMatrix: Float32Array<ArrayBufferLike>[] = []

    inside实例化矩阵数组,每个内部实例一个矩阵

    _instanceInfoByteSize: number = 16

    storage array 每个instance的st_instance_info size 1、每个instance的结构大小 ,st_instance_info 大小=16 2、instance数量(M=1,动态,程序中)

    _instanceMorphTargetByteSize: number = ...

    storage array(初始化默认一个矩阵,以适配没有morph target的通用情况;) 1、默认大小:44=16 byte(即4个position,一般默认是4个,也可以多。webgpu默认attribute:16个,vertex buffer:8个) 2、size计算= M*(N4) A、instance 数量(M=1,动态,程序中) B、一个顶点的morphTarget数量N ;一般情况为4个,即大小=Nf32Size=4*4=16 byte

    _instanceWorldMatrixByteSize: number = ...

    storage array(初始化默认一个矩阵,即一个instance) 每个instance的world matrix大小(固定的) 1、matrix以16byte一个单位计算,16 byte 2、instance数量 3、2个矩阵,分别是world矩阵和逆矩阵

    _isDestroy: boolean = false
    _manager: undefined | ECSManager<RootGPU>
    _material: BaseMaterial

    mesh的material内部对象,获取uniform、bindingroup字符串、SHT等使用

    _matrix: undefined | Float32Array<ArrayBufferLike>

    初始化矩阵

    _morphTargetWeightsCount: number = 0

    变形目标数量 1、由checkMorphTargetCount() 检查并设置 2、checkMorphTargetCount()由class MorphTargetAnimation 调用

    _name: string

    节点名称 node name

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

    四元数

    _quaternionOld: undefined | Float32Array<ArrayBufferLike>
    _readyForGPU: boolean

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

    _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>
    _shadow: I_optionShadowEntity = ...
    _state: E_lifeState = E_lifeState.unstart
    _transparent: boolean = false

    透明属性 , 默认=false, 通过后续材质或函数设置

    _uv: weVec2 = ...

    uv动画使用

    _vertexAndIndexBuffersUpdated: boolean = false

    动态更新顶点数据和索引数据的标志位 1、更新后,this.getDrawModeTemplate()需要重新生成drawMode数据,因为长度可以变化了

    _visibleInstanceIDBundle: { count: number; firstInstance: number }[] = []

    可见的实例ID数组,每帧更新

    attributes: I_EntityAttributes = ...

    顶点数据

    bindGroup: GPUBindGroup

    VS bind group

    bindGroupLayout: GPUBindGroupLayout

    VS bind group layout

    boundingBox: undefined | Box3
    boundingSphere: undefined | Sphere
    bufferPointers: {
        instances: undefined | I_pointerStruct;
        morphMatrix: undefined | I_pointerStruct;
        uniformCommonEntity: undefined | I_pointerStruct;
        wolrdMatrix: undefined | I_pointerStruct;
    } = ...

    DrawCommand 生成器

    deferColor: boolean

    这里指的是颜色前向,光影延迟

    deferRenderColor: boolean
    deferRenderDepth: boolean
    device: GPUDevice
    enable: boolean = true
    entity_id: Uint32Array

    for shader

    entityManager: EntityManager
    flagInstanceArrayBufferReNew: boolean = false

    实例化数组最后重新的时间 ,有stride(256byte)存在,外部实例化数量改变时,可能不需要renew

    flagOutsideInstanceCountChange: boolean = false

    是否外部实例化数量改变 ,只标记是否有数量变化

    inputValues: IV_BaseEntity
    instance: I_entityInstance = ...

    内部实例化数量,默认为1

    实体类型

    lastUpdaeTime: number = 0
    locationInterpolate: undefined | I_locationInterpolate

    顶点属性的插值模式

    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的累计乘积

    MSAA: boolean = false

    MSAA

    needUpdateLocalMatrix: boolean = true

    是否需要更新本地矩阵

    needUpdateuserDefine: boolean = false

    是否用户自定义更新函数

    needUpdateuserDefineAtEnd: boolean = false

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

    oitTag: undefined | string

    OIT的tag

    outSideInstance: NodeObject[] = []

    外部实例化数组 说明: 1、由EntityManager.add()指向赋值:entity.outSideInstance = instances; 2、checkStorageBuffer() 检查是否需要更新storage buffer 3、updateSelf() 中调用, this.updateUniformCommonEntity(clock); //更新vs、fs的uniform this.updateInstanceBuffer(); //更新instance buffer this.updateWorldMatrixBuffer(clock); //更新world matrix buffer this.updateMorphtTargetBuffer(); //更新morphtarget buffer this.updateJointMatrixBuffer(); //更新joint matrix buffer 进行与instance相关的更新 4、getInstancesCount() 获取实例化数量:内外部

    outsideInstanceCountOfDefaultStride: number = 4

    外部实例化数组stride数量,默认为4 1、storage和uniform的offset stride都是256byte 2、为什么是4:简单以矩阵为测算依据(每个矩阵16byte,4x4矩阵常用,而且是常用中最大的类型),64*4=256byte,所以4个4x4的矩阵为一个stride。

    outSideInstanceCountPreFrame: number = 0

    上一帧外部实例化数量

    renderPassArray: {
        forward: DrawCommand[];
        MSAA: DrawCommand[];
        shadowmapOpaque: DrawCommand[];
        shadowmapTransparent: DrawCommand[];
        sprite: DrawCommand[];
        transparent: DrawCommand[];
    } = ...
    resourcesGPU: ResourceManagerOfGPU
    scene: Scene
    stage_id: Uint32Array

    for shader

    storageBufferList: { byteSize: number; name: string }[] = ...

    storage buffer 列表 1、instances 实例化数组 2、wolrdMatrix 世界矩阵数组

    storageOffsetStrideSize: number = 256

    storage buffer 偏移量最小值,默认为256byte

    type: string

    节点类型 node type

    uniformOffsetStrideSize: number = 256

    uniform buffer 偏移量最小值,默认为256byte

    UUID: string

    节点UUID node UUID

    vertexPointers: {
        [key: string]: { gpuBuffer?: any; pointer?: I_pointerStruct };
    } = {}

    顶点buffer 列表:有DCG生成的顶点buffer和index buffer 1、有DCG写入

    visible: boolean = true
    vsOffset: number = 0

    顶点偏移量,材质编辑器适用,目前(20260103)未使用

    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

    • 检查相关storage buffer的状态,根据instance数量进行创建、更新或保持。

      1、preUpdate 中调用

      2、目前uniform 和 storage的offset 最小值为256byte

      Parameters

      • bufferList: { byteSize: number; name: string }[]

        buffer list

      Returns void

    • 获取bind group 的binding,固定的与shader中的顺序对应 说明: 1、bufferGPU使用的对象,没有使用Map。原因是需要有通用的占位Storage buffer,直接指向对象可以共享占位GPUBuffer。 2、对象不能保障顺序,所以需要一个单独绑定的顺序。

      Parameters

      • name: string

      Returns number

      number

    • 更新顶点数据, 1、如果是数组形式,直接更新 2、如果是I_vsAttribute,更新data
      3、其他暂时不支持,没有必要

      Parameters

      • name: string

        顶点数据的名称

      • data: number[]

        顶点数据

      • Optionaloption: { stride?: number; type?: "uint32" | "float32" | "int32" }

        顶点数据的类型和步长

      Returns void

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

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

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

      Returns Float32Array

    • 更新entity的自定义属性 1、更新entity的uniform 通用 2、更新entity的instance buffer 3、更新entity的world matrix buffer 4、更新entity的morphtarget buffer 5、更新entity的joint matrix buffer 6、检查是否有新摄像机,有进行更新 7、检查是否有新光源,有进行更新 8、DCG的uniform更新

      Parameters

      Returns Promise<void>