An efficient representation of mesh, line, or point geometry. Includes vertex positions, face indices, normals, colors, UVs, and custom attributes within buffers, reducing the cost of passing all this data to the GPU.
To read and edit data in BufferGeometry attributes, see BufferAttribute documentation.
For a less efficient but easier-to-use representation of geometry, see Geometry.
const geometry = new v3d.BufferGeometry();
// create a simple square shape. We duplicate the top left and bottom right
// vertices because each vertex needs to appear once per triangle.
const vertices = new Float32Array([
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
1.0, 1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0,
-1.0, -1.0, 1.0
]);
// itemSize = 3 because there are 3 values (components) per vertex
geometry.setAttribute('position', new v3d.BufferAttribute(vertices, 3));
const material = new v3d.MeshBasicMaterial({ color: 0xff0000 });
const mesh = new v3d.Mesh(geometry, material);
Mesh with non-indexed faces
Mesh with indexed faces
Lines
Indexed Lines
Particles
Raw Shaders
This hashmap has as id the name of the attribute to be set and as value the buffer to set it to. Rather than accessing this property directly, use .setAttribute and .getAttribute to access attributes of this geometry.
Bounding box for the bufferGeometry, which can be calculated with .computeBoundingBox(). Default is null.
Bounding sphere for the bufferGeometry, which can be calculated with .computeBoundingSphere(). Default is null.
Determines the part of the geometry to render. This should not
be set directly, instead use .setDrawRange. Default is
{ start: 0, count: Infinity }
For non-indexed BufferGeometry, count is the number of vertices to render.
For indexed BufferGeometry, count is the number of indices to render.
Split the geometry into groups, each of which will be rendered in a separate WebGL draw call.
This allows an array of materials to be used with the bufferGeometry.
Each group is an object of the form:
{ start: Integer, count: Integer, materialIndex: Integer }
where start specifies the first element in this draw call – the first vertex for non-indexed geometry,
otherwise the first triangle index. Count specifies how many vertices (or indices) are included, and
materialIndex specifies the material array index to use.
Use .addGroup to add groups, rather than modifying this array directly.
Unique number for this bufferGeometry instance.
Allows for vertices to be re-used across multiple triangles; this is called using "indexed triangles" and works much the same as it does in Geometry: each triangle is associated with the indices of three vertices. This attribute therefore stores the index of each vertex for each triangular face. If this attribute is not set, the renderer assumes that each three contiguous positions represent a single triangle. Default is null.
Hashmap of BufferAttributes holding details of the geometry's morphTargets.
Used to control the morph target behavior; when set to true, the morph target data is treated as relative offsets, rather than as absolute positions/normals. Default is false.
Optional name for this bufferGeometry instance. Default is an empty string.
An object that can be used to store custom data about the BufferGeometry. It should not hold references to functions as these will not be cloned.
UUID of this object instance. This gets automatically assigned and shouldn't be edited.
Sets an attribute to this geometry. Use this rather than the attributes property, because an internal hashmap of .attributes is maintained to speed up iterating over attributes.
Adds a group to this geometry; see the groups property for details.
Bakes matrix transform directly into vertex coordinates.
Center the geometry based on the bounding box.
Creates a clone of this BufferGeometry.
Copies another BufferGeometry to this BufferGeometry.
Clears all groups.
Computes bounding box of the geometry, updating .boundingBox attribute.
Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are null.
Computes bounding sphere of the geometry, updating .boundingSphere attribute.
Bounding spheres aren't computed by default. They need to be explicitly computed, otherwise they are null.
Computes vertex normals by averaging face normals.
Disposes the object from memory.
You need to call this when you want the BufferGeometry removed while the application is running.
Populates this BufferGeometry with data from a DirectGeometry object containing faces. Not implemented for a line geometry.
Note: DirectGeometry is mainly used as an intermediary object for converting between Geometry
and BufferGeometry.
Populates this BufferGeometry with data from a Geometry object containing faces. Not implemented for a line geometry.
Returns the attribute with the specified name.
Return the .index buffer.
Returns true if the attribute with the specified name exists.
vector - A world vector to look at.
Rotates the geometry to face a point in space. This is typically done as a one time operation, and not during a loop.
Use Object3D.lookAt for typical real-time mesh usage.
Merge in another BufferGeometry with an optional offset of where to start merging in.
Every normal vector in a geometry will have a magnitude of 1. This will correct lighting on the geometry surfaces.
Deletes the attribute with the specified name.
Rotate the geometry about the X axis. This is typically done as a one time operation, and not during a loop. Use Object3D.rotation for typical real-time mesh rotation.
Rotate the geometry about the Y axis. This is typically done as a one time operation, and not during a loop. Use Object3D.rotation for typical real-time mesh rotation.
Rotate the geometry about the Z axis. This is typically done as a one time operation, and not during a loop. Use Object3D.rotation for typical real-time mesh rotation.
Scale the geometry data. This is typically done as a one time operation, and not during a loop. Use Object3D.scale for typical real-time mesh scaling.
Set the .index buffer.
Set the .drawRange property. For non-indexed BufferGeometry, count is the number of vertices to render. For indexed BufferGeometry, count is the number of indices to render.
Sets the attributes for this BufferGeometry from an Object3D.
Sets the attributes for this BufferGeometry from an array of points.
Convert the buffer geometry to Verge3D JSON Object/Scene format.
Return a non-index version of an indexed BufferGeometry.
Translate the geometry. This is typically done as a one time operation, and not during a loop. Use Object3D.position for typical real-time mesh translation.
For more info on how to obtain the source code of this module see this page.