gpu-curtains
    Preparing search index...

    Create a 3D Mesh.

    A 3D Mesh is a basically a ProjectedObject3D with a Geometry and a RenderMaterial.

    You need to pass at least a valid Geometry as parameter.
    If no shaders are provided, it will use the normals colors as default shading.

    The shaders are automatically patched with the input bind groups and bindings defined in your parameters object, as well as some default attributes and uniforms (see RenderPipelineEntry).

    If one or all shaders are missing, the library will use default ones.

    struct VSOutput {
    @builtin(position) position: vec4f,
    @location(0) uv: vec2f,
    @location(1) normal: vec3f,
    @location(2) worldPosition: vec3f,
    @location(3) viewDirection: vec3f,
    };

    @vertex fn main(
    attributes: Attributes,
    ) -> VSOutput {
    var vsOutput: VSOutput;

    vsOutput.position = getOutputPosition(attributes.position);
    vsOutput.uv = attributes.uv;
    vsOutput.normal = getWorldNormal(attributes.normal);
    vsOutput.worldPosition = getWorldPosition(attributes.position).xyz;
    vsOutput.viewDirection = camera.position - vsOutput.worldPosition;

    return vsOutput;
    }
    struct VSOutput {
    @builtin(position) position: vec4f,
    @location(0) uv: vec2f,
    @location(1) normal: vec3f,
    };

    @fragment fn main(fsInput: VSOutput) -> @location(0) vec4f {
    // normals
    return vec4(normalize(fsInput.normal) * 0.5 + 0.5, 1.0);
    }
    // set our main GPUCurtains instance
    const gpuCurtains = new GPUCurtains({
    container: '#canvas' // selector of our WebGPU canvas container
    })

    // set the GPU device
    // note this is asynchronous
    await gpuCurtains.setDevice()

    // create a mesh with a box geometry
    // will use the normals colors as default shading
    const mesh = new Mesh(gpuCurtains, {
    label: 'My mesh',
    geometry: new BoxGeometry(),
    })

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    type: string

    The type of the MeshBaseClass

    uuid: string

    The universal unique id of the MeshBaseClass

    index: number

    Index of this MeshBaseClass, i.e. creation order

    material: RenderMaterial

    Geometry used by this MeshBaseClass

    outputTarget: RenderTarget

    RenderTarget to render this Mesh to instead of the canvas context, if any.

    additionalOutputTargets?: RenderTarget[]

    Additional output RenderTarget onto which render this Mesh, besides the main outputTarget or screen. Useful for some effects that might need to render the same Mesh twice or more. Beware tho that the Mesh pipeline has to exactly fit the provided RenderTarget render passes descriptors as no checks will be performed here.

    renderBundle: RenderBundle

    RenderBundle used to render this Mesh, if any.

    renderOrder: number

    Controls the order in which this MeshBaseClass should be rendered by our Scene

    _transparent: boolean

    Whether this MeshBaseClass should be treated as transparent. Impacts the render pipeline blend properties

    _ready: boolean

    Flag indicating whether this MeshBaseClass is ready to be drawn

    userData: Record<string, unknown>

    Empty object to store any additional data or custom properties into your Mesh.

    _onReadyCallback: () => void

    function assigned to the onReady callback

    _onBeforeRenderCallback: () => void

    function assigned to the onBeforeRender callback

    _onRenderCallback: () => void

    function assigned to the onRender callback

    _onAfterRenderCallback: () => void

    function assigned to the onAfterRender callback

    _onAfterResizeCallback: () => void

    function assigned to the onAfterResize callback

    onReady: (callback: () => void) => ProjectedMeshBaseClass | MeshBaseClass

    Callback to execute when a Mesh is ready - i.e. its material and geometry are ready.

    Type Declaration

    onBeforeRender: (callback: () => void) => ProjectedMeshBaseClass | MeshBaseClass

    Callback to execute before updating the Scene matrix stack. This means it is called early and allows to update transformations values before actually setting the Mesh matrices (if any). This also means it won't be called if the Mesh has not been added to the Scene. The callback won't be called if the Renderer is not ready or the Mesh itself is neither ready nor visible.

    Type Declaration

    onRender: (callback: () => void) => ProjectedMeshBaseClass | MeshBaseClass

    Callback to execute right before actually rendering the Mesh. Useful to update uniforms for example. The callback won't be called if the Renderer is not ready or the Mesh itself is neither ready nor visible.

    Type Declaration

    onAfterRender: (callback: () => void) => ProjectedMeshBaseClass | MeshBaseClass

    Callback to execute just after a Mesh has been rendered. The callback won't be called if the Renderer is not ready or the Mesh itself is neither ready nor visible.

    Type Declaration

    onAfterResize: (callback: () => void) => ProjectedMeshBaseClass | MeshBaseClass

    Callback to execute just after a Mesh has been resized.

    Type Declaration

    renderer: CameraRenderer

    The CameraRenderer used

    domFrustum: DOMFrustum

    The ProjectedMesh DOMFrustum class object

    frustumCulling: FrustumCullingCheck

    Frustum culling check to use. Accepts OBB, sphere or a boolean. Default to OBB. When set to true, OBB is used.

    DOMFrustumMargins: RectCoords

    Margins (in pixels) to applied to the DOM Frustum to determine if this ProjectedMesh should be frustum culled or not

    Options used to create this ProjectedMeshBaseClass

    _onReEnterViewCallback: () => void

    function assigned to the onReEnterView callback

    _onLeaveViewCallback: () => void

    function assigned to the onLeaveView callback

    onReEnterView: (callback: () => void) => ProjectedMeshBaseClass

    Callback to execute when a Mesh is reentering the view frustum.

    Type Declaration

    onLeaveView: (callback: () => void) => ProjectedMeshBaseClass

    Callback to execute when a Mesh is leaving the view frustum.

    Type Declaration

    transforms: Object3DTransforms
    up: Vec3

    Vec3 used by the lookAt method, to determine the orientation of the result. Default to new Vec3(0, 1, 0).

    actualPosition: Vec3

    Vec3 holding the actual position of this Object3D from its worldMatrix.

    children: Object3D[]

    Children Object3D in the scene graph, used to compute their own worldMatrix.

    object3DIndex: number

    Index (order of creation) of this Object3D. Used in the parent / children relation.

    matricesNeedUpdate: boolean

    Whether at least one of this Object3D matrix needs an update.

    camera: Camera

    Camera object used to compute model view and model view projection matrices

    Accessors

    • get clipSpaceBoundingSphere(): { center: Vec3; radius: number }

      Get the geometry bounding sphere in clip space.

      Returns { center: Vec3; radius: number }

      • center: Vec3

        Center of the bounding sphere.

      • radius: number

        Radius of the bounding sphere.

    • get parentVisibility(): boolean

      Get whether all this Object3D parents are visible or not. Should not be used directly.

      Returns boolean

    • set parentVisibility(value: boolean): void

      Set to false if at least one of this Object3D parent is not visible, true otherwise. Should not be used directly.

      Parameters

      • value: boolean

        New parent visibility value.

      Returns void

    Methods

    • Add a Mesh to the renderer and the Scene

      Parameters

      • OptionaladdToRenderer: boolean

      Returns void

    • Remove a Mesh from the renderer and the Scene

      Parameters

      • OptionalremoveFromRenderer: boolean

      Returns void

    • Called when the device has been lost to prepare everything for restoration. Basically set all the GPUBuffer to null so they will be reset next time we try to draw the Mesh

      Returns void

    • Set our Mesh geometry: create buffers and add attributes to material

      Returns void

    • Set Mesh material attributes

      Returns void

    • Assign or remove a RenderTarget to this Mesh Since this manipulates the Scene stacks, it can be used to remove a RenderTarget as well.

      Parameters

      • outputTarget: RenderTarget

        the RenderTarget to assign or null if we want to remove the current RenderTarget

      Returns void

    • Set our model matrix shouldUpdate flag to true (tell it to update)

      Returns void

    • Apply a look at rotation based on a target, a position and our up vectors.

      Parameters

      • target: Vec3

        Vec3 target to look at.

      • position: Vec3

        Vec3 position from which to look at.

      Returns void

    • Update our model matrix.

      Parameters

      • updateParents: boolean = false

        Whether to update the parent worldMatrix beforehand. Default to false.

      • updateChildren: boolean = true

        Whether to update the children worldMatrix afterward. Default to true.

      Returns void

    • Check whether at least one of the matrix should be updated

      Returns void

    • Check at each render whether we should update our matrices, and update them if needed

      Returns void

    • Tell our projection matrix stack to update

      Returns void

    • Set our projection matrices shouldUpdate flags to true (tell them to update)

      Returns void

    • When the world matrix update, tell our projection matrix to update as well

      Returns void