Картинки на гранях куба..

Скомпилено для флеш девелоп под 10 плеер:
package  
{
	import flash.display.*;
	import fl.events.*;
	import fl.controls.*;
	import flash.display.*;
	import flash.text.*;

	import flash.geom.*;
	import __AS3__.vec.*;


	/**
	 * ...
	 * @author http://www.murmadillo.tut.su/
	 */
	public class DocCube extends Sprite
	{
		[Embed(source = 'pic/balls.jpg')] 
		private var Pic0:Class;

		[Embed(source = 'pic/baltimor_1.JPG')]
		private var Pic1:Class;

		[Embed(source = 'pic/blue_campanula.jpg')]
		private var Pic2:Class;

		[Embed(source = 'pic/five.jpg')]
		private var Pic3:Class;

		[Embed(source = 'pic/rose.jpg')]
		private var Pic4:Class;

		[Embed(source = 'pic/violet_flower.jpg')]
		private var Pic5:Class;

		private var worldSp:Sprite,//на спрайте будут лежать грани
		sp:Sprite,
		i:int,
		bmd:BitmapData,
		pic:Class,
		pVec:Vector3D,
		mat3D:Matrix3D,
		slider:Slider,
		pp:PerspectiveProjection;


		public function DocCube()
		{
			pVec = new Vector3D(); 
			mat3D = new Matrix3D();
			addChild(worldSp = new Sprite());
			//worldSp.transform.matrix3D = mat3D.clone();
			worldSp.transform.perspectiveProjection = new PerspectiveProjection();
			pp = worldSp.transform.perspectiveProjection;
			worldSp.x = 275;
			worldSp.y = 220;
			pp.fieldOfView = 100;
			//pp.projectionCenter = new Point( -500, -500);
			
			for (i = 0; i < 6; i++) {
				worldSp.addChild(sp = new Sprite());
				pic = this["Pic" + i];
				bmd = new pic().bitmapData;
				if (i<4){
					pVec.x = pVec.y = 0;
					pVec.z = -100;
					mat3D.appendRotation(90, Vector3D.Y_AXIS);
				}else {
					pVec.x = 0;
					pVec.y = 0;
					if (i == 5) pVec.z = 100;
					if (i==6) pVec.z = -100;
					mat3D = new Matrix3D();
					mat3D.appendRotation(90, Vector3D.X_AXIS);
				}
				pVec = mat3D.transformVector(pVec);
				sp.transform.matrix3D = mat3D.clone();

				sp.x = pVec.x;
				sp.y = pVec.y;
				sp.z = pVec.z;
				
				trace(sp.transform.getRelativeMatrix3D(worldSp).position.z);

				//sp.graphics.beginFill(0);sp.graphics.drawRect(0, 0, 20, 20);//центры

				sp.addChild(sp = new Sprite());
				sp.graphics.beginBitmapFill(bmd);//залить рисунком
				sp.graphics.drawRect( 0, 0, 200, 200);
				sp.alpha = 1;
				sp.x = -100;
				sp.y = -100;
			}
			worldSp.rotationX = 0;
			child3DSort(worldSp, this);

			for (i = 0; i < 4; i++) {
				addChild(slider = new Slider);
				slider.x = 100 + 100 * i;
				slider.y = 20;
				slider.liveDragging = true;
				slider.setSize(200,10);
				slider.rotation = 90;
				slider.maximum = 360;
				slider.minimum = 0;
				slider.tickInterval = 30;
				slider.name = ''+i;


				slider.addEventListener(SliderEvent.CHANGE, announceChange);
			}
		}

		private function byDist(v:Array,w:Array):Number {  
			if (v[0]>w[0]){  
				return -1;  
			} else if (v[0]<w[0]){   
				return 1;  
			} else { 
				return 0; 
			}
		}

		//_general спрайт с гранями; _doc - документ класс
		private function child3DSort(_general:Sprite, _doc:Sprite):void {
			var len:int = _general.numChildren,
			dist:Number,
			chSp:Sprite,
			distArray:Array = [],
			spArr:Array = [];

			for (i = 0; i < len; i++) {
				spArr[i] = chSp = _general.getChildAt(i) as Sprite;
				dist = chSp.transform.getRelativeMatrix3D(_doc).position.z;
				distArray[i] = [dist, i];
			}
			distArray.sort(byDist);
			for (i = 0; i < len; i++) {//сортировка граней
				_general.setChildIndex(spArr[distArray[i][1]],i);
			}
		}

		private function announceChange(e:SliderEvent):void {
			if (e.target.name == '0') worldSp.rotationX = e.target.value;
			if (e.target.name == '1') worldSp.rotationY = e.target.value;
			if (e.target.name == '2') worldSp.rotationZ = e.target.value;
			if (e.target.name == '3') pp.fieldOfView = 1+e.target.value/2.1;
			child3DSort(worldSp, this);//и посортируем грани
		}

	}
	
}


Архив, содержащий все проект флеш девелоп "куб с рисунками на гранях и регулировкой фокуса".