Browse Source

Lens flare bug fix and alpha mode per lens flare

Lens flare will now work when viewport is not 0,0 (in x/y).
Blend mode per lensflare was added (instead of global per system)
Raanan Weber 9 năm trước cách đây
mục cha
commit
5ffadeeb2f

+ 2 - 1
src/LensFlare/babylon.lensFlare.ts

@@ -2,6 +2,7 @@
     export class LensFlare {
     export class LensFlare {
         public color: Color3;
         public color: Color3;
         public texture: Texture;
         public texture: Texture;
+        public alphaMode: number = Engine.ALPHA_ONEONE;
 
 
         private _system: LensFlareSystem;
         private _system: LensFlareSystem;
 
 
@@ -13,7 +14,7 @@
             system.lensFlares.push(this);
             system.lensFlares.push(this);
         }
         }
 
 
-        public dispose = function(): void {
+        public dispose = function (): void {
             if (this.texture) {
             if (this.texture) {
                 this.texture.dispose();
                 this.texture.dispose();
             }
             }

+ 4 - 3
src/LensFlare/babylon.lensFlareSystem.ts

@@ -176,7 +176,6 @@
             engine.enableEffect(this._effect);
             engine.enableEffect(this._effect);
             engine.setState(false);
             engine.setState(false);
             engine.setDepthBuffer(false);
             engine.setDepthBuffer(false);
-            engine.setAlphaMode(Engine.ALPHA_ONEONE);
 
 
             // VBOs
             // VBOs
             engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._effect);
             engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._effect);
@@ -185,13 +184,15 @@
             for (var index = 0; index < this.lensFlares.length; index++) {
             for (var index = 0; index < this.lensFlares.length; index++) {
                 var flare = this.lensFlares[index];
                 var flare = this.lensFlares[index];
 
 
+                engine.setAlphaMode(flare.alphaMode);
+
                 var x = centerX - (distX * flare.position);
                 var x = centerX - (distX * flare.position);
                 var y = centerY - (distY * flare.position);
                 var y = centerY - (distY * flare.position);
 
 
                 var cw = flare.size;
                 var cw = flare.size;
                 var ch = flare.size * engine.getAspectRatio(this._scene.activeCamera, true);
                 var ch = flare.size * engine.getAspectRatio(this._scene.activeCamera, true);
-                var cx = 2 * (x / globalViewport.width) - 1.0;
-                var cy = 1.0 - 2 * (y / globalViewport.height);
+                var cx = 2 * (x / (globalViewport.width + globalViewport.x * 2)) - 1.0;
+                var cy = 1.0 - 2 * (y / (globalViewport.height + globalViewport.y * 2));
 
 
                 var viewportMatrix = Matrix.FromValues(
                 var viewportMatrix = Matrix.FromValues(
                     cw / 2, 0, 0, 0,
                     cw / 2, 0, 0, 0,