[Sandy] [sandy commit] r651 - trunk/sandy/as3/trunk/src/sandy/core/scenegraph
codesite-noreply at google.com
codesite-noreply at google.com
Tue May 20 01:40:12 PDT 2008
Author: makc.the.great
Date: Tue May 20 01:39:17 2008
New Revision: 651
Modified:
trunk/sandy/as3/trunk/src/sandy/core/scenegraph/StarField.as
Log:
Added support for IBitmapDrawable stars in a StarField.
Modified: trunk/sandy/as3/trunk/src/sandy/core/scenegraph/StarField.as
==============================================================================
--- trunk/sandy/as3/trunk/src/sandy/core/scenegraph/StarField.as (original)
+++ trunk/sandy/as3/trunk/src/sandy/core/scenegraph/StarField.as Tue
May 20 01:39:17 2008
@@ -19,6 +19,8 @@
import flash.display.*;
import flash.events.Event;
import flash.events.MouseEvent;
+ import flash.geom.ColorTransform;
+ import flash.geom.Matrix;
import sandy.bounds.BSphere;
import sandy.core.Scene3D;
@@ -59,6 +61,14 @@
public var starColors:Array = [];
/**
+ * Array of star sprites (any IBitmapDrawable-s; if not specified,
StarField uses setPixel to draw a star).
+ *
+ * <p>Star sprites are affected by corresponding starColors value;
for DisplayObject-s, StarField will use
+ * their blendMode to draw them.</p>
+ */
+ public var starSprites:Array = [];
+
+ /**
* Creates a StarField.
*
* @param p_sName A string identifier for this object
@@ -71,6 +81,7 @@
m_oBitmapData = new BitmapData (1, 1, true, 0);
m_oBitmap = new Bitmap (m_oBitmapData);
m_oContainer.addChild (m_oBitmap);
+ _vx = new Vertex(); _vy = new Vertex();
}
/**
@@ -141,7 +152,8 @@
m_oBitmapData.fillRect (m_oBitmapData.rect, 0);
m_oBitmapData.lock();
// --
- var i:int = 0, c32:Number, a:Number, r:Number;
+ var i:int = 0;
+ var c32:Number, a:Number, c:Number, r:Number, rgb_r:Number,
rgb_g:Number, rgb_b:Number, bY:Number;
for (i = 0; i < stars.length; i++)
{
var _v:Vertex = stars [i];
@@ -155,10 +167,44 @@
if (r < 1)
{
// will uint and bit shift really make a difference?
- c32 = (i < starColors.length) ? starColors [i] : 0xFFFFFFFF;
- a = c32 / 0x1000000 * (1 - r);
+ c32 = (i < starColors.length) ? Number (starColors [i]) : 0xFFFFFFFF;
+ a = c32 / 0x1000000 * (1 - r); c = c32 & 0xFFFFFF;
p_oCamera.projectVertex (_v);
- m_oBitmapData.setPixel32 (_v.sx, _v.sy, (c32 & 0xFFFFFF) +
Math.floor (a) * 0x1000000);
+ if ((i < starSprites.length /* avoid array access */) &&
(starSprites [i] is IBitmapDrawable))
+ {
+ _vx.copy (_v); _vx.wx++; p_oCamera.projectVertex (_vx);
+ _vy.copy (_v); _vy.wy++; p_oCamera.projectVertex (_vy);
+ m_oMatrix.tx = _v.sx; m_oMatrix.a = (_vx.sx - _v.sx);
+ m_oMatrix.ty = _v.sy; m_oMatrix.d = (_v.sy - _vy.sy);
+
+ if (c != 0xFFFFFF)
+ {
+ rgb_r = (0xFF0000 & c) >> 16;
+ rgb_g = (0x00FF00 & c) >> 8;
+ rgb_b = (0x0000FF & c);
+ bY = /* a * */ 1.7321 /*Math.sqrt (3)*/ / Math.sqrt (rgb_r *
rgb_r + rgb_g * rgb_g + rgb_b * rgb_b);
+ rgb_r *= bY; rgb_g *= bY; rgb_b *= bY;
+ }
+ else
+ {
+ rgb_r = rgb_g = rgb_b = 1;
+ }
+
+ m_oColorTransform.redMultiplier = rgb_r;
+ m_oColorTransform.greenMultiplier = rgb_g;
+ m_oColorTransform.blueMultiplier = rgb_b;
+
+ // TODO think about support for fade-to-black along with fade-to-transparent?
+ m_oColorTransform.alphaMultiplier = a / 255.0;
+
+ var star:IBitmapDrawable = starSprites [i];
+ m_sBlendMode = (star as DisplayObject == null) ? "normal" : DisplayObject(star).blendMode;
+ m_oBitmapData.draw (star, m_oMatrix, m_oColorTransform, m_sBlendMode);
+ }
+ else
+ {
+ m_oBitmapData.setPixel32 (_v.sx, _v.sy, (c32 & 0xFFFFFF) +
Math.floor (a) * 0x1000000);
+ }
}
}
}
@@ -203,5 +249,9 @@
private var m_oContainer:Sprite;
private var m_oBitmap:Bitmap;
private var m_oBitmapData:BitmapData;
+ private var m_oMatrix:Matrix = new Matrix ();
+ private var m_oColorTransform:ColorTransform = new ColorTransform ();
+ private var m_sBlendMode:String = "";
+ private var _vx:Vertex, _vy:Vertex;
}
}
More information about the Sandy
mailing list