# [name]

메쉬, 선, 점 기하학의 표현입니다. 꼭짓점의 위치, 면 순서, 법선, 색상, UV, 버퍼에 있는 커스텀 속성을 포함하고 있으며, 데이터를 GPU에 전달하는 자원을 줄여줍니다.

속성에 있는 데이터를 읽고 수정하려면, [page:BufferAttribute] 문서를 참고하세요.

## 코드 예제

`const geometry = new THREE.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 THREE.BufferAttribute( vertices, 3 ) ); const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); const mesh = new THREE.Mesh( geometry, material );`

## 예제

[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]

## 생성자

### [name]()

새 [name]를 만듭니다. 몇몇 기본값도 설정합니다.

## 프로퍼티

### [property:Object attributes]

이 해시맵은 설정될 속성의 이름을 id로 가지고 있으며 설정해야 할 [page:BufferAttribute buffer] 값을 value로 가지고 있습니다. 프로퍼티에 직접 접근하기보다, [page:.setAttribute] 및 [page:.getAttribute]를 통해 이 기하학 속성에 접근하세요.

### [property:Box3 boundingBox]

bufferGeometry의 바운딩 박스이며 [page:.computeBoundingBox]()로 계산할 수 있습니다. 기본값은 *null*입니다.

### [property:Sphere boundingSphere]

bufferGeometry의 바운딩 스피어이며 [page:.computeBoundingSphere]()로 계산할 수 있습니다. 기본값은 *null*입니다.

### [property:Object drawRange]

렌더링할 기하학의 부분을 정의합니다. 직접 설정하면 안되며 [page:.setDrawRange]를 사용해야 합니다. 기본 값은 다음과 같습니다. `{ start: 0, count: Infinity }` 인덱스가 없는 BufferGeometry의 경우, count는 렌더링할 꼭짓점들의 갯수입니다. 인덱스가 있는 BufferGeometry의 경우, count는 렌더링할 인덱스의 갯수입니다.

### [property:Array groups]

기하학을 그룹으로 나누며 각자의 WebGL 그리기 요청을 통해 렌더링 됩니다. bufferGeometry와 함께 사용되는 재질의 배열을 허용합니다..
각자의 그룹은 형태의 객체입니다: `{ start: Integer, count: Integer, materialIndex: Integer }` start는 이 드리기 요청에서 첫 번째 엘레먼드를 지정하지만 – 첫 번째 인덱스가 없는 기하학이기때문이지만, 다른 경우는 첫 번째 삼각형 인덱스입니다. Count는 몇 개의 꼭짓점(혹은 인덱스)가 포함되었는지, materialIndex는 사용할 재질 배열 인덱스를 지정합니다. 배열을 직접 수정하기보다는 [page:.addGroup]를 사용해 그룹을 추가합니다.

### [property:Integer id]

인스턴스의 고유한 번호입니다.

### [property:BufferAttribute index]

꼭짓점을 여러 개의 삼각형으로 재 사용할 수 있게 해줍니다; 이를 "indexed triangles"를 사용한다고 합니다. 각각의 삼각형은 세 꼭짓점의 인덱스와 연관되어 있습니다. 이 속성은 따라서 각 삼각형 면의 각 꼭짓점의 인덱스를 저장하고 있습니다. 이 속성이 설정되어 있지 않다면, [page:WebGLRenderer renderer]는 세 연속된 위치가 단일 삼각형을 나타낸다고 추정합니다. 기본값은 *null* 입니다.

### [property:Boolean isBufferGeometry]

Read-only flag to check if a given object is of type [name].

### [property:Object morphAttributes]

[page:BufferAttribute]의 해쉬맵은 기하학의 모프 타겟에 대한 세부정보를 담고 있습니다.
Note: Once the geometry has been rendered, the morph attribute data cannot be changed. You will have to call [page:.dispose](), and create a new instance of [name].

### [property:Boolean morphTargetsRelative]

모프 타겟의 행동을 컨트롤하는데에 사용됩니다; true로 설정하면, 모프 타겟 데이터는 absolute positions/normals 대신 relative offsets으로 취급됩니다. 기본값은 *false* 입니다.

### [property:String name]

인스턴스의 임의 이름입니다. 기본값은 빈 문자열입니다.

### [property:Object userData]

BufferGeometry에 관한 커스텀 데이터를 저장하는데에 사용될 수 있는 객체입니다. 이 속성은 복제되지 않기 때문에 기능에 대한 참조를 포함하고 있어서는 안됩니다.

### [property:String uuid]

객체 인스턴스의 [link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID]입니다. 자동으로 할당되며 수정할 수 없습니다.

## 메서드

이 클래스에서는 [page:EventDispatcher EventDispatcher] 메서드들이 활용 가능합니다.

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

기하학에 대한 속성을 설정합니다. [page:.attributes]의 내부 해시맵은 속성들의 반복 속도 증가를 위해 유지되기 때문에, 속성 프로퍼티 대신 이 메서드를 사용하세요.

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

기하학에 그룹을 추가합니다; 프로퍼티 상세에 대해서는 [page:BufferGeometry.groups groups] 페이지를 참고하세요.

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

꼭짓점 좌표로 직접 매트릭스 변형을 합니다.

### [method:this center] ()

바운딩 박스를 기준으로 기하학을 중앙정렬합니다.

### [method:BufferGeometry clone]()

BufferGeometry의 사본을 만듭니다.

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

다른 BufferGeometry를 이 BufferGeometry에 복사합니다.

### [method:undefined clearGroups]( )

모든 그룹을 제거합니다.

### [method:undefined computeBoundingBox]()

기하학의 바운딩 박스를 계산하고 [page:.boundingBox] 속성을 업데이트합니다.
바운딩 박스는 자동으로 계산되지 않습니다. 명시적으로 계산되어야하며 그렇지 않으면 *null* 값입니다.

### [method:undefined computeBoundingSphere]()

기하학의 바운딩 스피어를 계산하고 [page:.boundingSphere] 속성을 업데이트합니다.
바운딩 스피어는 자동으로 계산되지 않습니다. 명시적으로 계산되어야하며 그렇지 않으면 *null* 값입니다.

### [method:undefined computeTangents]()

기하학에 탄젠트 속성을 계산하고 추가합니다.
이 계산은 인덱스가 있는 기하학에만 지원되며 위치, 법선, uv 속성이 정의되어야 합니다. When using a tangent space normal map, prefer the MikkTSpace algorithm provided by [page:BufferGeometryUtils.computeMikkTSpaceTangents] instead.

### [method:undefined computeVertexNormals]()

면의 법선 평균값을 통해 꼭짓점 법선을 계산합니다.

### [method:undefined dispose]()

메모리에서 객체를 정리합니다.
앱이 동작중인데 BufferGeometry를 삭제하고 싶을 때 호출합니다.

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

[page:BufferAttribute attribute]를 특정 이름과 함께 리턴합니다.

### [method:BufferAttribute getIndex] ()

[page:.index] 버퍼를 리턴합니다.

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

특정 이름의 속성이 존재하면 *true*를 리턴합니다.

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

vector - 바라보는 시점의 월드 벡터 입니다.
공간의 점을 기준으로 기하학을 면을 회전시킵니다. 일반적으로 한 구간에서만 사용되며 루프 구간에서 사용되지 않습니다. 일반적인 리얼타임 메쉬 사용은 [page:Object3D.lookAt] 을 사용하세요.

### [method:undefined normalizeNormals]()

기하학의 모든 법선 벡터는 1의 크기를 갖습니다. 기하학 표면의 광도를 수정합니다.

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

특정 이름의 [page:BufferAttribute attribute]를 전부 삭제합니다.

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

X 축의 기하학을 회전합니다. 일반적으로 한 구간에서만 사용되며 루프 구간에서 사용되지 않습니다. 일반적인 리얼타임 메쉬 회전은 [page:Object3D.rotation] 를 사용하세요.

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

Y 축의 기하학을 회전합니다. 일반적으로 한 구간에서만 사용되며 루프 구간에서 사용되지 않습니다. 일반적인 리얼타임 메쉬 회전은 [page:Object3D.rotation] 를 사용하세요.

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

Z 축의 기하학을 회전합니다. 일반적으로 한 구간에서만 사용되며 루프 구간에서 사용되지 않습니다. 일반적인 리얼타임 메쉬 회전은 [page:Object3D.rotation] 를 사용하세요.

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

기하학 데이터를 확대/축소합니다. 일반적으로 한 구간에서만 사용되며 루프 구간에서 사용되지 않습니다. 일반적인 리얼타임 메쉬 확대/축소는 [page:Object3D.scale] 를 사용하세요.

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

[page:.index] 버퍼를 설정합니다.

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

[page:.drawRange] 프로퍼티를 설정합니다. 인덱스가 없는 BufferGeometry에서, count는 렌더링할 꼭짓점의 수입니다. 인덱스가 있는 BufferGeometry에서 count는 렌더링할 인덱스의 수입니다.

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

점 배열로부터 BufferGeometry의 속성을 설정합니다. from an array of points.

### [method:Object toJSON]()

버퍼 기하학을 three.js [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 JSON Object/Scene format]로 변환합니다.

### [method:BufferGeometry toNonIndexed]()

인덱스가 있는 BufferGeometry의 인덱스가 없는 버전을 리턴합니다.

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

기하학을 이동합니다. 일반적으로 한 구간에서만 사용되며 루프 구간에서 사용되지 않습니다. 일반적인 리얼타임 메쉬 이동은 [page:Object3D.position] 를 사용하세요.

## 소스코드

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