ScenegraphLayer
The ScenegraphLayer renders a number of instances of a complete glTF scenegraph.
- JavaScript
- TypeScript
- React
import {Deck} from '@deck.gl/core';
import {ScenegraphLayer} from '@deck.gl/mesh-layers';
const layer = new ScenegraphLayer({
id: 'ScenegraphLayer',
data: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/bart-stations.json',
getPosition: d => d.coordinates,
getOrientation: d => [0, Math.random() * 180, 90],
scenegraph: 'https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/BoxAnimated/glTF-Binary/BoxAnimated.glb',
sizeScale: 500,
_animations: {
'*': {speed: 5}
},
_lighting: 'pbr',
pickable: true
});
new Deck({
initialViewState: {
longitude: -122.4,
latitude: 37.74,
zoom: 11
},
controller: true,
getTooltip: ({object}) => object && object.name,
layers: [layer]
});
import {Deck, PickingInfo} from '@deck.gl/core';
import {ScenegraphLayer} from '@deck.gl/mesh-layers';
type BartStation = {
name: string;
coordinates: [longitude: number, latitude: number];
};
const layer = new ScenegraphLayer<BartStation>({
id: 'ScenegraphLayer',
data: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/bart-stations.json',
getPosition: (d: BartStation) => d.coordinates,
getOrientation: (d: BartStation) => [0, Math.random() * 180, 90],
scenegraph: 'https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/BoxAnimated/glTF-Binary/BoxAnimated.glb',
sizeScale: 500,
_animations: {
'*': {speed: 5}
},
_lighting: 'pbr',
pickable: true
});
new Deck({
initialViewState: {
longitude: -122.4,
latitude: 37.74,
zoom: 11
},
controller: true,
getTooltip: ({object}: PickingInfo<BartStation>) => object && object.name,
layers: [layer]
});
import React from 'react';
import DeckGL from '@deck.gl/react';
import {ScenegraphLayer} from '@deck.gl/mesh-layers';
import type {PickingInfo} from '@deck.gl/core';
type BartStation = {
name: string;
coordinates: [longitude: number, latitude: number];
};
function App() {
const layer = new ScenegraphLayer<BartStation>({
id: 'ScenegraphLayer',
data: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/bart-stations.json',
getPosition: (d: BartStation) => d.coordinates,
getOrientation: (d: BartStation) => [0, Math.random() * 180, 90],
scenegraph: 'https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/BoxAnimated/glTF-Binary/BoxAnimated.glb',
sizeScale: 500,
_animations: {
'*': {speed: 5}
},
_lighting: 'pbr',
pickable: true
});
return <DeckGL
initialViewState={{
longitude: -122.4,
latitude: 37.74,
zoom: 11
}}
controller
getTooltip={({object}: PickingInfo<BartStation>) => object && object.name}
layers={[layer]}
/>;
}
Installation
To install the dependencies from NPM:
npm install deck.gl
# or
npm install @deck.gl/core @deck.gl/mesh-layers
import {ScenegraphLayer} from '@deck.gl/mesh-layers';
import type {ScenegraphLayerProps} from '@deck.gl/mesh-layers';
new ScenegraphLayer<DataT>(...props: ScenegraphLayerProps<DataT>[]);
To use pre-bundled scripts:
<script src="https://unpkg.com/deck.gl@^9.0.0/dist.min.js"></script>
<!-- or -->
<script src="https://unpkg.com/@deck.gl/core@^9.0.0/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/mesh-layers@^9.0.0/dist.min.js"></script>
new deck.ScenegraphLayer({});
Properties
Inherits from all Base Layer properties.
Mesh
scenegraph (string | object | Promise)
The geometry to render for each data object.
Can be a URL of an object. You need to provide the fetch function to load the object.
Can also be a luma.gl ScenegraphNode, or a Promise that resolves to one.
The layer calls delete() on scenegraph when a new one is provided or the layer is finalized.
loadOptions (object, optional)
On top of the default options, also accepts options for the following loaders:
- GLTFLoader if the
scenegraphprop is an URL
Render Options
sizeScale (number, optional)
- Default
1.
Multiplier to scale each geometry by.
_animations (object, optional)
- Default
undefined. (No animations are running).
An object used to configure animations playing. keys can be one of the following:
- number for index number
- name for animation name
*to affect all animations Each value is an object with:playing(boolean) defaulttruespeed(number) speed multiplier, default1.startTime(number) start time, default0. Animations are parsed automatically fromglTFfiles.
getScene (Function, optional)
- Default:
scenegraph => (scenegraph && scenegraph.scenes ? scenegraph.scenes[0] : scenegraph)
If you have multiple scenes you can select the scene you want to use. Only triggers when scenegraph property changes.
getAnimator (Function, optional)
- Default:
scenegraph => scenegraph && scenegraph.animator
Return null to disable animation or provide your custom animator.
Only triggers when scenegraph property changes.
_lighting (string, optional)
- Default:
flat
Experimental lighting support, can be:
flat: No light calculation. Works well with any textured object.pbrUsesglTFPBR model. Works well withglTFmodels.
Only read when scenegraph property changes. Uses global light configuration from deck.
_imageBasedLightingEnvironment (Function | GLTFEnvironment, optional)
- Default:
null
Experimental Can be:
- A
GLTFEnvironmentobject. - A function that takes
{gl, layer}as first argument and returns aGLTFEnvironment.
Only read when scenegraph property changes.
Data Accessors
getPosition (Accessor<Position>, optional)
- Default:
object => object.position
Method called to retrieve the center position for each object in the data stream.
getColor (Accessor<Color>, optional)
- Default:
[0, 0, 0, 255]
The rgba color is in the format of [r, g, b, [a]]. Each channel is a number between 0-255 and a is 255 if not supplied. Only used if texture is empty.
- If an array is provided, it is used as the color for all objects.
- If a function is provided, it is called on each object to retrieve its color.
getOrientation (Accessor<number[3]>, optional)
- Default:
[0, 0, 0]
Object orientation defined as a vec3 of Euler angles, [pitch, yaw, roll] in degrees. This will be composed with layer's modelMatrix.
- If an array is provided, it is used as the orientation for all objects.
- If a function is provided, it is called on each object to retrieve its orientation.
getScale (Accessor<number[3]>, optional)
- Default:
[1, 1, 1]
Scaling factor on the mesh along each axis.
- If an array is provided, it is used as the scale for all objects.
- If a function is provided, it is called on each object to retrieve its scale.
getTranslation (Accessor<number[3]>, optional)
- Default:
[0, 0, 0]
Translation of the mesh along each axis. Offset from the center position given by getPosition. [x, y, z] in meters.
- If an array is provided, it is used as the offset for all objects.
- If a function is provided, it is called on each object to retrieve its offset.
getTransformMatrix (Accessor<number[16]>, optional)
- Default:
null
Explicitly define a 4x4 column-major model matrix for the mesh. If provided, will override
getOrientation, getScale, getTranslation. This will be composed with layer's modelMatrix.
- If an array is provided, it is used as the transform matrix for all objects.
- If a function is provided, it is called on each object to retrieve its transform matrix.
sizeMinPixels (number, optional)
- Default:
0
The minimum size in pixels for one unit of the scene.
sizeMaxPixels (number, optional)
- Default:
Number.MAX_SAFE_INTEGER
The maximum size in pixels for one unit of the scene.