是面片、线或点几何体的有效表述。包括顶点位置,面片索引、法相量、颜色值、UV 坐标和自定义缓存属性值。使用 BufferGeometry 可以有效减少向 GPU 传输上述数据所需的开销。
读取或编辑 BufferGeometry 中的数据,见 [page:BufferAttribute] 文档。
const geometry = new THREE.BufferGeometry();
// 创建一个简单的矩形. 在这里我们左上和右下顶点被复制了两次。
// 因为在两个三角面片里,这两个顶点都需要被用到。
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 因为每个顶点都是一个三元组。
geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const mesh = new THREE.Mesh( geometry, material );
const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array( [
-1.0, -1.0, 1.0, // v0
1.0, -1.0, 1.0, // v1
1.0, 1.0, 1.0, // v2
-1.0, 1.0, 1.0, // v3
] );
const indices = [
0, 1, 2,
2, 3, 0,
];
geometry.setIndex( indices );
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]
通过 hashmap 存储该几何体相关的属性,hashmap 的 id 是当前 attribute 的名称,值是相应的 [page:BufferAttribute buffer]。 你可以通过 [page:.setAttribute] 和 [page:.getAttribute] 添加和访问与当前几何体有关的 attribute。
当前 bufferGeometry 的外边界矩形。可以通过 [page:.computeBoundingBox]() 计算。默认值是 *null*。
当前 bufferGeometry 的外边界球形。可以通过 [page:.computeBoundingSphere]() 计算。默认值是 *null*。
用于判断几何体的哪个部分需要被渲染。该值不应该直接被设置,而需要通过 [page:.setDrawRange] 进行设置。
默认值为
{ start: 0, count: Infinity }
对于非索引 BufferGeometry,count 是要渲染的顶点数。
对于索引 BufferGeometry,count 是要渲染的索引数。
将当前几何体分割成组进行渲染,每个部分都会在单独的 WebGL 的 draw call 中进行绘制。该方法可以让当前的 bufferGeometry
可以使用一个材质队列进行描述。
分割后的每个部分都是一个如下的表单:
{ start: Integer, count: Integer, materialIndex: Integer }
start 表明当前 draw call 中的没有索引的几何体的几何体的第一个顶点;或者第一个三角面片的索引。
count 指明当前分割包含多少顶点(或 indices)。
materialIndex 指出当前用到的材质队列的索引。
通过 [page:.addGroup] 来增加组,而不是直接更改当前队列。
每个顶点和索引必须恰好属于一个组,不同组之间不得共享顶点或索引,并且不得留下未使用的顶点或索引。
当前 bufferGeometry 的唯一编号。
允许顶点在多个三角面片间可以重用。这样的顶点被称为"已索引的三角面片(indexed triangles)。 每个三角面片都和三个顶点的索引相关。该 attribute 因此所存储的是每个三角面片的三个顶点的索引。 如果该 attribute 没有设置过,则 [page:WebGLRenderer renderer] 假设每三个连续的位置代表一个三角面片。 默认值是 *null*。
用于判断对象是否为[name]的只读标记.
存储 [page:BufferAttribute] 的 Hashmap,存储了几何体 morph targets 的细节信息。
注意:当这个geometry渲染之后,morph attribute 数据无法更改。你需要调用[page:.dispose](),并重新创建一个新的[name]实例。
用于控制morph target的行为,如果设置为 `true`,morph target数据作为相对的偏移量,而非绝对的位置/法向。 默认为*false*。
当前 bufferGeometry 实例的可选别名。默认值是空字符串。
存储 BufferGeometry 的自定义数据的对象。为保持对象在克隆时完整,该对象不应该包括任何函数的引用。
当前对象实例的 [link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID],该值会自动被分配,且不应被修改。
[page:EventDispatcher EventDispatcher] 在该类上可用的所有方法。
为当前几何体增加一个 group,详见 [page:BufferGeometry.groups groups] 属性。
用给定矩阵转换几何体的顶点坐标。
用给四元数表示的旋转应用于几何体的顶点坐标。
根据边界矩形将几何体居中。
清空所有的 groups。
克隆当前的 BufferGeometry。
计算当前几何体的的边界矩形,该操作会更新已有 [page:.boundingBox]。
边界矩形不会默认计算,需要调用该接口指定计算边界矩形,否则保持默认值 *null*。
计算当前几何体的的边界球形,该操作会更新已有 [page:.boundingSphere]。
边界球形不会默认计算,需要调用该接口指定计算边界球形,否则保持默认值 *null*。
计算并向此geometry中添加tangent attribute。
只支持索引化的几何体对象,并且必须拥有position(位置),normal(法向)和 uv attributes。如果使用了切线空间法向贴图,最好使用 [page:BufferGeometryUtils.computeMikkTSpaceTangents] 中的MikkTSpace算法。
通过面片法向量的平均值计算每个顶点的法向量。对于索引几何体,该方法将每个顶点法线设置为共享该顶点的面的面法线的平均值。对于非索引几何体,顶点不共享,该方法将每个顶点法线设置为与面法线相同。
将参数指定的 BufferGeometry 的值拷贝到当前 BufferGeometry 中。
删除具有指定名称的 [page:BufferAttribute attribute]。
从内存中销毁对象。
如果在运行是需要从内存中删除 BufferGeometry,则需要调用该函数。
返回指定名称的 [page:BufferAttribute attribute]。
返回缓存相关的 [page:.index]。
检查是否存在有指定名称的attribute,如果有返回*true*。
vector - 几何体所朝向的世界坐标。
旋转几何体朝向控件中的一点。该过程通常在一次处理中完成,不会循环处理。典型的用法是过通过调用 [page:Object3D.lookAt] 实时改变 mesh 朝向。
几何体中的每个法向量长度将会为 1。这样操作会更正光线在表面的效果。
在 X 轴上旋转几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 [page:Object3D.rotation] 实时旋转几何体。
在 Y 轴上旋转几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 [page:Object3D.rotation] 实时旋转几何体。
在 Z 轴上旋转几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 [page:Object3D.rotation] 实时旋转几何体。
缩放几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 [page:Object3D.scale] 实时旋转几何体。
为当前几何体设置一个 attribute 属性。在类的内部,有一个存储 [page:.attributes] 的 hashmap, 通过该 hashmap,遍历 attributes 的速度会更快。
设置 [page:.drawRange] 属性。对于非索引 BufferGeometry,count 是要渲染的顶点数。对于索引 BufferGeometry,count 是要渲染的索引数。
通过基于给定的 points 设置几何图形的位置属性。该数组可以保存 Vector2 或 Vector3 的实例。使用二维数据时,所有顶点的 z 坐标均设置为 0。如果该方法与现有位置属性一起使用,则顶点数据将被数组中的数据覆盖。数组的长度必须与顶点数匹配。
设置缓存的 [page:.index]。
返回代表该 BufferGeometry 符合 [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 Object/Scene 规范] 的 JSON 对象。
返回已索引的 BufferGeometry 的非索引版本。
移动几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 [page:Object3D.position] 实时移动几何体。
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]