Papervision: 3D küp ve kaplamalar
Tuncay Özbal Tarih: 13/09/2008 Yorum: 12 adet
Okunma : 701 Tutanlar: Bu yazıyı 3 kişi tuttu.
Bu derste 3D bir kübü yapılandıracağız.Ve farklı materyallerle kaplıyacağız. Kamera ve renderer-lardan bahsedeceğiz.
Bu çalışmamız sadece konuya giriş niteliğinde olduğundan class yazmadan sadece FLA ya kod yazarak çalışacağız.Öncelikle Papervision u çalıştırabilmeniz için Class dosyalarına sahip olmanız gerekir.Buradan indirebilirsiniz.
Yeni bir Flash(AS3) dosyası açıp indirdiğimiz dosyanın içinde org klasörüyle aynı dizine kaydediyoruz.
Herşey tamamsa kod yazmaya gecebiliriz.
import org.papervision3d.view.Viewport3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.MovieAssetMaterial;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.utils.MaterialsList;
Bu kod bloğunda kullanacağımız sınıfları import ettik.Daha kolay yoldanda bunu yapabilirdik. Örneğin:
import org.papervision3d.materials.*;
demiş olsaydık tüm materyalleri tek satırda import ederdik.Ancak kullanmadığımız sınıfları import etmek bize performans kaybettirecektir.Bunun için her bir sınıfı ayrı ayrı import edeceğiz.Ancak bu sandığınız kadar zahmetli bir iş değil.Çok kolay bir yöntemi var ancak bu yöntemi diğer yazılarda anlatacağım.Şimdilik kendiniz yazmanız yararınızadır. Sınıfın yapısını incelemiş olursunuz.
Import aşamasını geçtiğimzie göre sahnemizi ve kameralarımızı yapılandıralım:
var viewport:Viewport3D
var sahne:Scene3D
var kamera:Camera3D
var renderer:BasicRenderEngine
En temel ekipmanlarımız bunlar ve ilerde bir Base class yazıp bunlarıda sürekli tanımlamaktan kurtulacağız.Yoksa her çalışmada yeniden yeniden tanımlamak bize zaman kaybettirir.Objelerimizi tanıyalım:
Viewport:Bakış açısıdır.Movieclip tipindedir.Aynı zamanda sahnemizi taşır.Gerekirse görüntüsü kaplama olarak bile kullanılabilir.Bir çok viewport çeşidi ve her birinin ayrı işlevi vardır.Biz en çok Viewport3D yi kullanacağız.
Sahne:3D objeleri taşır.Obje ekleyip çıkartabiliriz.Başka sahne çeşitleride vardır. Ama biz hep Scene3D yi kullanacağız.
Kamera:Sahneye bakabilmemizi sağlar."org\papervision3d\cameras" dizininde başka kameralarda vardır.Genelde Camera3D yi kullanacağız.
Renderer:Hesaplayıcı.Sahneyi hesaplayıp koda çevirir."org\papervision3d\render" dizinde tanımlıdırlar.BasicRenderEngine-i her uygulamamızda kullanacağız.
Şimdide sırada tanımladığımız objeleri yapılandırmaya geldi:
viewport=new Viewport3D(800,600);
//800*600 sahne boyunu temsil etmektedir.Başka parametreleride vardır ancak bunlara 3DEventlarla birlikte değineceğiz.
sahne=new Scene3D();
//Parametresi yoktur
kamera=new Camera3D();,
//Parametresi vardır.Ancak giriş zorunluluğu yoktur.
renderer=new BasicRenderEngine();
//Parametresi yoktur.
this.addChild(viewport);
//Viewportu sahneye(Flash sahnesi) eklemezsek görüntüyü alamayız.
Basit olarak sahnemizide oluşturduk.Şimdi 2 eksiğimiz var.Birincisi sahnemizde hiç bir obje yok.İkincisi sahnemiz render edilmiyor. Öncelikle ilk aşamayı yapalım:
var cizgi_kaplama:WireframeMaterial=new WireframeMaterial(0xFF00FF,1,1);
//Bir tane WireFrameMaterial tanımladık.Bu kaplama malzemesi tel kafes şeklinde kaplama //yapacaktır.İlk parametre kaplamanın rengini belirler.İkinci parametre çizginin alpha //değerini belirtir.Üçüncü parametre çizginin kalınlık değeridir.
var renk_kaplama:ColorMaterial = new ColorMaterial(0xFF00FF, 1);
//ilk parametre renk, ikinci parametre alpha
var resim_kaplama:BitmapFileMaterial=new BitmapFileMaterial("1.jpg");
resim_kaplama.precise=true
//Bu kaplamada resim dosyasının yolunu yazıyoruz
//precise özelliği varsayılan olarak false tur.Bunu true yaparak resmin içeri doğru çökmesini engelliyoruz.
var mc_kaplama:MovieAssetMaterial=new MovieAssetMaterial("library_mc",true,true);
//Bir MovieClibi de kaplama olarak kullanabiliriz.Bunun farklı bir çok yolu var.Bu örnekte Bir mc oluşturup linkagesini
//library_mc olarak değiştirelim.
//İkini parametre mc nin transparan özelliğini
//Üçüncü parametre animasyon olup olmayacağını belirler
var liste:MaterialsList = new MaterialsList( { front:cizgi_kaplama, back:renk_kaplama, top:mc_kaplama, bottom:mc_kaplama, left:resim_kaplama, right:resim_kaplama});
//Küp özel bir format olduğundan her yüzeyine ayrı kaplama malzemesi kullanabiliriz.
//Hepsine aynı malzemeyide kullanabiliriz.Bunun için MaterialsList i kullanıyoruz.
//Tüm yüzeyler aynı olacaksa all diyerek tümünü değiştirebiliriz
//MaterialsList sadece küplerde değil bdiğer bazı özel 3D objelerdede kullanılabilir
var kup:Cube = new Cube(liste, 500, 500, 500);
//ilk parametre kaplamanın malzemesi
//ikinci parametre genişlik
//üçüncü parametre derinlik
//dördüncü parametre yükseklik
sahne.addChild(kup);
//ve kübümüzü sahneye ekledik.
//sıra geldi render almaya.
//Sürekli render alacağımızdan bir event oluşturup içerisinde
//sahneyi sürekli hesaplıyacağız.
this.addEventListener(Event.ENTER_FRAME,render);
function render(e:Event):void {
renderer.renderScene(sahne, kamera, viewport);
var uzaklikX:Number = mouseX - stage.stageWidth * 0.5;//mouseX in sahnedeki konumu
var uzaklikY:Number = mouseY - stage.stageHeight * 0.5;//mouseY nin sahnedeki konumu
kup.rotationY += uzaklikX * 0.05;//Bu konuma göre küp Y rotasyonunda dönecektir.
kup.rotationX += -uzaklikY * 0.05;
//Sahne sürekli render edildiğinden kup mouse a duyarlı olacaktır.
}
İlerde tüm objeleri dahada detaylı olarak inceliyeceğiz.Örneğin kübün tel kafes yüzeyinde neden sadece 2 tane yüzey olduğunu mouse ile hangi yüzeye tıklandığını nasıl bulacağımızı bir sonraki yazıda inceliyeceğiz. Fla dosyası: kup.zip
İyi çalışmalar.
Eğer yazabilirsem bundan 2 ders sonra bahsettiğin konulara giriş yapmayı deniyeceğim. Işık,gölge,modifier ve 3DsMax ile en kolay etkileşim.
bende bununla ilgili çalışıyorum fakat plane diye bir methodun olmadığını söylüyor :)
//öncelikle Plane sınıfını import etmelisin
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.materials.ColorMaterial;
//sonrada bi plane tanımlayıp sahneye eklemelisin
var zemin:Plane = new Plane(new ColorMaterial(0xFF00FF, 1), 1000, 1000, 10, 10);
sahne.addChild(zemin);
.
yardım için teşekkürler yanlız problem bundan değilmiş. ben bu dosyaları yanlış bir yere koymuşumda ondan tanımıyormuş.
merhaba Tuncay
bende bir ornek hazırladım. örnek
seninkinide simdi inceleyecegim umarıne 3d event felan vardır :)
tesekkürler kolaygelsin..<<
merhaba
örneginede kodlara baktım istedigim gibi mouse3D örneklemissin tesekkürler
ama TBase dosyasını verir sen çalıstırayım onu unutmussun.
kolaygelsin..<<
Güzel çalışma olmuş Mehmet.eline sağlık
sanırım face3D yi kullanmışsın :)
bende yaşlılıktan hep yanlış dosya eklemişim sanırım:
merhaba
aslında faces kullanamadım yani direk faces i yönetmenin yolunu bulamadım kenisinde displayObject3D de olan kontrol yapısı yok sanırım.
"faces material ile kaplana bildigine göre Sprite yada MovieClip olmalı eger öle ise en azından x,y si ile oynaya bilmeliyiz."
faces i hareket ettirmeyi kafama koydugum dan bende faces i hareket ettirmek için faces e baglı 3 vertex i hareketlendirdim.
benim suan asıl çözmeye çalıstıgım konu
displayObject.buttonMode olayı
vievport a buttonMode = true verdigimiz de primitives lere event eledigimiz de buttonMode ler çalısıyor ancak MovieMaterial içindeki butonların buttonMode leri aktif deil bu sorunu nasıl asabiliriz.
yani bi haber mdulu yaptım diyelim içinde buton scroll vs.. var bunu material olarak kullandım butonlar çalısıyor ama buttonMode leri aktif degil :S
tesekkürler kolaygelsin..<<
sanırım buu konudada yaptığım bir örnek vardı. bulursam eklerim. iyi çalışamalar.
ne yaptıysam MovieMaterial içindeki butonlara movieClip lere buttonMode veremedim :S
tesekkürler..<<
Makale
İlişkili makale bulunamadı.
Haber
İlişkili haber bulunamadı.
Etkinlikler
Toplantı
Kahraman ve need4code.com Projesi Connect Toplantısı
Kahraman ve need4code.com Projesi Connect Toplantısı
Selam arkadaslar,
Programlama ile uğraşanların hayatlarını kolaylaştıracak desktop ve web tabanlı ortak iki proje ile ilgili 3. toplantımızı 3Aralık...
Kategori:
Toplantı







süpersin eline salık
event vertex ve faces deformans yonları golge ve ışık ayarlarını da bekliyoruz..
kolay gelsin..<<