Преглед изворни кода

Fix a bug with instances and multiple submeshes

David Catuhe пре 6 година
родитељ
комит
5d4ba9072a
3 измењених фајлова са 12 додато и 1 уклоњено
  1. 7 0
      src/Meshes/abstractMesh.ts
  2. 4 0
      src/Meshes/mesh.ts
  3. 1 1
      src/scene.ts

+ 7 - 0
src/Meshes/abstractMesh.ts

@@ -1072,6 +1072,13 @@ export class AbstractMesh extends TransformNode implements IDisposable, ICullabl
         return false;
     }
 
+    /**
+     * Gets a boolean indicating if this mesh has instances
+     */
+    public get hasInstances(): boolean {
+        return false;
+    }
+
     // ================================== Point of View Movement =================================
 
     /**

+ 4 - 0
src/Meshes/mesh.ts

@@ -268,6 +268,10 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
         this._onBeforeDrawObserver = this.onBeforeDrawObservable.add(callback);
     }
 
+    public get hasInstances(): boolean {
+        return this.instances.length > 0;
+    }
+
     // Members
 
     /**

+ 1 - 1
src/scene.ts

@@ -3153,7 +3153,7 @@ export class Scene extends AbstractScene implements IAnimatable {
     }
 
     private _evaluateSubMesh(subMesh: SubMesh, mesh: AbstractMesh, initialMesh: AbstractMesh): void {
-        if (initialMesh.isAnInstance || this.dispatchAllSubMeshesOfActiveMeshes || mesh.alwaysSelectAsActiveMesh || mesh.subMeshes.length === 1 || subMesh.isInFrustum(this._frustumPlanes)) {
+        if (initialMesh.hasInstances || initialMesh.isAnInstance || this.dispatchAllSubMeshesOfActiveMeshes || mesh.alwaysSelectAsActiveMesh || mesh.subMeshes.length === 1 || subMesh.isInFrustum(this._frustumPlanes)) {
             for (let step of this._evaluateSubMeshStage) {
                 step.action(mesh, subMesh);
             }