Threejs核心API

Posted 小白搞IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Threejs核心API相关的知识,希望对你有一定的参考价值。

BufferGeometry

是面片、线或点几何体的有效表述。包括顶点位置,面片索引、法相量、颜色值、UV 坐标和自定义缓存属性值。使用 BufferGeometry 可以有效减少向 GPU 传输上述数据所需的开销。

读取或编辑 BufferGeometry 中的数据,见 BufferAttribute 文档。

几何体的更多使用示例,详见 Geometry。

示例

var geometry = new THREE.BufferGeometry();// 创建一个简单的矩形. 在这里我们左上和右下顶点被复制了两次。// 因为在两个三角面片里,这两个顶点都需要被用到。var 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.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );var mesh = new THREE.Mesh( geometry, material );

Mesh with non-indexed faces
Mesh with indexed faces
Lines
Indexed Lines
Particles
Raw Shaders

构造函数

BufferGeometry()

创建一个新的 BufferGeometry. 同时将预置属性设置为默认值.

属性

.attributes : Object

通过 hashmap 存储该几何体相关的属性,hashmap 的 id 是当前 attribute 的名称,值是相应的 buffer。你可以通过 .addAttribute 和 .getAttribute 添加和访问与当前几何体有关的 attribute。

.boundingBox : Box3

当前 bufferGeometry 的外边界矩形。可以通过 .computeBoundingBox() 计算。默认值是 null

.boundingSphere : Sphere

当前 bufferGeometry 的外边界球形。可以通过 .computeBoundingSphere() 计算。默认值是 null

.drawRange : Object

用于判断几何体的哪个部分需要被渲染。该值不应该直接被设置,而需要通过 .setDrawRange 进行设置。
默认值为{ start: 0, count: Infinity }

.groups : Array

将当前几何体分割成组进行渲染,每个部分都会在单独的 WebGL 的 draw call 中进行绘制。该方法可以让当前的 bufferGeometry 可以使用一个材质队列进行描述。

分割后的每个部分都是一个如下的表单:{ start: Integer, count: Integer, materialIndex: Integer }start 表明当前 draw call 中的没有索引的几何体的几何体的第一个顶点;或者第一个三角面片的索引。count 指明当前分割包含多少顶点(或 indices)。materialIndex 指出当前用到的材质队列的索引。

通过 .addGroup 来增加组,而不是直接更改当前队列。

.id : Integer

当前 bufferGeometry 的唯一编号。

.index : BufferAttribute

允许顶点在多个三角面片间可以重用。这样的顶点被称为"已索引的三角面片(indexed triangles)"并且使用时和Geometry中一致:每个三角面片都和三个顶点的索引相关。该 attribute 因此所存储的是每个三角面片的三个顶点的索引。如果该 attribute 没有设置过,则 renderer 假设每三个连续的位置代表一个三角面片。默认值是 null

.isBufferGeometry : Boolean

用于检查当前类或派生类的类型是 BufferGeometries。默认值是 true

该值用于内部优化,你不应该手动修改该值。

.morphAttributes : Object

存储 BufferAttribute 的 Hashmap,存储了几何体 morphTargets 的细节信息。

.name : String

当前 bufferGeometry 实例的可选别名。默认值是空字符串。

.userData : Object

存储 BufferGeometry 的自定义数据的对象。为保持对象在克隆时完整,该对象不应该包括任何函数的引用。

.uuid : String

当前对象实例的 UUID,该值会自动被分配,且不应被修改。

方法

EventDispatcher 在该类上可用的所有方法。

.addAttribute ( name : String, attribute : BufferAttribute ) : BufferGeometry

为当前几何体增加一个 attribute。的属性,在类的内部,有一个存储 .attributes 的 hashmap, 通过该 hashmap,遍历 attributes 的速度会更快。而使用该方法,可以向 hashmap 内部增加 attribute。所以,你需要使用该方法来添加 attributes。

.addGroup ( start : Integer, count : Integer, materialIndex : Integer ) : null

为当前几何体增加一个 group,详见 groups 属性。

.applyMatrix ( matrix : Matrix4 ) : null

用给定矩阵转换几何体的顶点坐标。

.center () : BufferGeometry

根据边界矩形将几何体居中。

.clone () : BufferGeometry

克隆当前的 BufferGeometry。

.copy ( bufferGeometry : BufferGeometry ) : BufferGeometry

将参数指定的 BufferGeometry 的值拷贝到当前 BufferGeometry 中。

.clearGroups ( ) : null

清空所有的 groups。

.computeBoundingBox () : null

计算当前几何体的的边界矩形,该操作会更新已有 [param:.boundingBox]。
边界矩形不会默认计算,需要调用该接口指定计算边界矩形,否则保持默认值 null

.computeBoundingSphere () : null

计算当前几何体的的边界球形,该操作会更新已有 [param:.boundingSphere]。
边界球形不会默认计算,需要调用该接口指定计算边界球形,否则保持默认值 null

.computeVertexNormals () : null

通过面片法向量的平均值计算每个顶点的法向量。

.dispose () : null

从内存中销毁对象。 
如果在运行是需要从内存中删除 BufferGeometry,则需要调用该函数。

.fromDirectGeometry ( Geometry : Geometry ) : BufferGeometry

通过 DirectGeometry 所包含的面数据生成一个 BufferGeometry 对象。对于线型几何体未实现该方法。

注意: DirectGeometry 主要用于内部 Geometry 和 BufferGeometry 的类型转换。

.fromGeometry ( Geometry : Geometry ) : BufferGeometry

通过 Geometry 所包含的面信息生成一个 BufferGeometry 对象。对于线型几何体未实现该方法。

.getAttribute ( name : String ) : BufferAttribute

返回指定名称的 attribute。

.getIndex () : BufferAttribute

返回缓存相关的 .index。

.lookAt ( vector : Vector3 ) : BufferGeometry

vector - 几何体所朝向的世界坐标。

旋转几何体朝向控件中的一点。该过程通常在一次处理中完成,不会循环处理。典型的用法是过通过调用 Object3D.lookAt 实时改变 mesh 朝向。

.merge ( bufferGeometry : BufferGeometry, offset : Integer ) : null

同参数指定的 BufferGeometry 进行合并。可以通过可选参数指定,从哪个偏移位置开始进行 merge。

.normalizeNormals () : null

几何体中的每个法向量长度将会为 1。这样操作会更正光线在表面的效果。

.removeAttribute ( name : String ) : BufferAttribute

删除具有指定名称的 attribute。

.rotateX ( radians : Float ) : BufferGeometry

在 X 轴上旋转几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 Object3D.rotation 实时旋转几何体。

.rotateY ( radians : Float ) : BufferGeometry

在 Y 轴上旋转几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 Object3D.rotation 实时旋转几何体。

.rotateZ ( radians : Float ) : BufferGeometry

在 Z 轴上旋转几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 Object3D.rotation 实时旋转几何体。

.scale ( x : Float, y : Float, z : Float ) : BufferGeometry

缩放几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 Object3D.scale 实时旋转几何体。

.setIndex ( index : BufferAttribute ) : null

设置缓存的 .index。

.setDrawRange ( start : Integer, count : Integer ) : null

设置缓存的 .drawRange。详见相关属性说明。

.setFromObject ( object : Object3D ) : BufferGeometry

通过 Object3D 设置该 BufferGeometry 的 attribute。

.setFromPoints ( points : Array ) : BufferGeometry

通过点队列设置该 BufferGeometry 的 attribute。

.toJSON () : Object

返回代表该 BufferGeometry 的 JSON 对象。

.toNonIndexed () : BufferGeometry

返回已索引的 BufferGeometry 的非索引版本。

.translate ( x : Float, y : Float, z : Float ) : BufferGeometry

移动几何体。该操作一般在一次处理中完成,不会循环处理。典型的用法是通过调用 Object3D.rotation 实时旋转几何体。

.updateFromObject ( object : Object3D ) : BufferGeometry

通过 Object3D 更新 BufferGeometry 的 attribute。

以上是关于Threejs核心API的主要内容,如果未能解决你的问题,请参考以下文章

采用threejs加载geojson案例

Threejs部分应用纹理

Vue2+ThreeJS工程无痛搭建指南

Vue2+ThreeJS工程无痛搭建指南

Activiti6系列- 核心API

片段和活动之间的核心区别是啥?哪些代码可以写成片段?