Quellcode durchsuchen

Merge pull request #205 from marcolebdech/master

Added "layerMask" property to meshes and cameras.
deltakosh vor 11 Jahren
Ursprung
Commit
553238241f

+ 1 - 0
Babylon/Cameras/babylon.camera.ts

@@ -17,6 +17,7 @@
         public mode = Camera.PERSPECTIVE_CAMERA;
         public isIntermediate = false;
         public viewport = new Viewport(0, 0, 1.0, 1.0);
+        public layerMask: number = 0xFFFFFFFF;
         public subCameras = [];
 
         private _computedViewMatrix = BABYLON.Matrix.Identity();

+ 18 - 3
Babylon/Loading/Plugins/babylon.babylonFileLoader.js

@@ -303,7 +303,7 @@ var BABYLON = BABYLON || {};
     var parseCamera = function (parsedCamera, scene) {
         var camera = new BABYLON.FreeCamera(parsedCamera.name, BABYLON.Vector3.FromArray(parsedCamera.position), scene);
         camera.id = parsedCamera.id;
-
+        
         BABYLON.Tags.AddTagsTo(camera, parsedCamera.tags);
 
         // Parent
@@ -349,6 +349,14 @@ var BABYLON = BABYLON || {};
             scene.beginAnimation(camera, parsedCamera.autoAnimateFrom, parsedCamera.autoAnimateTo, parsedCamera.autoAnimateLoop, 1.0);
         }
 
+        
+        // Layer Mask
+        if (parsedCamera.layerMask && (parseInt(parsedCamera.layerMask) != NaN)) {
+          camera.layerMask = Math.abs(parseInt(parsedCamera.layerMask));
+        } else {
+          camera.layerMask = 0xFFFFFFFF;
+        }
+        
         return camera;
     };
 
@@ -496,7 +504,7 @@ var BABYLON = BABYLON || {};
     var parseMesh = function (parsedMesh, scene, rootUrl) {
         var mesh = new BABYLON.Mesh(parsedMesh.name, scene);
         mesh.id = parsedMesh.id;
-
+        
         BABYLON.Tags.AddTagsTo(mesh, parsedMesh.tags);
 
         mesh.position = BABYLON.Vector3.FromArray(parsedMesh.position);
@@ -536,7 +544,7 @@ var BABYLON = BABYLON || {};
         if (parsedMesh.parentId) {
             mesh.parent = scene.getLastEntryByID(parsedMesh.parentId);
         }
-
+        
         // Geometry
         if (parsedMesh.delayLoadingFile) {
             mesh.delayLoadState = BABYLON.Engine.DELAYLOADSTATE_NOTLOADED;
@@ -615,6 +623,13 @@ var BABYLON = BABYLON || {};
             scene.beginAnimation(mesh, parsedMesh.autoAnimateFrom, parsedMesh.autoAnimateTo, parsedMesh.autoAnimateLoop, 1.0);
         }
 
+        // Layer Mask
+        if (parsedMesh.layerMask && (parseInt(parsedMesh.layerMask) != NaN)) {
+          mesh.layerMask = Math.abs(parseInt(parsedMesh.layerMask));
+        } else {
+          mesh.layerMask = 0xFFFFFFFF;
+        }
+
         return mesh;
     };
 

+ 1 - 1
Babylon/Materials/textures/babylon.renderTargetTexture.js

@@ -66,7 +66,7 @@ var BABYLON;
             for (var meshIndex = 0; meshIndex < this.renderList.length; meshIndex++) {
                 var mesh = this.renderList[meshIndex];
 
-                if (mesh && mesh.isEnabled() && mesh.isVisible && mesh.subMeshes) {
+                if (mesh && mesh.isEnabled() && mesh.isVisible && mesh.subMeshes && ((mesh.layerMask & scene.activeCamera.layerMask) != 0)) {
                     mesh._activate(scene.getRenderId());
 
                     for (var subIndex = 0; subIndex < mesh.subMeshes.length; subIndex++) {

+ 1 - 1
Babylon/Materials/textures/babylon.renderTargetTexture.ts

@@ -69,7 +69,7 @@
             for (var meshIndex = 0; meshIndex < this.renderList.length; meshIndex++) {
                 var mesh = this.renderList[meshIndex];
 
-                if (mesh && mesh.isEnabled() && mesh.isVisible && mesh.subMeshes) {
+                if (mesh && mesh.isEnabled() && mesh.isVisible && mesh.subMeshes && ((mesh.layerMask & scene.activeCamera.layerMask) != 0)) {
                     mesh._activate(scene.getRenderId());
 
                     for (var subIndex = 0; subIndex < mesh.subMeshes.length; subIndex++) {

+ 1 - 0
Babylon/Mesh/babylon.abstractMesh.ts

@@ -45,6 +45,7 @@
         public material: Material;
         public receiveShadows = false;
         public actionManager: ActionManager;
+        public layerMask: number = 0xFFFFFFFF;
 
         // Physics
         public _physicImpostor = PhysicsEngine.NoImpostor;

+ 2 - 2
Babylon/babylon.scene.js

@@ -636,7 +636,7 @@
                             mesh._preActivate();
                         }
 
-                        if (mesh._renderId === this._renderId || (mesh._renderId === 0 && mesh.isEnabled() && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes))) {
+                        if (mesh._renderId === this._renderId || (mesh._renderId === 0 && mesh.isEnabled() && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes) && ((mesh.layerMask & this.activeCamera.layerMask) != 0))) {
                             if (mesh._renderId === 0) {
                                 this._activeMeshes.push(mesh);
                                 mesh._activate(this._renderId);
@@ -680,7 +680,7 @@
                     mesh.computeWorldMatrix();
                     mesh._preActivate();
 
-                    if (mesh.isEnabled() && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes)) {
+                    if (mesh.isEnabled() && ((mesh.layerMask & this.activeCamera.layerMask) != 0) && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes)) {
                         this._activeMeshes.push(mesh);
                         mesh._activate(this._renderId);
 

+ 2 - 2
Babylon/babylon.scene.ts

@@ -706,7 +706,7 @@
                             mesh._preActivate();
                         }
 
-                        if (mesh._renderId === this._renderId || (mesh._renderId === 0 && mesh.isEnabled() && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes))) {
+						if (mesh._renderId === this._renderId || (mesh._renderId === 0 && mesh.isEnabled() && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes) && ((mesh.layerMask & this.activeCamera.layerMask)!=0))) {
                             if (mesh._renderId === 0) {
                                 this._activeMeshes.push(mesh);
                                 mesh._activate(this._renderId);
@@ -750,7 +750,7 @@
                     mesh.computeWorldMatrix();
                     mesh._preActivate();
 
-                    if (mesh.isEnabled() && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes)) {
+                    if (mesh.isEnabled() && ((mesh.layerMask & this.activeCamera.layerMask) != 0) && mesh.isVisible && mesh.visibility > 0 && mesh.isInFrustum(this._frustumPlanes)) {
                         this._activeMeshes.push(mesh);
                         mesh._activate(this._renderId);