Papervision Küp ve Kaplamalar

Bu makalede 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.
İyi çalışmalar.

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

5 Comments »

 
  • kırgın diyor ki:

    tuncay papervision derslerini takip ediyorum neden kestin devamını bekliyorum.Kolay gele.

  • TUNCAYS diyor ki:

    Takip edildiğini bilseydim kesmezdim dostum :)
    Kısa zamanda bi şeyler eklemey çalışacağım.

  • kırgın diyor ki:

    Teşekkürler tuncay =) İyi çalışmalar.

  • Merhabalar Tuncay. Güzel bi anlatım keşke daha fazlası olsa da bizde bu işlerle iyice haşır neşir olabilsek detirtiyor :) Ama benim için bi başlangıç olacak.. Teşekkürler..

  • TUNCAYS diyor ki:

    Aslında bloga yazmayı uzun süredir bıraktım.
    Yazsam süper olacka.Buraya yazmadığım her şeyi unutuyorum.
    En kısa zamanda yine zaman ayırmaya çalışacağım.İlgilendiğiniz için ben teşekkür ederim.

 

Bir Cevap Yazın