Geometry

Geometry

Three.js 中文文檔鏈接

Geometry 是對 BufferGeometry 的用戶有好替代。Geometry 利用 Vector3 或 Color 存儲了幾何體的相關 attributes(如頂點位置,面信息,顏色等)比起 BufferGeometry 更容易讀寫,但是運行效率不如有類型的隊列。

對於大型工程或正式工程,推薦採用 BufferGeometry。
示例

var geometry = new THREE.Geometry();

geometry.vertices.push(
	new THREE.Vector3( -10,  10, 0 ),
	new THREE.Vector3( -10, -10, 0 ),
	new THREE.Vector3(  10, -10, 0 )
);

geometry.faces.push( new THREE.Face3( 0, 1, 2 ) );

geometry.computeBoundingSphere();

構造函數

Geometry()

構造函數沒有任何參數。

屬性

###.boundingBox : Box3

Geometry 的外邊界矩形,可以通過 .computeBoundingBox() 進行計算,默認值是 null。

.boundingSphere : Sphere

Geometry 的外邊界球形,可以通過 .computeBoundingSphere() 進行計算,默認值是 null。

.colors : Array

頂點 colors 隊列,與頂點數量和順序保持一致。

該### 屬性用於 Points 、 Line 或派生自 LineSegments 的類。 對於 Meshes,請使用 Face3.vertexColors 函數。

如果要標記隊列中的數據已經更新,Geometry.colorsNeedUpdate 值需要被設置爲 true。

.faces : Array

faces 隊列。
描述每個頂點之間如何組成模型面的面隊列。同時該隊列保存面和頂點的法向量和顏色信息。

如果要標記隊列中的數據已經更新,Geometry.elementsNeedUpdate 值需要被設置爲 true。

.faceVertexUvs : Array

面的 UV 層的隊列,該隊列用於將紋理和幾何信息進行映射。
每個 UV 層都是一個 UV 的隊列,順序和數量同面中的頂點相對用。

如果要標記隊列中的數據已經更新,Geometry.uvsNeedUpdate 值需要被設置爲 true。

.id : Integer

當前 geometry 實例的唯一標識符的數。

.isGeometry : Boolean

用於判斷當前類或派生類屬於 Geometries。默認值是 true。

你不應該改變該值,該值用於內部優化。

.lineDistances : array

用於保存線型幾何體中每個頂點間距離的。在正確渲染 LineDashedMaterial 時,需要用到該數據。

.morphTargets : Array

morph targets 的隊列。每個 morph target 都是一個如下的 javascript 對象:
{ name: “targetName”, vertices: [ new THREE.Vector3(), … ] }
Morph 頂點和幾何體原始頂點在數量和順序上需要一一對應。

.morphNormals : Array

一個 morph 法向量的數組。Morph 法向量和 morph target 有類似的結構,每個法向量都是一個如下的 Javascript 對象:
morphNormal = { name: “NormalName”, normals: [ new THREE.Vector3(), … ] }
示例詳見 WebGL / morphNormals。

.name : String

當前幾何的可選別名。默認值是一個空字符串。

.skinWeights : Array

當在處理一個 SkinnedMesh 時,每個頂點最多可以有 4 個相關的 bones 來影響它。 skinWeights ### 屬性是一個權重隊列,順序同幾何體中的頂點保持一致。因而,隊列中的第一個 skinWeight 就對應幾何體中的第一個頂點。由於每個頂點可以被 4 個 bones 營銷,因而每個頂點的 skinWeights 就採用一個 Vector4 表示。

skinWeight 矢量中每個元素的取值範圍應該在 0 到 1 之間。例如,當設置爲 0,骨骼對該頂點的位置沒有影響。當設置爲 0.5, 則對頂點的影響爲 50%。 當設置爲 100% 則對頂點的影響是 100%。如果矢量中只有一個骨骼與頂點相關聯,則你只需要關注矢量中的第一個元素, 剩餘的元素可以忽略,他們的值可以都設置爲 0。

.skinIndices : Array

就如同 skinWeights ### 屬性一樣。skinWeights 的值也是與幾何體的頂點相對應。每個頂點可以最多有 4 個骨骼與之相關聯。 因而第一個 skinIndex 就與幾何體的第一個頂點相關聯,skinIndex 的值就指明瞭影響該頂點的骨骼是哪個。例如,第一個頂點的值是 ( 10.05, 30.10, 12.12 ),第一個 skinIndex 的值是( 10, 2, 0, 0 ),第一個 skinWeight 的值是 ( 0.8, 0.2, 0, 0 )。上述值表明第一個頂點受到mesh.bones[10]骨骼的影響有 80%, 受到 skeleton.bones[2] 的影響是 20%,由於另外兩個 skinWeight 的值是 0,因而他們對頂點沒有任何影響。

下面以代碼的形式展示示例:
// 例如
geometry.skinIndices[15] = new THREE.Vector4( 0, 5, 9, 10 );
geometry.skinWeights[15] = new THREE.Vector4( 0.2, 0.5, 0.3, 0 );

// 與該頂點相關
geometry.vertices[15];

// 相應骨骼可以這樣被調用:
skeleton.bones[0]; // weight of 0.2
skeleton.bones[5]; // weight of 0.5
skeleton.bones[9]; // weight of 0.3
skeleton.bones[10]; // weight of 0

.uuid : String

當前對象實例的 UUID。 該值會被自動分配,請不要修改它。

.vertices : Array

vertices 的隊列。
頂點的隊列,保存了模型中每個頂點的位置信息。
如果要標記隊列中的數據已經更新,.verticesNeedUpdate 值需要被設置爲 true。

.verticesNeedUpdate : Boolean

如果頂點隊列中的數據被修改,該值需要被設置爲 true。

.elementsNeedUpdate : Boolean

如果面隊列中的數據被修改,該值需要被設置爲 true。

.uvsNeedUpdate : Boolean

如果 UV 隊列中的數據被修改,該值需要被設置爲 true。

.normalsNeedUpdate : Boolean

如果法向量隊列中的數據被修改,該值需要被設置爲 true。

.colorsNeedUpdate : Boolean

如果顏色隊列或 face3 的顏色數據被修改,該值需要被設置爲 true。

.groupsNeedUpdate : Boolean

如果 face3 的 materialIndex 被修改,該值需要被設置爲 true。

.lineDistancesNeedUpdate : Boolean

如果 linedistances 隊列中的數據被修改,該值需要被設置爲 true。

方法

EventDispatcher 該類中可用的函數。

.applyMatrix ( matrix : Matrix4 ) : null

將矩陣信息直接應用於幾何體頂點座標。

.center () : Geometry

基於外邊界矩形將幾何體居中。

.clone () : Geometry

克隆當前幾何體。

該### 方法除幾何體的頂點、面信息和 UV 外不會複製其他### 屬性。

.computeBoundingBox () : null

計算當前幾何體的外邊界矩形。該### 方法會更新 Geometry.boundingBox ### 屬性值。

.computeBoundingSphere () : null

計算當前幾何體的外邊界球。該### 方法會更新 Geometry.boundingSphere ### 屬性值。

計算外邊界矩形或外邊界球並不是默認會自動調用的### 方法,這兩個函數需要被顯示的調用才能天得到相應### 屬性值,否則對應### 屬性值保持默認值 null。

.computeFaceNormals () : null

計算 face normals 值。

.computeFlatVertexNormals () : null

計算 flat vertex normals 值。 該### 方法會將頂點法向量的值賦值爲相應面的法向量值。

.computeMorphNormals () : null

計算 .morphNormals 值。

.computeVertexNormals ( areaWeighted : Boolean ) : null

areaWeighted - 如果該值設置爲 true,則每個面的法向量對頂點法向量的影響按照面的面積大小來計算。默認值爲 true.

通過周圍面的法向量計算頂點的法向量。

.copy ( geometry : Geometry ) : Geometry

將參數代表的幾何體的頂點、面和 UV 複製到當前幾何體。該### 方法不會複製除此以外的別的### 屬性值。

.dispose () : null

將對象從內存中刪除。
在你刪除一個幾何體時,不要忘記調用該### 方法,否則會造成內存泄漏。

.fromBufferGeometry ( geometry : BufferGeometry ) : Geometry

將一個 BufferGeometry 對象,轉換成一個 Geometry 對象。

.lookAt ( vector : Vector3 ) : Geometry

vector - 當前幾何體朝向的世界座標。

該### 方法將幾何體進行旋轉,是的幾何體朝向參數指定的世界座標。該### 方法一般在一次處理中完成,但不在渲染過程中執行。
一般使用 Object3D.lookAt ### 方法進行實時更改。

.merge ( geometry : Geometry, matrix : Matrix4, materialIndexOffset : Integer ) : null

將兩個幾何體,或一個幾何體和一個從對象中通過變換獲得的幾何體進行合併。

.mergeMesh ( mesh : Mesh ) : null

將參數指定的面片信息與當前幾何體進行合併。同樣會使用到參數 mesh 的變換。

.mergeVertices () : null

通過 hashmap 檢查重複的頂點。
重複的頂點將會被移除,面的頂點信息會被更新。

.normalize () : null

將當前幾何體歸一化。
將當前幾何體居中,並且使得該幾何體的外邊界球半徑爲 1.0。

.rotateX ( radians : Float ) : Geometry

將幾何體繞 X 軸旋轉參數指定度數。該操作通常在一次處理中完成,但不會在渲染過程中處理。
使用 Object3D.rotation 對模型面片進行實時旋轉處理。

.rotateY ( radians : Float ) : Geometry

將幾何體繞 Y 軸旋轉參數指定度數。該操作通常在一次處理中完成,但不會在渲染過程中處理。
使用 Object3D.rotation 對模型面片進行實時旋轉處理。

.rotateZ ( radians : Float ) : Geometry

將幾何體繞 Z 軸旋轉參數指定度數。該操作通常在一次處理中完成,但不會在渲染過程中處理。
使用 Object3D.rotation 對模型面片進行實時旋轉處理。

.setFromPoints ( points : Array ) : Geometry

通過點隊列設置一個 Geometry 中的頂點。

.sortFacesByMaterialIndex ( ) : null

通過材質索引對面隊列進行排序。對於複雜且有多個材質的幾何體,該操作可以有效減少 draw call 從而提升性能。

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

縮放幾何體大小。該操作通常在一次處理中完成,但不會在渲染過程中處理。
使用 Object3D.scale 對模型面片進行實時縮放處理。

.toJSON ( ) : JSON

將 Geometry 對象數據轉爲 JSON 格式。

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

移動當前幾何體。該操作通常在一次處理中完成,但不會在渲染過程中處理。
使用 Object3D.position 對模型面片進行實時移動處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章