private function updateFlares():void
{
var flareVisibleOld:Boolean = flareVisible;
var sunScreenPosition:Vector3D = view.project(sun.scenePosition);
var xOffset:Number = sunScreenPosition.x - stage.stageWidth/2;
var yOffset:Number = sunScreenPosition.y - stage.stageHeight/2;
var earthScreenPosition:Vector3D = view.project(earth.scenePosition);
var earthRadius:Number = 190*stage.stageHeight/earthScreenPosition.z;
var flareObject:FlareObject;
//update flare visibility
if (flareVisible != flareVisibleOld) {
for each (flareObject in flares) {
if (flareVisible)
addChild(flareObject.sprite);
else
removeChild(flareObject.sprite);
}
}
//update flare position
if (flareVisible) {
var flareDirectionoint = new Point(xOffset, yOffset);
for each (flareObject in flares) {
flareObject.sprite.x = sunScreenPosition.x - flareDirection.x*flareObject.position - flareObject.sprite.width/2;
flareObject.sprite.y = sunScreenPosition.y - flareDirection.y*flareObject.position - flareObject.sprite.height/2;
}
}
}
/**
* GodRays Effect
* @author vancopper
*
*/
public class Filter3DGodRayTask extends Filter3DTaskBase
{
private var _numSteps:int = 30;
private var _lightPos:Vector.<Number> = Vector.<Number>([.5, .5, 1, 1]);
private var _values1:Vector.<Number> = Vector.<Number>([1, 1, 1, 1]);//numsamples, density, numsamples*density, 1 / numsamples * density
private var _values2:Vector.<Number> = Vector.<Number>([1, 1, 1, 1]);//weight, decay, exposure
private var _lightX:Number = 0;
private var _lightY:Number = 0;
private var _weight:Number = .5;
private var _decay:Number = .87;
private var _exposure:Number = .35;
private var _density:Number = 2.0;
public function Filter3DGodRayTask()
{
// super(requireDepthRender);
}
override protected function getFragmentCode():String
{
var code:String = "";
// Calculate vector from pixel to light source in screen space.
code += "sub ft0.xy, v0.xy, fc0.xy \n";
// Divide by number of samples and scale by control factor.
code += "mul ft0.xy, ft0.xy, fc1.ww \n";
/**
* GodRays Effect
* @author vancopper
*
*/
public class GodRayFilter3D extends Filter3DBase
{
private var _godRaysTask:Filter3DGodRayTask;
public function GodRayFilter3D()
{
super();
_godRaysTask = new Filter3DGodRayTask();
addTask(_godRaysTask);
}
public function set lightX(value:Number):void { _godRaysTask.lightX = value; }
public function get lightX():Number { return _godRaysTask.lightX; }
public function set lightY(value:Number):void { _godRaysTask.lightY = value; }
public function get lightY():Number { return _godRaysTask.lightY; }
public function set decay(value:Number):void { _godRaysTask.decay = value; }
public function get decay():Number { return _godRaysTask.decay; }
public function set exposure(value:Number):void { _godRaysTask.exposure = value; }
public function get exposure():Number { return _godRaysTask.exposure; }
public function set weight(value:Number):void { _godRaysTask.weight = value; }
public function get weight():Number { return _godRaysTask.weight; }
public function set density(value:Number):void { _godRaysTask.density = value; }
public function get density():Number { return _godRaysTask.density; }
}
}