THREE.InstancedMesh
是 Three.js 中的一個強大功能,它允許你高效地渲染許多相同幾何體的例項,同時使用不同的變換(位置、旋轉、縮放),從而減少繪製呼叫的數量。這在渲染大量相似物件時可以顯著提高效能。
**setMorphAt 需要注意這個方法只適用於 buffer 建立出來的 geometry **
InstancedMesh 有七個屬性九個方法
InstancedMesh( geometry : BufferGeometry, material : Material, count : Integer ) geometry - 一個 BufferGeometry 的例項。 material - 一個 Material 的例項。預設為一個新的 MeshBasicMaterial 。 count - 例項的數量
// 建立幾何體和材質 const geometry = new THREE.BoxGeometry(1, 1, 1); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 建立 InstancedMesh const count = 100; const instancedMesh = new THREE.InstancedMesh(geometry, material, count); // 設定每個例項的變換 for (let i = 0; i < count; i++) { const matrix = new THREE.Matrix4(); matrix.setPosition(Math.random() * 10, Math.random() * 10, Math.random() * 10); matrix.scale(new THREE.Vector3(1, 1, 1)); // 可選的縮放 instancedMesh.setMatrixAt(i, matrix); } // 將 InstancedMesh 新增到場景中 scene.add(instancedMesh);
屬性
boundingBox : Box3 當前 InstancedMesh 的外邊界矩形。可以透過 .computeBoundingBox() 計算。預設值是 null。 當使用 computeBoundingBox() 方法後就能訪問這個instanceMesh 生成的所有物體的最小包圍盒。
boundingSphere : Sphere 當前 InstancedMesh 的外邊界球形。可以透過 .computeBoundingSphere() 計算。預設值是 null。當使用 computeBoundingSphere() 方法後就能訪問這個instanceMesh 生成的所有物體的最小包圍球形。
count : Integer 例項的數量。被傳入到建構函式中的count表示mesh例項數量的最大值。 你可以在執行時改變這個數值到 [0, count] 區間的一個整數。如果你需要比原先的數量更多的例項數量,你需要建立一個新的InstancedMesh。
instanceColor : InstancedBufferAttribute 代表所有例項的顏色。預設情況下null。 如果透過.setColorAt()修改例項化資料,則必須將它的needsUpdate標誌設定為 true。
instanceMatrix : InstancedBufferAttribute 表示所有例項的本地變換。 如果你要透過 .setMatrixAt() 來修改例項資料,你必須將它的 needsUpdate 標識為 true 。
morphTexture : DataTexture 用於表示所有例項的變形權重。如果你透過 .setMorphAt() 修改了例項資料,你必須將 needsUpdate 標識設定為 true。
isInstancedMesh : Boolean 用來檢查物件是否屬於 InstancedMesh 型別的只讀標識。
方法 公共方法請檢視基類 Mesh。
computeBoundingBox () : undefined 計算當前幾何體的的邊界矩形,該操作會更新已有 [param:.boundingBox]。 邊界矩形不會預設計算,需要呼叫該介面指定計算邊界矩形,否則保持預設值 null。
computeBoundingSphere () : undefined 計算當前幾何體的的邊界球形,該操作會更新已有 [param:.boundingSphere]。 邊界球形不會預設計算,需要呼叫該介面指定計算邊界球形,否則保持預設值 null。
dispose () : undefined 釋放例項的內部資源。
getColorAt ( index : Integer, color : Color ) : undefined index: 例項的索引。 值必須在 [0, count] 區間。 color: 傳入的顏色物件將會被設定為指定的例項的顏色。 獲取已定義例項的顏色。
getMatrixAt ( index : Integer, matrix : Matrix4 ) : undefined index: 例項的索引。值必須在 [0, count] 區間。 mesh: 網格屬性 .morphTargetInfluences 將會被填充為已定義例項的變形權重。 獲取已定義例項的變形權重
setColorAt ( index : Integer, color : Color ) : undefined index: 例項的索引。值必須在 [0, count] 區間。 color: 單個例項的顏色。 設定已定義例項的顏色。請確保在更新顏色後將 .instanceColor.needsUpdate 標識設定為 true。
setMatrixAt ( index : Integer, matrix : Matrix4 ) : undefined index: 例項的索引。值必須在 [0, count] 區間。 matrix: 一個4x4矩陣,表示單個例項本地變換。 設定給定的本地變換矩陣到已定義的例項。 請確保在更新所有矩陣後將 .instanceMatrix.needsUpdate 設定為true。
setMorphAt ( index : Integer, mesh : Mesh ) : undefined index: 例項的索引。值必須在 [0, count] 區間。 mesh: 網格屬性 .morphTargetInfluences 包含了單個例項的變形權重。 設定已定義例項的變形權重。請確保在更新所有變形資料後將 .morphTexture.needsUpdate 設定為 true。