Flahs'ta ActionScript 3.0 ile 3D Küre Yapımı PDF Yazdır e-Posta
Flahs'ta ActionScript 3.0 ile 3D Küre YapımıAşağıdaki kodlar 3 boyutlu bir küre ortaya çıkaracak. Bu kürenin ortaya çıkması için herhangi bir çizim vb. işlem yapmıyoruz. Sadece kodlar aracılığı ile güzel ve fare ile oynatılabilir bir küre ortaya çıkmış oluyor...
1. ActionScript 3.0 destekli bir flash sayfası açalım.
2. Action penceresini açalım (F9)
buraya aşağıdaki kodları yapıştıralım.
Kodlar:

 
var fLen:Number=2000;
var spBoard:Sprite=new Sprite();
this.addChild(spBoard);
spBoard.x=200;
spBoard.y=190;
var shBack:Shape=new Shape();
spBoard.addChild(shBack);
drawBack();
var shCube:Shape=new Shape();
spBoard.addChild(shCube);
var doRotate:Boolean=false;
var prevX:Number;
var prevY:Number;
var curTheta:Number=-10;
var curPhi:Number=60;
var nMesh:Number=30;
var tilesArray:Array=[];
var tilesColors:Array=[];
function drawBack():void {
shBack.graphics.lineStyle(1,0x000000);
shBack.graphics.beginFill(0x000000);
shBack.graphics.drawRect(-160,-160,320,320);
shBack.graphics.endFill();
}
setTilesArray();
renderView(curTheta,curPhi);
function setTilesArray():void {
var i:int;
var j:int;
var istep:Number;
var jstep:Number;
istep=(7/4)*Math.PI/nMesh;
jstep=Math.PI/nMesh;
for (i=0; i<=nMesh; i++) {
 tilesArray[i]=[];
 for (j=0; j<=nMesh; j++) {
  tilesArray[i][j]=[90*Math.cos(istep*i)*Math.sin(jstep*j),90*Math.sin(istep*i)*Math.sin(jstep*j),90*Math.cos(jstep*j)];
 }
}
}
function renderView(t:Number,p:Number):void {
var i:int;
var j:int;
var n:int;
var distArray=[];
var dispArray=[];
var tilesNewArray=[];
var midPoint:Array=[];
var dist:Number;
var depLen:Number;
var coloFactor=1.2;
t=t*Math.PI/180;
p=p*Math.PI/180;
shCube.graphics.clear();
for (i=0; i<=nMesh; i++) {
 tilesNewArray[i]=[];
 for (j=0; j<=nMesh; j++) {
  tilesNewArray[i][j]=pointNewView(tilesArray[i][j],t,p);
 }
}
for (i=0; i<nMesh; i++) {
 if (firstRun) {
  tilesColors[i]=[];
 }
 for (j=0; j<nMesh; j++) {
  midPoint[0]=(tilesNewArray[i][j][0]+tilesNewArray[i+1][j][0]+tilesNewArray[i][j+1][0]+tilesNewArray[i+1][j+1][0])/4;
  midPoint[1]=(tilesNewArray[i][j][1]+tilesNewArray[i+1][j][1]+tilesNewArray[i][j+1][1]+tilesNewArray[i+1][j+1][1])/4;
  midPoint[2]=(tilesNewArray[i][j][2]+tilesNewArray[i+1][j][2]+tilesNewArray[i][j+1][2]+tilesNewArray[i+1][j+1][2])/4;
  dist=Math.sqrt(Math.pow(fLen-midPoint[0],2)+Math.pow(midPoint[1],2)+Math.pow(midPoint[2],2));
  distArray.push([dist,i,j]);
  if (firstRun) {
   tilesColors[i][j]=combineRGB((2*coloFactor*midPoint[2]+100)*0.8+70,(2*coloFactor*midPoint[1]+100)*0.8+70,(2*coloFactor*midPoint[0]+100)*0.8+70);
  }
 }
}
distArray.sort(byDist);
for (i=0; i<=nMesh; i++) {
 dispArray[i]=[];
 for (j=0; j<=nMesh; j++) {
  dispArray[i][j]=[fLen/(fLen-tilesNewArray[i][j][0])*tilesNewArray[i][j][1],-fLen/(fLen-tilesNewArray[i][j][0])*tilesNewArray[i][j][2]];
 }
}
depLen=distArray.length;
shCube.graphics.lineStyle(1,0x333333);
for (n=0; n<depLen; n++) {
 i=distArray[n][1];
 j=distArray[n][2];
 shCube.graphics.moveTo(dispArray[i][j][0],dispArray[i][j][1]);
 shCube.graphics.beginFill(tilesColors[i][j],1.0);
 shCube.graphics.lineTo(dispArray[i][j+1][0],dispArray[i][j+1][1]);
 shCube.graphics.lineTo(dispArray[i+1][j+1][0],dispArray[i+1][j+1][1]);
 shCube.graphics.lineTo(dispArray[i+1][j][0],dispArray[i+1][j][1]);
 shCube.graphics.lineTo(dispArray[i][j][0],dispArray[i][j][1]);
 shCube.graphics.endFill();
}
firstRun=false;
}
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;
}
}
function pointNewView(v:Array,theta:Number,phi:Number):Array {
var newCoords:Array=[];
newCoords[0]=v[0]*Math.cos(theta)*Math.sin(phi)+v[1]*Math.sin(theta)*Math.sin(phi)+v[2]*Math.cos(phi);
newCoords[1]=-v[0]*Math.sin(theta)+v[1]*Math.cos(theta);
newCoords[2]=-v[0]*Math.cos(theta)*Math.cos(phi)-v[1]*Math.sin(theta)*Math.cos(phi)+v[2]*Math.sin(phi);
return newCoords;
}
function combineRGB(red:Number,green:Number,blue:Number):Number {
var RGB:Number;
if (red>255) {
 red=255;
}
if (green>255) {
 green=255;
}
if (blue>255) {
 blue=255;
}
if (red<0) {
 red=0;
}
if (green<0) {
 green=0;
}
if (blue<0) {
 blue=0;
}
RGB=(red<<16) | (green<<8) | blue;
return RGB;
}
spBoard.addEventListener(MouseEvent.ROLL_OUT,boardOut);
spBoard.addEventListener(MouseEvent.MOUSE_MOVE,boardMove);
spBoard.addEventListener(MouseEvent.MOUSE_DOWN,boardDown);
spBoard.addEventListener(MouseEvent.MOUSE_UP,boardUp);
function boardOut(e:MouseEvent):void {
doRotate=false;
}
function boardDown(e:MouseEvent):void {
prevX=spBoard.mouseX;
prevY=spBoard.mouseY;
doRotate=true;
}
function boardUp(e:MouseEvent):void {
doRotate=false;
}
function boardMove(e:MouseEvent):void {
var locX:Number=prevX;
var locY:Number=prevY;
if (doRotate) {
 prevX=spBoard.mouseX;
 prevY=spBoard.mouseY;
 curTheta+=(prevX-locX);
 curPhi+=(prevY-locY);
 renderView(curTheta,curPhi);
 e.updateAfterEvent();
}
}
Herhangi bir çizim vb. yapmadan sadece Action Script 3.0 kodları ile güzel bir küre ortaya çıkmış oldu.
Artık önizleme yapabilirsiniz.

 ***Bu yazı 495 defa okunmustur.***
 

Yorum ekle


Güvenlik kodu
Yenile

ÜYE GİRİŞ FORMU



KIRGIZCA - RUSÇA - TÜRKÇE SÖZLÜKLER

TÜRKÇE ÖĞRETİMİ

İSTATİSTİKLER

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterBugün5
mod_vvisit_counterDün149
mod_vvisit_counterToplam349663

Online : 6
IP Numaranız: 38.107.191.102
Tüm Hakları Saklıdır. Sitedeki ders ve makaleler kaynak göstermek şartı ile kullanılabilir. www.kerimsarigul.com 2005 - 2009