<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
backgroundColor="0"
creationComplete="init()" color="#aaaaaa" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import com.derschmale.light.SpecularLightMap;
import com.derschmale.light.DiffuseLightMap;
import caurina.transitions.Tweener;
import com.derschmale.bumpmaps.BumpMap;
[Embed(source="../embeds/images/preview_stone-01_d100.jpg")]
private var _stoneSource : Class;
[Embed(source="../embeds/images/preview_stone-01_b030-p050.jpg")]
private var _stoneDiffuse : Class;
[Embed(source="../embeds/images/preview_stone-01_s050-g050.jpg")]
private var _stoneSpecular : Class;
[Embed(source="../embeds/images/preview_stone-42_d100.jpg")]
private var _wallSource : Class;
[Embed(source="../embeds/images/preview_stone-42_b005.jpg")]
private var _wallDiffuse : Class;
[Embed(source="../embeds/images/preview_stone-42_s100-g050-r.jpg")]
private var _wallSpecular : Class;
[Embed(source="../embeds/images/bennylava.jpg")]
private var _bennySource : Class;
[Embed(source="../embeds/images/fibre.jpg")]
private var _bennyDiffuse : Class;
[Embed(source="../embeds/images/drops01.jpg")]
private var _bennySpecular : Class;
[Embed(source="../embeds/images/tiles-source.jpg")]
private var _tilesSource : Class;
[Embed(source="../embeds/images/tiles-bump.jpg")]
private var _tilesDiffuse : Class;
[Embed(source="../embeds/images/tiles-spec.jpg")]
private var _tilesSpecular : Class;
[Embed(source="../embeds/images/steel-source.jpg")]
private var _steelSource : Class;
[Embed(source="../embeds/images/steel-bump.jpg")]
private var _steelDiffuse : Class;
[Embed(source="../embeds/images/steel-spec.jpg")]
private var _steelSpecular : Class;
private var _diffuseBumpMap : BumpMap;
private var _specularBumpMap : BumpMap;
private var _diffuseMap : DiffuseLightMap;
private var _specularMap : SpecularLightMap;
private var _sourceAssets : Array;
private var _diffuseAssets : Array;
private var _specularAssets : Array;
[Bindable]
private var _currentImage : Image;
[Bindable]
private var _textureNames : Array = ["Cobble wall", "Sandstone wall", "Water drops", "Tiles", "Rusted steel"];
private function init() : void
{
_diffuseMap = new DiffuseLightMap(512);
_specularMap = new SpecularLightMap(512);
diffuseLightSource.source = _diffuseMap;
specularLightSource.source = _specularMap;
initAssets();
setTexture(2);
addEventListener(Event.ENTER_FRAME, handleEnterFrame);
}
private function initAssets() : void
{
_sourceAssets = new Array();
_diffuseAssets = new Array();
_specularAssets = new Array();
_sourceAssets[0] = _stoneSource;
_diffuseAssets[0] = new _stoneDiffuse();
_specularAssets[0] = new _stoneSpecular();
_sourceAssets[1] = _wallSource;
_diffuseAssets[1] = new _wallDiffuse();
_specularAssets[1] = new _wallSpecular();
_sourceAssets[2] = _bennySource;
_diffuseAssets[2] = new _bennyDiffuse();
_specularAssets[2] = new _bennySpecular();
_sourceAssets[3] = _tilesSource;
_diffuseAssets[3] = new _tilesDiffuse();
_specularAssets[3] = new _tilesSpecular();
_sourceAssets[4] = _steelSource;
_diffuseAssets[4] = new _steelDiffuse();
_specularAssets[4] = new _steelSpecular();
}
private function setTexture(id : uint) : void
{
sourceImage.source = new _sourceAssets[id]();
_diffuseBumpMap = new BumpMap(diffuseLightSource, _diffuseAssets[id].bitmapData, 256);
_specularBumpMap = new BumpMap(specularLightSource, _specularAssets[id].bitmapData, 512);
}
private function handleEnterFrame(event : Event) : void
{
diffuseLightSource.x = sourceImage.mouseX-256;
diffuseLightSource.y = sourceImage.mouseY-256;
specularLightSource.x = sourceImage.mouseX-256;
specularLightSource.y = sourceImage.mouseY-256;
_diffuseBumpMap.update();
_specularBumpMap.update();
}
]]>
</mx:Script>
<mx:VBox horizontalCenter="0" horizontalAlign="center">
<mx:Label text="move your mouse around" />
<mx:Canvas backgroundColor="0">
<mx:Image id="sourceImage" />
<mx:Canvas id="diffuseContainer" blendMode="multiply" mouseEnabled="false" mouseChildren="false"
width="100%" height="{sourceImage.height}" backgroundColor="0x000000"
horizontalScrollPolicy="off" verticalScrollPolicy="off"
visible="{diffuseCheck.selected}">
<mx:Image id="diffuseLightSource" />
</mx:Canvas>
<mx:Canvas id="specularContainer" blendMode="screen" mouseEnabled="false" mouseChildren="false"
width="{sourceImage.width}" height="{sourceImage.height}"
verticalScrollPolicy="off" horizontalScrollPolicy="off"
visible="{specularCheck.selected}">
<mx:Image id="specularLightSource" />
</mx:Canvas>
</mx:Canvas>
<mx:HBox>
<mx:Label text="Texture: " />
<mx:ComboBox id="texturePicker" selectedIndex="2" dataProvider="{_textureNames}" change="setTexture(texturePicker.selectedIndex)" />
</mx:HBox>
<mx:HBox width="650">
<mx:Label text="Diffuse Bump:" width="100" />
<mx:HSlider id="diffuseStrengthSlide" liveDragging="true"
minimum="0" maximum="1024" value="256"
width="400"
change="{_diffuseBumpMap.strength = diffuseStrengthSlide.value}" />
<mx:CheckBox id="diffuseCheck" selected="true" label="Show diffuse" width="120" />
</mx:HBox>
<mx:HBox width="650">
<mx:Label text="Specular Bump:" width="100" />
<mx:HSlider id="specularStrengthSlide" liveDragging="true"
value="512" minimum="0" maximum="1024"
width="400"
change="{_specularBumpMap.strength = specularStrengthSlide.value}" />
<mx:CheckBox id="specularCheck" selected="true" label="Show specular" width="120" />
</mx:HBox>
<mx:HBox width="650">
<mx:Label text="specular gloss" width="120" />
<mx:HSlider id="glossSlide"
value="20" minimum="1" maximum="50"
width="400"
change="{_specularMap.gloss = glossSlide.value}" />
</mx:HBox>
<mx:HBox width="650">
<mx:Label text="specular strength" width="120" />
<mx:HSlider id="specularSlide"
value="20" minimum="1" maximum="50"
width="400"
change="{_specularMap.strength = specularSlide.value}" />
</mx:HBox>
</mx:VBox>
</mx:Application>