「Molehill ファーストインプレッション | ClockMaker Blog」を参考に、埋め込み画像の画素を立方体に置き換えて表示してみました。Away3Dのバージョンは4.0 Betaを使用しています。
package
{
import flash.display.*;
import flash.events.Event;
import away3d.containers.ObjectContainer3D;
import away3d.containers.View3D;
import away3d.debug.AwayStats;
import away3d.entities.Mesh;
import away3d.lights.DirectionalLight;
import away3d.materials.ColorMaterial;
import away3d.materials.lightpickers.StaticLightPicker;
import away3d.primitives.CubeGeometry;
[SWF(width = "400", height = "300", frameRate = "60")]
public class CubicPixel extends Sprite
{
[Embed(source = "CubicPixel.png")]
private var ImgCls:Class;
private var view:View3D;
private var container:ObjectContainer3D;
private var cubes:Vector.<Mesh> = new Vector.<Mesh>();
public function CubicPixel()
{
if (stage) addedToStageHanlder();
else addEventListener(Event.ADDED_TO_STAGE, addedToStageHanlder);
}
private function addedToStageHanlder(event:Event = null):void
{
view = new View3D();
view.antiAlias = 4;
view.camera.z = -1000;
addChild(view);
var light:DirectionalLight = new DirectionalLight(0, -1, 1);
light.specular = 0.25;
view.scene.addChild(light);
var lightPicker:StaticLightPicker = new StaticLightPicker([light]);
container = new ObjectContainer3D();
view.scene.addChild(container);
var img:BitmapData = new ImgCls().bitmapData;
var cubeGeometry:CubeGeometry = new CubeGeometry(30, 30, 30);
for (var j:int = 0; j < img.height; j++) {
for (var i:int = 0; i < img.width; i++) {
var material:ColorMaterial = new ColorMaterial(img.getPixel(i, j));
material.lightPicker = lightPicker;
var cube:Mesh = new Mesh(cubeGeometry, material);
cube.x = 50 * (i - img.width / 2) + 25;
cube.y = 50 * (img.height / 2 - j) - 25;
cubes.push(cube);
container.addChild(cube);
}
}
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addChild(new AwayStats(view));
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(event:Event):void
{
for each (var cube:Mesh in cubes) {
cube.rotationX += 1;
cube.rotationY += 1;
}
container.rotationX += 0.25;
container.rotationY += 0.25;
view.render();
}
}
}