Flash ve Papervision3D ile 3D Animasyon
30 Kasım 2007 – 16:23Flash içerisinde 3D animasyon geçen yıla kadar hemen hemen hayal sayılıyordu.Her ne kadar 3D başlığı altında animasyonlar yapılsada biz bunların gerçek anlamda 2 li koordinat sisteminin dışına çıkmadığını biliyorduk.Flash takipçileri mutlaka papervison3D hakkında birşeyler duymuşlardır.Papervision3D flash için 3D moturu hazırlıyor.
Papervison 3D sınıfını aşağıdaki adresten indirebilirsiniz.Bu makalede çok detaya girmeden nasıl kullanabileceğinizi anlatmaya çalışağım.
-
//Bizim için gerekli olan sınıflar import ediyoruz
-
import org.papervision3d.scenes.*;
-
import org.papervision3d.cameras.*;
-
import org.papervision3d.objects.*;
-
import org.papervision3d.materials.*;
-
//Yeni bir MovieClip oluşturuyoruz
-
var holder:MovieClip = new MovieClip();
-
//Movieclibi koordinatlarını sahnenin ortasına gelecek şekilde yerleştiriyoruz.
-
holder.x = stage.stageWidth / 2;
-
holder.y = stage.stageHeight / 2;
-
//Movie Clibi display liste ekliyoruz.
-
addChild(holder);
-
//Yeni bir sahne(scene) oluşturuyoruz.Ve arguman olarak holder movieclibin gönderiyoruz.
-
//holder movie clibimiz sahneye tutacak diyebiliriz
-
var scene:Scene3D = new Scene3D(holder);
-
//yenibir camera oluşturuyoruz.Bu arada eğer herhangi bir kameranız yoksa ekrandaki hiç bir
-
//şeyi göremezsiniz
-
var camera:Camera3D = new Camera3D();
-
//kütüphanemizde yer alan air logosunu yeni bir bitmap material olarak
-
//kullanıyoruz.Tabii ki kütüphanedeki logunun linkage ID vermenzi gerekiyor.
-
var imageMat:BitmapAssetMaterial = new BitmapAssetMaterial("air");
-
//burada materyalimizi iki yönlü olmasını saglıyoruz
-
//Default olarak bu true geliyor.yani materyalin sadece tek tarafı görükücektir.
-
imageMat.oneSide = false;
-
//Materyalimizin smooth özelliğini devrey sokuyuruz
-
//be şekilde bozulmaları engelliyebiliriz.
-
imageMat.smooth = true;
-
//Burada bir çember oluşturduğumuzu düşünün.Çemberin radyanını 820 olarak ayarlıyoruz
-
var radius:Number =820;
-
//Buradaki "angle" bizim açımız, okuldan hatırlarsak bir dairenin açısının
-
//360 derecedir.Ama biliyoruzki flash derece kavramı ile çalışmıyor
-
// " Math.PI * 2 " iki yarı dairenin birleşmesi demek yani bir tam daire
-
//yani Math.PI = 180 derecedir. bizim bunu 8 bölmemizin sebebi ise
-
// ekrana 8adet logo eklemek istememiz.Bu sayede her bir logu arasındaki ölçü eşit olacaktır
-
var angle:Number = (Math.PI * 2) / 8;
-
//İkinci açımız ise mouse her hareket ettiğinde değişecek olan açı
-
var angleX:Number=0;
-
//Burada for loop kullanarak logo sayısını arttırıyoruz.
-
for (var i:Number=0; i<8; i++) {
-
//Burada her loop ta yeni bir plane oluşturuyoruz
-
//plane verilen ilk parametre imageMat materyalimiz
-
//İkinci ve üçünçü parametremiz materyalimizin x ve y koordinatları
-
//Dördüncü ve beşimiz materyalimiz ise resmin üzerindeki denetim noktaları
-
//Numara arttıkça materyal üzerinde çizilen üçgen sayısı artacaktır.Bu çgen sayısı
-
//Materyalin nekadar iyi gözükeceğini belirliyor
-
//Tabii üçgen sayısı artıkça performans düşecektir
-
var plane:Plane = new Plane(imageMat, 304, 264, 10, 10);
-
//Materyalimizi tutan plane ait x ve y koordinatları
-
// x koordinatı ayarlıyoruz.Buradaki sin ve cos açıklamalrını başka bir makalede değineceğim
-
//Sadece birşeye değinmek istiyorum
-
//eğer bu animasyonu 2d oalrak yapmak isteseydik "z" koordinatına değil y koordinatına
-
// Math.sin in açısını vericektik.
-
plane.x = Math.cos(i * angle) * radius;
-
// z koordinatını ayarlıyoruz
-
plane.z = Math.sin(i * angle) * radius;
-
//Plane donme açısını burada hesaplıyoruz/
-
plane.rotationY = (-i * angle) * (180/Math.PI) + 270;
-
//Flashtaki display list mantığıyla papervisiondaki liste mantığı aynı
-
//oluşturduğumuz plane leri sahnenin içine koyuyoruz.
-
scene.addChild(plane);
-
}
-
//on enter frame eventini ayarlıyoruz.Sahneyi girer girmez çalışacak olan fonksiyonu belirliyoruz
-
this.addEventListener(Event.ENTER_FRAME,run);
-
function run(e:Event):void {
-
//Buradaki angle X cameranın hareketınde kameranın nerde yer alcagını belirliyor
-
angleX += (this.mouseX - 200) * 0.001;
-
//cameranın x posizyonunu ayarlıyoruz
-
camera.x = Math.cos(angleX) * 1000;
-
//camera nın z pozisyonunu ayarlıyoruz
-
camera.z = Math.sin(angleX) * 1000;
-
//burada camerayı render ediyoruz
-
scene.renderCamera(camera);
-
}
Papervision 3D Sınıfı
http://papervision3d.googlecode.com/files/Papervision3D_1_5.zip
Google Code sayfası
http://code.google.com/p/papervision3d/downloads/list
Papervision3D web sitesi
http://papervision3d.org/
Papervison3D Blog
http://blog.papervision3d.org
Papervison3D Wiki
http://wiki.papervision3d.org/index.php?title=Main_Page
Kaynak Dosyalar
Kolay Gelsin
Engin!

2 Responses to “Flash ve Papervision3D ile 3D Animasyon”
papervision3d sınıfını nasıl yükleyeceğiz? bu konuda bilgi verebilirmisiniz? ayrıca kodlarda olmaması gereken syntax hataları alıyorum. bunun sebebi sınıfın yüklenememiş olmasımıdır?
By no name on Oca 25, 2008
Merhaba
Sınıfların bulunduğu klasörü siteden indirdikten sonra
http://papervision3d.googlecode.com/files/Papervision3D_1_5.zip
“PV3D_1_5/src” içerisindeki klasörleri fla dosyasının bulunduğu klasörün içine atman gerekiyor.Daha sonra ise herhangi bir kod yazmadan aşağıdaki sınıfları fla dosyasına import et;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
Eğer herhangi bir hata vermediyse sınıfları doğru bir şekilde import etmişsin demektir.
Bu yol uzun geldiyse yukarıdaki dosyaları indir kod kısmında import edilen yerlere kadar sil, bu kadar.
Papervison3d sınıfının 2.0 versiyonu cıktı bır ay once kadar, ama malesef deneme şansım olmadı.Yukarıdaki ise 1.5 versiyonuna ait bir örnek.Bilgin olsun.
Kolay gelsin
By Engin Yöyen on Oca 25, 2008