Pārlūkot izejas kodu

optimization optional

and cleanup
Raanan Weber 10 gadi atpakaļ
vecāks
revīzija
92093988dd

+ 9 - 7
Babylon/Mesh/babylon.meshSimplification.js

@@ -1,9 +1,10 @@
 var BABYLON;
 (function (BABYLON) {
     var SimplificationSettings = (function () {
-        function SimplificationSettings(quality, distance) {
+        function SimplificationSettings(quality, distance, optimizeMesh) {
             this.quality = quality;
             this.distance = distance;
+            this.optimizeMesh = optimizeMesh;
         }
         return SimplificationSettings;
     })();
@@ -189,7 +190,7 @@ var BABYLON;
                     _this.runDecimation(settings, loop.index, function () {
                         loop.executeNext();
                     });
-                });
+                }, settings.optimizeMesh);
             }, function () {
                 setTimeout(function () {
                     successCallback(_this._reconstructedMesh);
@@ -313,7 +314,7 @@ var BABYLON;
                 }, 0);
             });
         };
-        QuadraticErrorSimplification.prototype.initWithMesh = function (submeshIndex, callback) {
+        QuadraticErrorSimplification.prototype.initWithMesh = function (submeshIndex, callback, optimizeMesh) {
             var _this = this;
             this.vertices = [];
             this.triangles = [];
@@ -321,9 +322,11 @@ var BABYLON;
             var indices = this._mesh.getIndices();
             var submesh = this._mesh.subMeshes[submeshIndex];
             var findInVertices = function (positionToSearch) {
-                for (var ii = 0; ii < _this.vertices.length; ++ii) {
-                    if (_this.vertices[ii].position.equals(positionToSearch)) {
-                        return _this.vertices[ii];
+                if (optimizeMesh) {
+                    for (var ii = 0; ii < _this.vertices.length; ++ii) {
+                        if (_this.vertices[ii].position.equals(positionToSearch)) {
+                            return _this.vertices[ii];
+                        }
                     }
                 }
                 return null;
@@ -353,7 +356,6 @@ var BABYLON;
                     var v2 = _this.vertices[vertexReferences[i2 - submesh.verticesStart]];
                     var triangle = new DecimationTriangle([v0, v1, v2]);
                     triangle.originalOffset = pos;
-                    triangle.positionInOffsets = [v0.originalOffsets.indexOf(i0), v1.originalOffsets.indexOf(i1), v2.originalOffsets.indexOf(i2)];
                     _this.triangles.push(triangle);
                 };
                 BABYLON.AsyncLoop.SyncAsyncForLoop(submesh.indexCount / 3, _this.syncIterations, indicesInit, function () {

+ 9 - 10
Babylon/Mesh/babylon.meshSimplification.ts

@@ -22,10 +22,11 @@
     export interface ISimplificationSettings {
         quality: number;
         distance: number;
+        optimizeMesh?: boolean;
     }
 
     export class SimplificationSettings implements ISimplificationSettings {
-        constructor(public quality: number, public distance: number) {
+        constructor(public quality: number, public distance: number, public optimizeMesh?: boolean) {
         }
     }
 
@@ -128,8 +129,6 @@
         public borderFactor: number;
         public deletePending: boolean;
 
-        public positionInOffsets: Array<number>;
-
         public originalOffset: number;
 
         constructor(public vertices: Array<DecimationVertex>) {
@@ -245,7 +244,6 @@
             this.aggressiveness = 7;
             this.decimationIterations = 100;
             this.boundingBoxEpsilon = Engine.Epsilon;
-
         }
 
         public simplify(settings: ISimplificationSettings, successCallback: (simplifiedMesh: Mesh) => void) {
@@ -256,7 +254,7 @@
                     this.runDecimation(settings, loop.index,() => {
                         loop.executeNext();
                     });
-                });
+                }, settings.optimizeMesh);
             },() => {
                     setTimeout(() => {
                         successCallback(this._reconstructedMesh);
@@ -397,7 +395,7 @@
                 });
         }
 
-        private initWithMesh(submeshIndex: number, callback: Function) {
+        private initWithMesh(submeshIndex: number, callback: Function, optimizeMesh?: boolean) {
 
             this.vertices = [];
             this.triangles = [];
@@ -408,9 +406,11 @@
             var submesh = this._mesh.subMeshes[submeshIndex];
 
             var findInVertices = (positionToSearch: Vector3) => {
-                for (var ii = 0; ii < this.vertices.length; ++ii) {
-                    if (this.vertices[ii].position.equals(positionToSearch)) {
-                        return this.vertices[ii];
+                if (optimizeMesh) {
+                    for (var ii = 0; ii < this.vertices.length; ++ii) {
+                        if (this.vertices[ii].position.equals(positionToSearch)) {
+                            return this.vertices[ii];
+                        }
                     }
                 }
                 return null;
@@ -444,7 +444,6 @@
                     var v2: DecimationVertex = this.vertices[vertexReferences[i2 - submesh.verticesStart]];
                     var triangle = new DecimationTriangle([v0, v1, v2]);
                     triangle.originalOffset = pos;
-                    triangle.positionInOffsets = [v0.originalOffsets.indexOf(i0), v1.originalOffsets.indexOf(i1), v2.originalOffsets.indexOf(i2)]
                     this.triangles.push(triangle);
                 };
                 AsyncLoop.SyncAsyncForLoop(submesh.indexCount / 3, this.syncIterations, indicesInit,() => {