Преглед на файлове

Correct caching of positions

Position-array is not constantly being calculated.
Raanan Weber преди 10 години
родител
ревизия
1395566f3d
променени са 2 файла, в които са добавени 15 реда и са изтрити 10 реда
  1. 7 5
      Babylon/Collisions/babylon.collisionWorker.js
  2. 8 5
      Babylon/Collisions/babylon.collisionWorker.ts

+ 7 - 5
Babylon/Collisions/babylon.collisionWorker.js

@@ -115,10 +115,12 @@ var BABYLON;
             }
         };
         CollideWorker.prototype.collideForSubMesh = function (subMesh, transformMatrix, meshGeometry) {
-            var positionsArray = [];
-            for (var i = 0, len = meshGeometry.positions.length; i < len; i = i + 3) {
-                var p = BABYLON.Vector3.FromArray([meshGeometry.positions[i], meshGeometry.positions[i + 1], meshGeometry.positions[i + 2]]);
-                positionsArray.push(p);
+            if (!meshGeometry['positionsArray']) {
+                meshGeometry['positionsArray'] = [];
+                for (var i = 0, len = meshGeometry.positions.length; i < len; i = i + 3) {
+                    var p = BABYLON.Vector3.FromArray([meshGeometry.positions[i], meshGeometry.positions[i + 1], meshGeometry.positions[i + 2]]);
+                    meshGeometry['positionsArray'].push(p);
+                }
             }
             if (!subMesh['_lastColliderWorldVertices'] || !subMesh['_lastColliderTransformMatrix'].equals(transformMatrix)) {
                 subMesh['_lastColliderTransformMatrix'] = transformMatrix.clone();
@@ -128,7 +130,7 @@ var BABYLON;
                 var start = subMesh.verticesStart;
                 var end = (subMesh.verticesStart + subMesh.verticesCount);
                 for (var i = start; i < end; i++) {
-                    subMesh['_lastColliderWorldVertices'].push(BABYLON.Vector3.TransformCoordinates(positionsArray[i], transformMatrix));
+                    subMesh['_lastColliderWorldVertices'].push(BABYLON.Vector3.TransformCoordinates(meshGeometry['positionsArray'][i], transformMatrix));
                 }
             }
             // Collide

+ 8 - 5
Babylon/Collisions/babylon.collisionWorker.ts

@@ -141,11 +141,14 @@ module BABYLON {
         }
 
         private collideForSubMesh(subMesh: SerializedSubMesh, transformMatrix: BABYLON.Matrix, meshGeometry: SerializedGeometry): void {
-            var positionsArray = [];
-            for (var i = 0, len = meshGeometry.positions.length; i < len; i = i + 3) {
-                var p = BABYLON.Vector3.FromArray([meshGeometry.positions[i], meshGeometry.positions[i + 1], meshGeometry.positions[i + 2]]);
-                positionsArray.push(p);
+            if (!meshGeometry['positionsArray']) {
+                meshGeometry['positionsArray'] = [];
+                for (var i = 0, len = meshGeometry.positions.length; i < len; i = i + 3) {
+                    var p = BABYLON.Vector3.FromArray([meshGeometry.positions[i], meshGeometry.positions[i + 1], meshGeometry.positions[i + 2]]);
+                    meshGeometry['positionsArray'].push(p);
+                }
             }
+            
             if (!subMesh['_lastColliderWorldVertices'] || !subMesh['_lastColliderTransformMatrix'].equals(transformMatrix)) {
                 subMesh['_lastColliderTransformMatrix'] = transformMatrix.clone();
                 //The following two arrays should be initialized CORRECTLY to save some calculation time.
@@ -154,7 +157,7 @@ module BABYLON {
                 var start = subMesh.verticesStart;
                 var end = (subMesh.verticesStart + subMesh.verticesCount);
                 for (var i = start; i < end; i++) {
-                    subMesh['_lastColliderWorldVertices'].push(BABYLON.Vector3.TransformCoordinates(positionsArray[i], transformMatrix));
+                    subMesh['_lastColliderWorldVertices'].push(BABYLON.Vector3.TransformCoordinates(meshGeometry['positionsArray'][i], transformMatrix));
                 }
             }