# [name]

Una rappresentazione della geometria di mesh, di linee o di punti. Include posizioni di vertici, indici della faccia, normali, colori, coordinate UV, e attributi personalizzati all'interno dei buffer, riducendo il costo del passaggio di tutti questi dati alla GPU.

Per leggere e modificare dati negli attributi della BufferGeometry, vedi la documentazione di [page:BufferAttribute].

## Codice di Esempio

`const geometry = new THREE.BufferGeometry(); // crea una semplice figura quadrata. Duplichiamo i vertici top left e bottom right // perché ogni vertice ha bisogno di apparire una volta per triangolo. 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 perché ci osno 3 valori (componenti) per vertice geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); const mesh = new THREE.Mesh( geometry, material );`

## Esempi

[example:webgl_buffergeometry Mesh with non-indexed faces]
[example:webgl_buffergeometry_indexed Mesh with indexed faces]
[example:webgl_buffergeometry_lines Lines]
[example:webgl_buffergeometry_lines_indexed Indexed Lines]
[example:webgl_buffergeometry_custom_attributes_particles Particles]
[example:webgl_buffergeometry_rawshader Raw Shaders]

## Costruttore

### [name]()

Crea un nuovo [name]. Inoltre imposta alcune proprietà al valore predefinito.

## Proprietà

### [property:Object attributes]

Questo hashmap ha come id il nome dell'attributo da impostare e come valore il [page:BufferAttribute buffer] su cui impostarlo. Piuttosto che accedere a questa proprietà direttamente, usa [page:.setAttribute] e [page:.getAttribute] per accedere agli attributi della geometria.

### [property:Box3 boundingBox]

Bounding box per la bufferGeometry, che può essere calcolato con [page:.computeBoundingBox](). Il valore predefinito è `null`.

### [property:Sphere boundingSphere]

Bounding sphere per la bufferGeometry, che può essere calcolato con [page:.computeBoundingSphere](). Il valore predefinito è `null`.

### [property:Object drawRange]

Determina la parte della geometria da visualizzare. Non dovrebbe essere impostato direttamente, usa invece [page:.setDrawRange]. Il valore predefinito è `{ start: 0, count: Infinity }` Per la BufferGeometry non indicizzata, count è il numero di vertici da visualizzare. Per la BufferGeometry indicizzata, count è il numero di indici da visualizzare.

### [property:Array groups]

Divide la geometria in gruppi, ognuno dei quali verrà renderizzato in una chimata draw WebGL separata. Ci permette che un array di materiali venga usato con una geometria.
Ogni gruppo è un oggetto della forma: `{ start: Integer, count: Integer, materialIndex: Integer }` dove start specifica il primo elemento nella chiamata draw - il primo vertice per la geometria non indicizzata, altrimenti il primo indice del triangolo. Count specifica quanti vertici (o indici) sono inclusi, e materialIndex specifica l'indice dell'array del materiale da utilizzare.
Usa [page:.addGroup] per aggiungere gruppi, piuttosto che modificare questo array direttamente.
Ogni vertice e indice deve appartenere esattamente ad un gruppo - i gruppi non devono condividere vertici o indici, e non devono lasciare vertici o indici inutilizzati.

### [property:Integer id]

Numero univoco per questa istanza della bufferGeometry.

### [property:BufferAttribute index]

Consente di riutilizzare i vertici su più triangoli; viene chiamato "indexed triangles". Ogni triangolo è associato con gli indici di tre vertici. Questo attributo quindi memorizza l'indice di ogni vertice per ogni faccia del triangolo. Se questo attributo non è impostato, il [page:WebGLRenderer renderer] assume che ogni 3 posizioni contigue rappresentano un singolo triangolo. Il valore predefinito è `null`.

### [property:Boolean isBufferGeometry]

Flag di sola lettura per verificare se un dato oggetto è di tipo [name].

### [property:Object morphAttributes]

Hashmap di BufferAttribute contenente i dettagli dei target morph delle geometrie.
Nota: Una volta che la geometria è stata renderizzata, i dati dell'attributo morph non possono essere modificati. Dovrai chiamare [page:.dispose](), e creare una nuova istanza della [name].

### [property:Boolean morphTargetsRelative]

Usato per controllare il comportamento del target morph: quando è impostato a true, i dati del target morph vengono trattati come offset relativi, anziché come posizioni/normali assoluti. L'impostazione predefinita è `false`.

### [property:String name]

Nome opzionale per questa istanza di bufferGeometry. Il valore predefinito è una stringa vuota.

### [property:Object userData]

Un oggetto che può essere utilizzato per memorizzare i dati relativi alla BufferGeometry. Non dovrebbe contenere i riferimenti alle funzioni poiché queste non verranno clonate.

### [property:String uuid]

[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] di questa istanza. Viene assegnato automaticamente e non deve essere modificato.

## Metodi

[page:EventDispatcher EventDispatcher] i metodi sono disponibili in questa classe.

### [method:undefined addGroup]( [param:Integer start], [param:Integer count], [param:Integer materialIndex] )

Aggiunge un gruppo a questa geometria; vedi la proprietà [page:BufferGeometry.groups groups] per maggiori dettagli.

### [method:this applyMatrix4]( [param:Matrix4 matrix] )

Applica la matrice di trasformazione alla geometria.

### [method:this applyQuaternion]( [param:Quaternion quaternion] )

Applica la rotazione rappresentata dal quaternione alla geometria.

### [method:this center] ()

Centra la geometria basandosi sul bounding box.

### [method:undefined clearGroups]( )

Cancella tutti i gruppi.

### [method:BufferGeometry clone]()

Crea un clone di questa BufferGeometry.

### [method:undefined computeBoundingBox]()

Calcola il bounding box della geometria, aggiornando l'attributo [page:.boundingBox].
I Bounding box non sono calcolati per impostazione predefinita. Devono essere calcolati esplicitamente, altrimenti sono `null`.

### [method:undefined computeBoundingSphere]()

Calcola il bounding sphere della geometria, aggiornando l'attributo [page:.boundingSphere].
I Bounding sphere non sono calcolati per impostazione predefinita. Devono essere calcolati esplicitamente, altrimenti sono `null`.

### [method:undefined computeTangents]()

Calcola e aggiunge un attributo tangent a questa geometria.
Il calcolo è supportato solo per geometrie indicizzate e se la posizione, la normale e gli attributi uv sono definiti. Quando si usa una mappa normale dello spazio tangente, meglio usare l'algoritmo MikkTSpace fornito da [page:BufferGeometryUtils.computeMikkTSpaceTangents].

### [method:undefined computeVertexNormals]()

Calcola la normale dei vertici calcolando la media delle normali delle facce.

### [method:this copy]( [param:BufferGeometry bufferGeometry] )

Copia un'altra BufferGeometry in questa BufferGeometry.

### [method:BufferAttribute deleteAttribute]( [param:String name] )

Cancella l'[page:BufferAttribute attributo] con il nome specificato.

### [method:undefined dispose]()

Elimina l'oggetto dalla memoria.
È necessario chiamarlo quando si desidera rimuovere BufferGeometry mentre l'applicazione è in esecuzione.

### [method:BufferAttribute getAttribute]( [param:String name] )

Restituisce l'[page:BufferAttribute attributo] con il nome specificato.

### [method:BufferAttribute getIndex] ()

Restituisce il buffer di [page:.index].

### [method:Boolean hasAttribute]( [param:String name] )

Restituisce `true` se l'attributo con il nome specificato esiste.

### [method:this lookAt] ( [param:Vector3 vector] )

vector - Un vettore world da guardare.
Ruota la geometria in modo che sia rivolta verso un punto dello spazio. In genere, questa operazione viene eseguita una sola volta e non durante un ciclo. Usare [page:Object3D.lookAt] per l'uso tipico della mesh in tempo reale.

### [method:undefined normalizeNormals]()

Ogni vettore normale, in una geometria, deve avere magnitudine 1. Ciò correggerà l'illuminazione sulle superfici geometriche.

### [method:this rotateX] ( [param:Float radians] )

Ruota la geometria attorno all'asse X. In genere, questa operazione viene eseguita una sola volta e non durante un ciclo. Usare [page:Object3D.rotation] per la tipica rotazione della mesh in tempo reale.

### [method:this rotateY] ( [param:Float radians] )

Ruota la geometria attorno all'asse Y. In genere, questa operazione viene eseguita una sola volta e non durante un ciclo. Usare [page:Object3D.rotation] per la tipica rotazione della mesh in tempo reale.

### [method:this rotateZ] ( [param:Float radians] )

Ruota la geometria attorno all'asse Z. In genere, questa operazione viene eseguita una sola volta e non durante un ciclo. Usare [page:Object3D.rotation] per la tipica rotazione della mesh in tempo reale.

### [method:this scale] ( [param:Float x], [param:Float y], [param:Float z] )

Scala i dati della geometria. In genere, questa operazione viene eseguita una sola volta e non durante un ciclo. Usare [page:Object3D.scale] per il tipico ridimensionamento della mesh in tempo reale.

### [method:this setAttribute]( [param:String name], [param:BufferAttribute attribute] )

Imposta un attributo per questa geometria. Utilizzare questo metodo piuttosto che la proprietà attributes, perché viene mantenuta una hashmap interna di .attributes per accelerare l'iterazione sugli attributi.

### [method:undefined setDrawRange] ( [param:Integer start], [param:Integer count] )

Imposta la proprietà [page:.drawRange]. Per BufferGeometry non indicizzate, count è il numero di vertici da visualizzare. Per BufferGeometry indicizzate, count è il numero di indici da visualizzare.

### [method:this setFromPoints] ( [param:Array points] )

Imposta gli attributi per questa BufferGeometry da un array di punti.

### [method:this setIndex] ( [param:BufferAttribute index] )

Imposta il buffer [page:.index].

### [method:Object toJSON]()

Converte la buffer geometry al formato three.js [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 JSON Object/Scene].

### [method:BufferGeometry toNonIndexed]()

Restituisce una versione non indicizzata di una BufferGeometry indicizzata.

### [method:this translate] ( [param:Float x], [param:Float y], [param:Float z] )

Trasla la geometria. In genere, questa operazione viene eseguita una sola volta e non durante un ciclo. Usare [page:Object3D.position] per la tipica traslazione della mesh in tempo reale.

## Source

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