# [name]

Base class for geometries.
A geometry holds all data necessary to describe a 3D model.

## Example

`var geometry = new THREE.Geometry(); geometry.vertices.push( new THREE.Vector3( -10, 10, 0 ), new THREE.Vector3( -10, -10, 0 ), new THREE.Vector3( 10, -10, 0 ) ); geometry.faces.push( new THREE.Face3( 0, 1, 2 ) ); geometry.computeBoundingSphere();`

## Constructor

### [name]()

The constructor takes no arguments.

## Properties

### [property:Integer id]

Unique number for this geometry instance.

### [property:String name]

Name for this geometry. Default is an empty string.

### [property:Array vertices]

Array of [page:Vector3 vertices].
The array of vertices holds every position of points in the model.
To signal an update in this array, [page:Geometry Geometry.verticesNeedUpdate] needs to be set to true.

### [property:Array colors]

Array of vertex [page:Color colors], matching number and order of vertices.
Used in [page:Points] and [page:Line].
[page:Mesh Meshes] use per-face-use-of-vertex colors embedded directly in faces.
To signal an update in this array, [page:Geometry Geometry.colorsNeedUpdate] needs to be set to true.

### [property:Array faces]

Array of [page:Face3 triangles].
The array of faces describe how each vertex in the model is connected with each other.
To signal an update in this array, [page:Geometry Geometry.elementsNeedUpdate] needs to be set to true.

### [property:Array faceVertexUvs]

Array of face [page:UV] layers.
Each UV layer is an array of [page:UV]s matching the order and number of vertices in faces.
To signal an update in this array, [page:Geometry Geometry.uvsNeedUpdate] needs to be set to true.

### [property:Array morphTargets]

Array of morph targets. Each morph target is a Javascript object: `{ name: "targetName", vertices: [ new THREE.Vector3(), ... ] }` Morph vertices match number and order of primary vertices.

### [property:Array morphNormals]

Array of morph normals. Morph normals have similar structure as morph targets, each normal set is a Javascript object: `morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] }`

### [property:Array skinWeights]

Array of [page:Vector4 Vector4s] representing the skinning weights as used in a [page:SkinnedMesh], The weights match the number and order of vertices in the geometry. The weighted values are typically between the values of 0 and 1 and affect the amount that the individuals bones affect a given vertex.

### [property:Array skinIndices]

Array of [page:Vector4 Vector4s] representing the indices of individual bones in the [page:Skeleton.bones] array, The indices match the number and order of vertices in the geometry. `// e.g. geometry.skinIndices[15] = new THREE.Vector4( 0, 5, 9, 0 ); geometry.skinWeights[15] = new THREE.Vector4( 0.2, 0.5, 0.3, 0 ); // corresponds with the following vertex geometry.vertices[15]; // these bones will be used like so: skeleton.bones[0]; // weight of 0.2 skeleton.bones[5]; // weight of 0.5 skeleton.bones[9]; // weight of 0.3 skeleton.bones[0]; // weight of 0`

### [property:Object boundingBox]

Bounding box. `{ min: new THREE.Vector3(), max: new THREE.Vector3() }`

### [property:Object boundingSphere]

Bounding sphere. `{ radius: float }`

### [property:Boolean dynamic]

Set to *true* if attribute buffers will need to change in runtime (using "dirty" flags).
Unless set to true internal typed arrays corresponding to buffers will be deleted once sent to GPU.
Defaults to true.

### [property:Boolean verticesNeedUpdate]

Set to *true* if the vertices array has been updated.

### [property:Boolean elementsNeedUpdate]

Set to *true* if the faces array has been updated.

### [property:Boolean uvsNeedUpdate]

Set to *true* if the uvs array has been updated.

### [property:Boolean normalsNeedUpdate]

Set to *true* if the normals array has been updated.

### [property:Boolean colorsNeedUpdate]

Set to *true* if the colors array has been updated.

### [property:Boolean lineDistancesNeedUpdate]

Set to *true* if the linedistances array has been updated.

### [property:array lineDistances]

An array containing distances between vertices for Line geometries. This is required for LinePieces/LineDashedMaterial to render correctly. Line distances can also be generated with computeLineDistances.

## Methods

### [page:EventDispatcher EventDispatcher] methods are available on this class.

### [method:null applyMatrix]( [page:Matrix4 matrix] )

Bakes matrix transform directly into vertex coordinates.

### [method:null center] ()

Center the geometry based on the bounding box.

### [method:Geometry rotateX] ( [page:Float radians] )

Rotate the geometry about the X axis. This is typically done as a one time operation, and not during a loop Use [page:Object3D.rotation] for typical real-time mesh rotation.

### [method:Geometry rotateY] ( [page:Float radians] )

Rotate the geometry about the Y axis. This is typically done as a one time operation, and not during a loop Use [page:Object3D.rotation] for typical real-time mesh rotation.

### [method:Geometry rotateZ] ( [page:Float radians] )

Rotate the geometry about the Z axis. This is typically done as a one time operation, and not during a loop Use [page:Object3D.rotation] for typical real-time mesh rotation.

### [method:Geometry translate] ( [page:Float x], [page:Float y], [page:Float z] )

Translate the geometry. This is typically done as a one time operation, and not during a loop Use [page:Object3D.position] for typical real-time mesh translation.

### [method:Geometry scale] ( [page:Float x], [page:Float y], [page:Float z] )

Scale the geometry data. This is typically done as a one time operation, and not during a loop Use [page:Object3D.scale] for typical real-time mesh scaling.

### [method:Geometry lookAt] ( [page:Vector3 vector] )

vector - A world vector to look at.
Rotates the geometry to face point in space. This is typically done as a one time operation, and not during a loop Use [page:Object3D.lookAt] for typical real-time mesh usage.

### [method:null computeFaceNormals]()

Computes face normals.

### [method:null computeVertexNormals]()

Computes vertex normals by averaging face normals.
Face normals must be existing / computed beforehand.

### [method:null computeMorphNormals]()

Computes morph normals.

### [method:null computeBoundingBox]()

Computes bounding box of the geometry, updating [page:Geometry Geometry.boundingBox] attribute.

### [method:null computeBoundingSphere]()

Computes bounding sphere of the geometry, updating [page:Geometry Geometry.boundingSphere] attribute.
Neither bounding boxes or bounding spheres are computed by default. They need to be explicitly computed, otherwise they are *null*.

### [method:null merge]( [page:Geometry geometry], [page:Matrix4 matrix], [page:Integer materialIndexOffset] )

Merge two geometries or geometry and geometry from object (using object's transform)

### [method:null mergeVertices]()

Checks for duplicate vertices using hashmap.
Duplicated vertices are removed and faces' vertices are updated.

### [method:null normalize]()

Normalize the geometry.
Make the geometry centered and has a bounding sphere whose raidus equals to 1.0.

### [method:Geometry clone]()

Creates a new clone of the Geometry.

### [method:null dispose]()

Removes The object from memory.
Don't forget to call this method when you remove a geometry because it can cause memory leaks.

### [method:null computeLineDistances]()

Compute distances between vertices for Line geometries.

## Source

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]