You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							309 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							309 lines
						
					
					
						
							12 KiB
						
					
					
				
								<!DOCTYPE html>
							 | 
						|
								<html lang="en">
							 | 
						|
									<head>
							 | 
						|
										<meta charset="utf-8" />
							 | 
						|
										<base href="../../../" />
							 | 
						|
										<script src="page.js"></script>
							 | 
						|
										<link type="text/css" rel="stylesheet" href="page.css" />
							 | 
						|
									</head>
							 | 
						|
									<body>
							 | 
						|
										<h1>[name]</h1>
							 | 
						|
								
							 | 
						|
										<p>
							 | 
						|
										A 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.
							 | 
						|
										</p>
							 | 
						|
										<p>
							 | 
						|
										To read and edit data in BufferGeometry attributes, see [page:BufferAttribute] documentation.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h2>Code Example</h2>
							 | 
						|
										<code>
							 | 
						|
										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 );
							 | 
						|
										</code>
							 | 
						|
								
							 | 
						|
										<h2>Examples</h2>
							 | 
						|
										<p>
							 | 
						|
											[example:webgl_buffergeometry Mesh with non-indexed faces]<br />
							 | 
						|
											[example:webgl_buffergeometry_indexed Mesh with indexed faces]<br />
							 | 
						|
											[example:webgl_buffergeometry_lines Lines]<br />
							 | 
						|
											[example:webgl_buffergeometry_lines_indexed Indexed Lines]<br />
							 | 
						|
											[example:webgl_buffergeometry_custom_attributes_particles Particles]<br />
							 | 
						|
											[example:webgl_buffergeometry_rawshader Raw Shaders]
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h2>Constructor</h2>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
										<h3>[name]()</h3>
							 | 
						|
										<div>
							 | 
						|
										This creates a new [name]. It also sets several properties to a default value.
							 | 
						|
										</div>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
										<h2>Properties</h2>
							 | 
						|
								
							 | 
						|
										<h3>[property:Object attributes]</h3>
							 | 
						|
										<p>
							 | 
						|
										This hashmap has as id the name of the attribute to be set and as value the [page:BufferAttribute buffer] to set it to.
							 | 
						|
										Rather than accessing this property directly, use [page:.setAttribute] and [page:.getAttribute] to access attributes of this geometry.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Box3 boundingBox]</h3>
							 | 
						|
										<p>
							 | 
						|
											Bounding box for the bufferGeometry, which can be calculated with
							 | 
						|
											[page:.computeBoundingBox](). Default is `null`.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Sphere boundingSphere]</h3>
							 | 
						|
										<p>
							 | 
						|
											Bounding sphere for the bufferGeometry, which can be calculated with
							 | 
						|
											[page:.computeBoundingSphere](). Default is `null`.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Object drawRange]</h3>
							 | 
						|
										<p>
							 | 
						|
											Determines the part of the geometry to render. This should not
							 | 
						|
											be set directly, instead use [page:.setDrawRange]. Default is
							 | 
						|
											<code>
							 | 
						|
												{ start: 0, count: Infinity }
							 | 
						|
											</code>
							 | 
						|
											For non-indexed BufferGeometry, count is the number of vertices to render.
							 | 
						|
											For indexed BufferGeometry, count is the number of indices to render.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Array groups]</h3>
							 | 
						|
										<p>
							 | 
						|
											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 geometry.<br /><br />
							 | 
						|
								
							 | 
						|
											Each group is an object of the form:
							 | 
						|
											<code>{ start: Integer, count: Integer, materialIndex: Integer }</code>
							 | 
						|
											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.<br /><br />
							 | 
						|
								
							 | 
						|
											Use [page:.addGroup] to add groups, rather than modifying this array directly.<br /><br />
							 | 
						|
								
							 | 
						|
											Every vertex and index must belong to exactly one group — groups must not share vertices or indices, and must not leave vertices or indices unused.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
										<!-- Note: groups used to be called drawCalls
							 | 
						|
								
							 | 
						|
										<h3>[property:Array drawcalls]</h3>
							 | 
						|
										<p>
							 | 
						|
										For geometries that use indexed triangles, this Array can be used to split the object
							 | 
						|
										into multiple WebGL draw calls. Each draw call will draw some subset of the vertices
							 | 
						|
										in this geometry using the configured [page:Material shader]. This may be necessary if,
							 | 
						|
										for instance, you have more than 65535 vertices in your object.
							 | 
						|
										</p> -->
							 | 
						|
								
							 | 
						|
								
							 | 
						|
										<h3>[property:Integer id]</h3>
							 | 
						|
										<p>Unique number for this bufferGeometry instance.</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:BufferAttribute index]</h3>
							 | 
						|
										<p>
							 | 
						|
											Allows for vertices to be re-used across multiple triangles; this is called using "indexed triangles".
							 | 
						|
											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 [page:WebGLRenderer renderer] assumes that each three contiguous
							 | 
						|
											positions represent a single triangle.
							 | 
						|
								
							 | 
						|
											Default is `null`.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Boolean isBufferGeometry]</h3>
							 | 
						|
										<p>
							 | 
						|
											Read-only flag to check if a given object is of type [name].
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Object morphAttributes]</h3>
							 | 
						|
										<p>
							 | 
						|
											Hashmap of [page:BufferAttribute]s holding details of the geometry's morph targets.<br />
							 | 
						|
											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].
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Boolean morphTargetsRelative]</h3>
							 | 
						|
										<p>
							 | 
						|
											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`.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:String name]</h3>
							 | 
						|
										<p>
							 | 
						|
										Optional name for this bufferGeometry instance. Default is an empty string.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:Object userData]</h3>
							 | 
						|
										<p>
							 | 
						|
										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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[property:String uuid]</h3>
							 | 
						|
										<p>
							 | 
						|
										[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this object instance.
							 | 
						|
										This gets automatically assigned and shouldn't be edited.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h2>Methods</h2>
							 | 
						|
								
							 | 
						|
										<p>[page:EventDispatcher EventDispatcher] methods are available on this class.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined addGroup]( [param:Integer start], [param:Integer count], [param:Integer materialIndex] )</h3>
							 | 
						|
										<p>
							 | 
						|
											Adds a group to this geometry; see the [page:BufferGeometry.groups groups]
							 | 
						|
											property for details.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this applyMatrix4]( [param:Matrix4 matrix] )</h3>
							 | 
						|
										<p>Applies the matrix transform to the geometry.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this applyQuaternion]( [param:Quaternion quaternion] )</h3>
							 | 
						|
										<p>Applies the rotation represented by the quaternion to the geometry.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this center] ()</h3>
							 | 
						|
										<p>Center the geometry based on the bounding box.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined clearGroups]( )</h3>
							 | 
						|
										<p>Clears all groups.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:BufferGeometry clone]()</h3>
							 | 
						|
										<p>Creates a clone of this BufferGeometry.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined computeBoundingBox]()</h3>
							 | 
						|
										<p>
							 | 
						|
										Computes bounding box of the geometry, updating [page:.boundingBox] attribute.<br />
							 | 
						|
										Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are `null`.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined computeBoundingSphere]()</h3>
							 | 
						|
										<p>
							 | 
						|
										Computes bounding sphere of the geometry, updating [page:.boundingSphere] attribute.<br />
							 | 
						|
										Bounding spheres aren't computed by default. They need to be explicitly computed, otherwise they are `null`.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined computeTangents]()</h3>
							 | 
						|
										<p>
							 | 
						|
										Calculates and adds a tangent attribute to this geometry.<br />
							 | 
						|
										The computation is only supported for indexed geometries and if position, normal, and uv attributes are defined. When using a tangent space normal map, prefer the MikkTSpace algorithm provided by
							 | 
						|
										[page:BufferGeometryUtils.computeMikkTSpaceTangents] instead.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined computeVertexNormals]()</h3>
							 | 
						|
										<p>Computes vertex normals by averaging face normals.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this copy]( [param:BufferGeometry bufferGeometry] )</h3>
							 | 
						|
										<p>Copies another BufferGeometry to this BufferGeometry.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:BufferAttribute deleteAttribute]( [param:String name] )</h3>
							 | 
						|
										<p>Deletes the [page:BufferAttribute attribute] with the specified name.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined dispose]()</h3>
							 | 
						|
										<p>
							 | 
						|
										Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:BufferAttribute getAttribute]( [param:String name] )</h3>
							 | 
						|
										<p>Returns the [page:BufferAttribute attribute] with the specified name.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:BufferAttribute getIndex] ()</h3>
							 | 
						|
										<p>Return the [page:.index] buffer.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:Boolean hasAttribute]( [param:String name] )</h3>
							 | 
						|
										<p>Returns `true` if the attribute with the specified name exists.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this lookAt] ( [param:Vector3 vector] )</h3>
							 | 
						|
										<p>
							 | 
						|
										vector - A world vector to look at.<br /><br />
							 | 
						|
								
							 | 
						|
										Rotates the geometry to face a 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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined normalizeNormals]()</h3>
							 | 
						|
										<p>
							 | 
						|
										Every normal vector in a geometry will have a magnitude of 1.
							 | 
						|
										This will correct lighting on the geometry surfaces.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this rotateX] ( [param:Float radians] )</h3>
							 | 
						|
										<p>
							 | 
						|
										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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this rotateY] ( [param:Float radians] )</h3>
							 | 
						|
										<p>
							 | 
						|
										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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this rotateZ] ( [param:Float radians] )</h3>
							 | 
						|
										<p>
							 | 
						|
										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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this scale] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
							 | 
						|
										<p>
							 | 
						|
										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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this setAttribute]( [param:String name], [param:BufferAttribute attribute] )</h3>
							 | 
						|
										<p>
							 | 
						|
										Sets an attribute to this geometry. Use this rather than the attributes property,
							 | 
						|
										because an internal hashmap of [page:.attributes] is maintained to speed up iterating over
							 | 
						|
										attributes.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:undefined setDrawRange] ( [param:Integer start], [param:Integer count] )</h3>
							 | 
						|
										<p>Set the [page:.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.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this setFromPoints] ( [param:Array points] )</h3>
							 | 
						|
										<p>Sets the attributes for this BufferGeometry from an array of points.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this setIndex] ( [param:BufferAttribute index] )</h3>
							 | 
						|
										<p>Set the [page:.index] buffer.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:Object toJSON]()</h3>
							 | 
						|
										<p>Convert the buffer geometry to three.js [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 JSON Object/Scene format].</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:BufferGeometry toNonIndexed]()</h3>
							 | 
						|
										<p>Return a non-index version of an indexed BufferGeometry.</p>
							 | 
						|
								
							 | 
						|
										<h3>[method:this translate] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
							 | 
						|
										<p>
							 | 
						|
										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.
							 | 
						|
										</p>
							 | 
						|
								
							 | 
						|
										<h2>Source</h2>
							 | 
						|
								
							 | 
						|
										<p>
							 | 
						|
											[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
							 | 
						|
										</p>
							 | 
						|
									</body>
							 | 
						|
								</html>
							 | 
						|
								
							 |