A special version of [page:Mesh] with multi draw batch rendering support. Use
[name] if you have to render a large number of objects with the same
material but with different world transformations. The usage of [name] will
help you to reduce the number of draw calls and thus improve the overall
rendering performance in your application.
If the [link:https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_multi_draw WEBGL_multi_draw extension] is
not supported then a less performant fallback is used.
const box = new THREE.BoxGeometry( 1, 1, 1 );
const sphere = new THREE.SphereGeometry( 1, 12, 12 );
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
// initialize and add geometries into the batched mesh
const batchedMesh = new BatchedMesh( 10, 5000, 10000, material );
const boxGeometryId = batchedMesh.addGeometry( box );
const sphereGeometryId = batchedMesh.addGeometry( sphere );
// create instances of those geometries
const boxInstancedId1 = batchedMesh.addInstance( boxGeometryId );
const boxInstancedId2 = batchedMesh.addInstance( boxGeometryId );
const sphereInstancedId1 = batchedMesh.addInstance( sphereGeometryId );
const sphereInstancedId2 = batchedMesh.addInstance( sphereGeometryId );
// position the geometries
batchedMesh.setMatrixAt( boxInstancedId1, boxMatrix1 );
batchedMesh.setMatrixAt( boxInstancedId2, boxMatrix2 );
batchedMesh.setMatrixAt( sphereInstancedId1, sphereMatrix1 );
batchedMesh.setMatrixAt( sphereInstancedId2, sphereMatrix2 );
scene.add( batchedMesh );
[example:webgl_mesh_batch WebGL / mesh / batch]
[page:Integer maxInstanceCount] - the max number of individual instances planned to be added and rendered.
[page:Integer maxVertexCount] - the max number of vertices to be used by all unique geometries.
[page:Integer maxIndexCount] - the max number of indices to be used by all unique geometries.
[page:Material material] - an instance of [page:Material]. Default is a new [page:MeshBasicMaterial].
See the base [page:Mesh] class for common properties.
This bounding box encloses all instances of the [name]. Can be calculated with [page:.computeBoundingBox](). Default is `null`.
This bounding sphere encloses all instances of the [name]. Can be calculated with [page:.computeBoundingSphere](). Default is `null`.
If true then the individual objects within the [name] are frustum culled. Default is `true`.
If true then the individual objects within the [name] are sorted to improve overdraw-related artifacts. If the material is marked as "transparent" objects are rendered back to front and if not then they are rendered front to back. Default is `true`.
The maximum number of individual instances that can be stored in the [name]. Read only.
Read-only flag to check if a given object is of type [name].
See the base [page:Mesh] class for common methods.
Computes the bounding box, updating [page:.boundingBox] attribute.
Bounding boxes aren't computed by default. They need to be explicitly
computed, otherwise they are `null`.
Computes the bounding sphere, updating [page:.boundingSphere]
attribute.
Bounding spheres aren't computed by default. They need to be explicitly
computed, otherwise they are `null`.
Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
Takes a sort a function that is run before render. The function takes a list of instances to sort and a camera. The objects in the list include a "z" field to perform a depth-ordered sort with.
[page:Integer instanceId]: The id of an instance to get the color of.
[page:Color target]: The target object to copy the color in to.
Get the color of the defined geometry.
[page:Integer instanceId]: The id of an instance to get the matrix of.
[page:Matrix4 target]: This 4x4 matrix will be set to the local transformation matrix of the defined instance.
Get the local transformation matrix of the defined instance.
[page:Integer instanceId]: The id of an instance to get the visibility state of.
Get whether the given instance is marked as "visible" or not.
[page:Integer geometryId]: The id of the geometry to get the range of.
[page:Object target]: Optional target object to copy the range in to.
Get the range representing the subset of triangles related to the attached geometry, indicating the starting offset and count, or `null` if invalid.
Return an object of the form:
{ start: Integer, count: Integer }
[page:Integer instanceId]: The id of an instance to get the geometryIndex of.
Get the geometryIndex of the defined instance.
[page:Integer instanceId]: The id of the instance to set the color of.
[page:Color color]: The color to set the instance to.
Sets the given color to the defined geometry instance.
[page:Integer instanceId]: The id of an instance to set the matrix of.
[page:Matrix4 matrix]: A 4x4 matrix representing the local transformation of a single instance.
Sets the given local transformation matrix to the defined instance.
[page:Integer instanceId]: The id of the instance to set the visibility of.
[page:Boolean visible]: A boolean value indicating the visibility state.
Sets the visibility of the instance at the given index.
[page:Integer instanceId]: The id of the instance to set the geometryIndex of.
[page:Integer geometryId]: The geometryIndex to be use by the instance.
Sets the geometryIndex of the instance at the given index.
[page:BufferGeometry geometry]: The geometry to add into the [name].
[page:Integer reservedVertexRange]: Optional parameter specifying the amount of vertex buffer space to reserve for the added geometry. This is necessary if it is planned to set a new geometry at this index at a later time that is larger than the original geometry. Defaults to the length of the given geometry vertex buffer.
[page:Integer reservedIndexRange]: Optional parameter specifying the amount of index buffer space to reserve for the added geometry. This is necessary if it is planned to set a new geometry at this index at a later time that is larger than the original geometry. Defaults to the length of the given geometry index buffer.
Adds the given geometry to the [name] and returns the associated geometry id referring to it to be used in other functions.
[page:Integer geometryId]: The id of a previously added geometry via "addGeometry" to add into the [name] to render.
Adds a new instance to the [name] using the geometry of the given geometryId and returns a new id referring to the new instance to be used by other functions.
[page:Integer instanceId]: The id of an instance to remove from the [name] that was previously added via "addInstance".
Removes an existing instance from the [name] using the given instanceId.
[page:Integer geometryId]: Which geometry id to replace with this geometry.
[page:BufferGeometry geometry]: The geometry to substitute at the given geometry id.
Replaces the geometry at `geometryId` with the provided geometry. Throws an error if there is not enough space reserved for geometry. Calling this will change all instances that are rendering that geometry.
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]