切換語言為:簡體

three InstancedMesh 例項化網格

  • 爱糖宝
  • 2024-10-24
  • 2063
  • 0
  • 0

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。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.