Переглянути джерело

Fix issue with mesh colliders

David Catuhe 6 роки тому
батько
коміт
315cecc456
3 змінених файлів з 8 додано та 11 видалено
  1. 2 4
      localDev/index.html
  2. 4 3
      src/Collisions/collider.ts
  3. 2 4
      src/Meshes/abstractMesh.ts

+ 2 - 4
localDev/index.html

@@ -11,7 +11,6 @@
     <script src="../dist/preview%20release/ammo.js"></script>
     <script src="../dist/preview%20release/gltf_validator.js"></script>
     <script src="../Tools/DevLoader/BabylonLoader.js"></script>
-    <script src="src/webgl-debug.js"></script>
 
     <style>
         html,
@@ -45,10 +44,9 @@
 
         @font-face {
             font-family: BabylonJSglyphs;
-           /* src: url("http://www.killer-squid.com/fonts/BabylonJSglyphs.otf"); */
+            /* src: url("http://www.killer-squid.com/fonts/BabylonJSglyphs.otf"); */
             src: local("BabylonJSglyphs");
         }
-        
     </style>
 </head>
 
@@ -90,7 +88,7 @@
                     if (typeof createEngine !== "undefined") {
                         engine = createEngine();
                     } else {
-                        engine = new BABYLON.Engine(canvas, true, {  premultipliedAlpha: false, stencil: true, disableWebGL2Support: false, preserveDrawingBuffer: true });
+                        engine = new BABYLON.Engine(canvas, true, { premultipliedAlpha: false, stencil: true, disableWebGL2Support: false, preserveDrawingBuffer: true });
                     }
 
                     BABYLONDEVTOOLS.Loader.debugShortcut(engine);

+ 4 - 3
src/Collisions/collider.ts

@@ -187,7 +187,7 @@ export class Collider {
     }
 
     /** @hidden */
-    public _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean): void {
+    public _testTriangle(faceIndex: number, trianglePlaneArray: Array<Plane>, p1: Vector3, p2: Vector3, p3: Vector3, hasMaterial: boolean, hostMesh: AbstractMesh): void {
         var t0;
         var embeddedInPlane = false;
 
@@ -371,18 +371,19 @@ export class Collider {
                 }
                 this._nearestDistance = distToCollision;
                 this.collisionFound = true;
+                this.collidedMesh = hostMesh;
             }
         }
     }
 
     /** @hidden */
-    public _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: IndicesArray, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean): void {
+    public _collide(trianglePlaneArray: Array<Plane>, pts: Vector3[], indices: IndicesArray, indexStart: number, indexEnd: number, decal: number, hasMaterial: boolean, hostMesh: AbstractMesh): void {
         for (var i = indexStart; i < indexEnd; i += 3) {
             var p1 = pts[indices[i] - decal];
             var p2 = pts[indices[i + 1] - decal];
             var p3 = pts[indices[i + 2] - decal];
 
-            this._testTriangle(i, trianglePlaneArray, p3, p2, p1, hasMaterial);
+            this._testTriangle(i, trianglePlaneArray, p3, p2, p1, hasMaterial, hostMesh);
         }
     }
 

+ 2 - 4
src/Meshes/abstractMesh.ts

@@ -1398,11 +1398,9 @@ export class AbstractMesh extends TransformNode implements IDisposable, ICullabl
                 subMesh._lastColliderWorldVertices.push(Vector3.TransformCoordinates(this._positions[i], transformMatrix));
             }
         }
+
         // Collide
-        collider._collide(subMesh._trianglePlanes, subMesh._lastColliderWorldVertices, (<IndicesArray>this.getIndices()), subMesh.indexStart, subMesh.indexStart + subMesh.indexCount, subMesh.verticesStart, !!subMesh.getMaterial());
-        if (collider.collisionFound) {
-            collider.collidedMesh = this;
-        }
+        collider._collide(subMesh._trianglePlanes, subMesh._lastColliderWorldVertices, (<IndicesArray>this.getIndices()), subMesh.indexStart, subMesh.indexStart + subMesh.indexCount, subMesh.verticesStart, !!subMesh.getMaterial(), this);
         return this;
     }