Jelajahi Sumber

Merge branch 'master' of https://github.com/BabylonJS/Babylon.js

Conflicts:
	babylon.1.12-beta.js
David Catuhe 11 tahun lalu
induk
melakukan
ce768bc959

+ 20 - 10
Babylon/Particles/babylon.particleSystem.js

@@ -12,6 +12,7 @@
 
     var ParticleSystem = (function () {
         function ParticleSystem(name, capacity, scene) {
+            var _this = this;
             this.name = name;
             this.renderingGroupId = 0;
             this.emitter = null;
@@ -77,6 +78,23 @@
             this._indexBuffer = scene.getEngine().createIndexBuffer(indices);
 
             this._vertices = new Float32Array(capacity * this._vertexStrideSize);
+
+            // Default behaviors
+            this.startDirectionFunction = function (emitPower, worldMatrix, directionToUpdate) {
+                var randX = randomNumber(_this.direction1.x, _this.direction2.x);
+                var randY = randomNumber(_this.direction1.y, _this.direction2.y);
+                var randZ = randomNumber(_this.direction1.z, _this.direction2.z);
+
+                BABYLON.Vector3.TransformNormalFromFloatsToRef(randX * emitPower, randY * emitPower, randZ * emitPower, worldMatrix, directionToUpdate);
+            };
+
+            this.startPositionFunction = function (worldMatrix, positionToUpdate) {
+                var randX = randomNumber(_this.minEmitBox.x, _this.maxEmitBox.x);
+                var randY = randomNumber(_this.minEmitBox.y, _this.maxEmitBox.y);
+                var randZ = randomNumber(_this.minEmitBox.z, _this.maxEmitBox.z);
+
+                BABYLON.Vector3.TransformCoordinatesFromFloatsToRef(randX, randY, randZ, worldMatrix, positionToUpdate);
+            };
         }
         ParticleSystem.prototype.getCapacity = function () {
             return this._capacity;
@@ -163,22 +181,14 @@
 
                 var emitPower = randomNumber(this.minEmitPower, this.maxEmitPower);
 
-                var randX = randomNumber(this.direction1.x, this.direction2.x);
-                var randY = randomNumber(this.direction1.y, this.direction2.y);
-                var randZ = randomNumber(this.direction1.z, this.direction2.z);
-
-                BABYLON.Vector3.TransformNormalFromFloatsToRef(randX * emitPower, randY * emitPower, randZ * emitPower, worldMatrix, particle.direction);
+                this.startDirectionFunction(emitPower, worldMatrix, particle.direction);
 
                 particle.lifeTime = randomNumber(this.minLifeTime, this.maxLifeTime);
 
                 particle.size = randomNumber(this.minSize, this.maxSize);
                 particle.angularSpeed = randomNumber(this.minAngularSpeed, this.maxAngularSpeed);
 
-                randX = randomNumber(this.minEmitBox.x, this.maxEmitBox.x);
-                randY = randomNumber(this.minEmitBox.y, this.maxEmitBox.y);
-                randZ = randomNumber(this.minEmitBox.z, this.maxEmitBox.z);
-
-                BABYLON.Vector3.TransformCoordinatesFromFloatsToRef(randX, randY, randZ, worldMatrix, particle.position);
+                this.startPositionFunction(worldMatrix, particle.position);
 
                 var step = randomNumber(0, 1.0);
 

+ 22 - 10
Babylon/Particles/babylon.particleSystem.ts

@@ -52,6 +52,9 @@
         public color2 = new BABYLON.Color4(1.0, 1.0, 1.0, 1.0);
         public colorDead = new BABYLON.Color4(0, 0, 0, 1.0);
         public textureMask = new BABYLON.Color4(1.0, 1.0, 1.0, 1.0);
+        public startDirectionFunction: (emitPower: number, worldMatrix: Matrix, directionToUpdate: Vector3) => void;
+        public startPositionFunction: (worldMatrix: Matrix, positionToUpdate: Vector3) => void;
+
         private particles = new Array<Particle>();
 
         private _capacity: number;
@@ -104,6 +107,23 @@
             this._indexBuffer = scene.getEngine().createIndexBuffer(indices);
 
             this._vertices = new Float32Array(capacity * this._vertexStrideSize);
+
+            // Default behaviors
+            this.startDirectionFunction = (emitPower: number, worldMatrix: Matrix, directionToUpdate: Vector3): void => {
+                var randX = randomNumber(this.direction1.x, this.direction2.x);
+                var randY = randomNumber(this.direction1.y, this.direction2.y);
+                var randZ = randomNumber(this.direction1.z, this.direction2.z);
+
+                BABYLON.Vector3.TransformNormalFromFloatsToRef(randX * emitPower, randY * emitPower, randZ * emitPower, worldMatrix, directionToUpdate);
+            }
+
+            this.startPositionFunction = (worldMatrix: Matrix, positionToUpdate: Vector3): void => {
+                var randX = randomNumber(this.minEmitBox.x, this.maxEmitBox.x);
+                var randY = randomNumber(this.minEmitBox.y, this.maxEmitBox.y);
+                var randZ = randomNumber(this.minEmitBox.z, this.maxEmitBox.z);
+
+                BABYLON.Vector3.TransformCoordinatesFromFloatsToRef(randX, randY, randZ, worldMatrix, positionToUpdate);
+            }
         }
 
         public getCapacity(): number {
@@ -192,22 +212,14 @@
 
                 var emitPower = randomNumber(this.minEmitPower, this.maxEmitPower);
 
-                var randX = randomNumber(this.direction1.x, this.direction2.x);
-                var randY = randomNumber(this.direction1.y, this.direction2.y);
-                var randZ = randomNumber(this.direction1.z, this.direction2.z);
-
-                BABYLON.Vector3.TransformNormalFromFloatsToRef(randX * emitPower, randY * emitPower, randZ * emitPower, worldMatrix, particle.direction);
+                this.startDirectionFunction(emitPower, worldMatrix, particle.direction);
 
                 particle.lifeTime = randomNumber(this.minLifeTime, this.maxLifeTime);
 
                 particle.size = randomNumber(this.minSize, this.maxSize);
                 particle.angularSpeed = randomNumber(this.minAngularSpeed, this.maxAngularSpeed);
 
-                randX = randomNumber(this.minEmitBox.x, this.maxEmitBox.x);
-                randY = randomNumber(this.minEmitBox.y, this.maxEmitBox.y);
-                randZ = randomNumber(this.minEmitBox.z, this.maxEmitBox.z);
-
-                BABYLON.Vector3.TransformCoordinatesFromFloatsToRef(randX, randY, randZ, worldMatrix, particle.position);
+                this.startPositionFunction(worldMatrix, particle.position);
 
                 var step = randomNumber(0, 1.0);
 

+ 8 - 0
Babylon/babylon.scene.js

@@ -733,6 +733,10 @@
             this._renderId++;
             this.updateTransformMatrix();
 
+            if (this.beforeCameraRender) {
+                this.beforeCameraRender(this.activeCamera);
+            }
+
             // Meshes
             var beforeEvaluateActiveMeshesDate = new Date().getTime();
             this._evaluateActiveMeshes();
@@ -814,6 +818,10 @@
 
             // Reset some special arrays
             this._renderTargets.reset();
+
+            if (this.afterCameraRender) {
+                this.afterCameraRender(this.activeCamera);
+            }
         };
 
         Scene.prototype._processSubCameras = function (camera) {

+ 11 - 0
Babylon/babylon.scene.ts

@@ -28,6 +28,8 @@
         public ambientColor = new BABYLON.Color3(0, 0, 0);
         public beforeRender: () => void;
         public afterRender: () => void;
+        public beforeCameraRender: (camera:Camera) => void;
+        public afterCameraRender: (camera: Camera) => void;
         public forceWireframe = false;
         public clipPlane: Plane;
 
@@ -796,6 +798,10 @@
             this._renderId++;
             this.updateTransformMatrix();
 
+            if (this.beforeCameraRender) {
+                this.beforeCameraRender(this.activeCamera);
+            }
+
             // Meshes
             var beforeEvaluateActiveMeshesDate = new Date().getTime();
             this._evaluateActiveMeshes();
@@ -879,6 +885,11 @@
 
             // Reset some special arrays
             this._renderTargets.reset();
+
+            if (this.afterCameraRender) {
+                this.afterCameraRender(this.activeCamera);
+            }
+
         }
 
         private _processSubCameras(camera: Camera): void {

+ 4 - 0
Exporters/Blender/io_export_babylon.py

@@ -165,6 +165,8 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
         Export_babylon.write_float(file_handler, "type", light_type)
         if light_type == 0:
             Export_babylon.write_vector(file_handler, "position", object.location)
+            if object.data.use_sphere:
+                Export_babylon.write_float(file_handler, "range", object.data.distance)
         elif light_type == 1:
             direction = Export_babylon.getDirection(object.matrix_world)
             Export_babylon.write_vector(file_handler, "position", object.location)
@@ -175,6 +177,8 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
             Export_babylon.write_vector(file_handler, "direction", direction)
             Export_babylon.write_float(file_handler, "angle", object.data.spot_size)
             Export_babylon.write_float(file_handler, "exponent", object.data.spot_blend * 2)
+            if object.data.use_sphere:
+                Export_babylon.write_float(file_handler, "range", object.data.distance)
         else:
             matrix_world = object.matrix_world.copy()
             matrix_world.translation = mathutils.Vector((0, 0, 0))

+ 4 - 1
Tools/BuildOurOwnBabylonJS/BabylonJS/BabylonJS.csproj

@@ -71,7 +71,10 @@
     </Otherwise>
   </Choose>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')"/>
+  <PropertyGroup>
+    <TypeScriptTarget>ES5</TypeScriptTarget>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />
   <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
   <ProjectExtensions>

File diff ditekan karena terlalu besar
+ 3 - 3
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJS/ourOwnBabylon.js


File diff ditekan karena terlalu besar
+ 8 - 8
babylon.1.12-beta.js