package {
import __AS3__.vec.Vector;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.display.TriangleCulling;
import flash.events.Event;
import flash.geom.Vector3D;
[SWF(width="700",height="400",backgroundColor="0x0",frameRate="24")]
public class Astro11 extends Sprite{
[Embed(source="img/panoramic.jpg")]
private var TestImage:Class;
private var img:Bitmap;
private var container:Sprite;
public function Astro11(){
container = new Sprite();
container.x = stage.stageWidth/2;
container.y = stage.stageHeight/2;
addChild(container);
img = new TestImage();
addEventListener(Event.ENTER_FRAME,rotate);
}
private function rotate(e:Event):void{
const DUMP:Number = 2.5e-3;
var dx:Number = (mouseX - stage.stageWidth/2);
drawScene(dx*DUMP);
}
private function drawScene(angle:Number):void{
container.graphics.clear();
const TOTAL:int = 30;
const R:Number = 200;
const F:Number = 200;
const OFFSET:Number = -Math.PI/2;
angle += OFFSET;
var w:Number = 2*Math.PI*R/TOTAL;
var h:Number = img.height;
var vertices:Vector.<Number> = new Vector.<Number>();
var indices:Vector.<int> = new Vector.<int>();
var uvtData:Vector.<Number> = new Vector.<Number>();
for (var i:int=0; i<TOTAL; i++){
var dt:Number = 2*Math.PI/TOTAL;
indices.push(2*i,2*(i+1),2*i+1, 2*i+1,2*(i+1),2*(i+1)+1);
if (i==0){
var v0:Vector3D = new Vector3D(R*Math.cos(angle+i*dt),-h/2,R*Math.sin(angle+i*dt));
var v1:Vector3D = new Vector3D(R*Math.cos(angle+i*dt),h/2,R*Math.sin(angle+i*dt));
var v2:Vector3D = new Vector3D(R*Math.cos(angle+(i+1)*dt),-h/2,R*Math.sin(angle+(i+1)*dt));
var v3:Vector3D = new Vector3D(R*Math.cos(angle+(i+1)*dt),h/2,R*Math.sin(angle+(i+1)*dt));
var t0:Number = F/(F + v0.z);
var t1:Number = F/(F + v1.z);
var t2:Number = F/(F + v2.z);
var t3:Number = F/(F + v3.z);
vertices.push(v0.x*t0,v0.y*t0, v1.x*t1,v1.y*t1, v2.x*t2,v2.y*t2, v3.x*t3,v3.y*t3);
uvtData.push(i/TOTAL,i/TOTAL,t0, i/TOTAL,1,t1, (i+1)/TOTAL,0,t2, (i+1)/TOTAL,1,t3);
}
else{
v2 = new Vector3D(R*Math.cos(angle+(i+1)*dt),-h/2,R*Math.sin(angle+(i+1)*dt));
v3 = new Vector3D(R*Math.cos(angle+(i+1)*dt),h/2,R*Math.sin(angle+(i+1)*dt));
t2 = F/(F + v2.z);
t3 = F/(F + v3.z);
vertices.push(v2.x*t2,v2.y*t2, v3.x*t3,v3.y*t3);
uvtData.push((i+1)/TOTAL,0,t2, (i+1)/TOTAL,1,t3);
}
}
container.graphics.beginBitmapFill(img.bitmapData);
container.graphics.drawTriangles(vertices,indices,uvtData,TriangleCulling.POSITIVE);
container.graphics.endFill();
}
}
}
Powered by blog Boreal Kiss 2008.