Anasayfa Eğitseller Programlama Xna Mesh Yükleme

Xna Mesh Yükleme PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 3
ZayıfEn iyi 
Eğitseller - Programlama
Pazar, 16 Mart 2008 03:39

XNA de Mesh Yükleme

 

Öncelikle microsoft.com adresinden XNA GSE 1.0 Refresh,C# express edition 2005 ve XNA redistributable uygulamalarını indirip kuruyoruz…

XNA redist -> C# express edition -> xna gse 1.0 refresh şeklinde bir sırayla yüklemenizi öneririm...

 

Yükleme işlemi tamamlandıktan sonra XNA ile çalışmalarımıza başlayabiliriz…

 

İlk önce 3D Grafik Uygulamalarında bir nesne oluşturalım…

 

Örnek olsun diye Cinema4D de bir nesne yaratacağız.Mantığı diğer 3d grafik programlarında da aynıdır

 

http://directx.oyungelistirici.net/pix/1.jpg

 Resim-1: Cinema4D 8 in Kullanıcı Arayüzü

 

 

http://directx.oyungelistirici.net/pix/2.jpg

 

Örnek olarak Bir Sphere(Küre) Nesnesi ekledim…

Şimdi yapacağımız işlem Xport adındaki Cinema4d için hazırlanmış .X oluşturucusu pluginini kullanaraktan X dosyası yaratmak…

 

http://directx.oyungelistirici.net/pix/3.jpg

 

 

Görüldüğü üzere File-Export menüsünün alt dalı olarak X-File Export die bir seçenek çıktı.Şimdi bu seçeneğe tıklayalım

 

Karşımıza hangi isimle kayıt edeceğimize dair bir Diyalog penceresi çıktı.Bir isim verelim.Örneğin deneme.Enter a yada Tamam a basınca.Bir diyalog penceresi gelecektir.Aynen aşağıdaki gördüğümüz gibi

 

http://directx.oyungelistirici.net/pix/4.jpg

 

Burada export etmek istediğimiz bilgileri ayarlayabilirsiniz.Nitekim Bones,Animation,Frame vesaire

Ok e tıklayarak Export işlemini tamamlayalım

Dosyamız oluşturulmuş oldu

Şimdi XNA tarafına geçelim…

 

 

http://directx.oyungelistirici.net/pix/5.jpg

 

 

Xna bizim yerimize otomatikman kod oluşturuyor.Gerekli öğeleri projemize ekleyelim.biz deneme.x ismini vermiştik hatırlarsanız…

 

 http://directx.oyungelistirici.net/pix/6.jpg

 

 

İlgili projemize sağ tuş Add Existing Item tıklayıp deneme.x i projeye ekliyoruz

 

 

http://directx.oyungelistirici.net/pix/7.jpg

 

 

Deneme.X dosyamıza sağ tıklayarak Properties den Asset Name ini deneme olarak değiştirin…Asset name ler ilgili öğelere kodlamada erişmek için kullanılan anahtar sözcüklerdir.Kodlama yapınca daha iyi anlayacaksınız

Şimdi Mesh kodlamaya geçelim.Öğelerimizi eklediğimize göre şimdi gönül rahatlığıyla Meshlerle çalışabiliriz…

İlk önce GraphicsDeviceManager ve Content Manager tanımladığımız yerlere birkaç değişken ekleyeceğiz

 

1)Modelin pozisyonunu tutan Vector3 tipinde bir değişken;

Vector3 modelpoz = Vector3.Zero;

 

 

2)Modeli döndürmek için kullanabileceğimiz bir kayan noktalı sayı tipi(float);

 

 

float modelrot = 0.0f;

 

 

3)Kamera Pozisyonunu tutan Vector3 tipinde bir değişken;

 

 

Vector3 kamerapoz = new Vector3(50.0f, 50.0f, 500f);

 

 

4)Açı Oranımızı ayarlamak için kullanabileceğimiz bir float tipi değişkenimiz;

 

 

float aci_oran = 1.5f;

 

 

 

5)Modelimizi saklayacak Model tipi değişkenimiz;

Model modelimiz;

Değişkenlerimizi tanımladığımıza göre bu değişkenlerimizi kullanalım…

 

 

LoadGraphicsContent fonksiyonunu bulun ve

 

 

 

if (loadAllContent) kodlamasının içerisine aşağıdaki kodu ekleyiniz…

 

modelimiz = content.Load<Model>("deneme");

 

 

Update fonksiyonumuza gelip aşağıdaki kodu ekleyiniz yada dilediğinize göre değiştiriniz…

 

modelrot += 360.0f;

 

Bu kodlama modelimizin ne tarz bir matematiksel ifade ile döndürüleceğini belirtir…

 

Sonraki işlemimiz Draw Fonksiyonuna gelip aşağıdaki kod yapısını eklemek olacaktır

 

graphics.GraphicsDevice.Clear(Color.Black);

       

Matrix[] transformasyon = new Matrix[modelimiz.Bones.Count];

modelimiz.CopyAbsoluteBoneTransformsTo(transformasyon);

     

foreach (ModelMesh mesh in modelimiz.Meshes)

{          

  foreach (BasicEffect effect in mesh.Effects)

  {

    effect.DiffuseColor = new Vector3(100.0f, 200.0f, 100.0f);

    effect.AmbientLightColor = new Vector3(100.0f, 100.0f, 100.0f);

    effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationY(modelrot)

                    * Matrix.CreateTranslation(modelpoz);

    effect.View = Matrix.CreateLookAt(camerapoz,Vector3.Zero,Vector3.Up);

    effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),

                    aci_oran, 1.0f, 10000.0f);

   }         

   mesh.Draw();

}

 

Bu kodlamada ilk önce yaptığımız işlem Ekranı siyah bir renkle temizlemek oldu.

Sonraki işlemimiz modelimizde bulunan Bonelerin sayısını bir Matrix dizisine aktarmak oldu.

Eğer modelimiz Bone li olsaydı bu çok işimize yarardı.Modelimiz normal bir primitif

nesne olan Sphere(Küre) olduğundan böyle bir gereksinime ihtiyaç yok.

Foreach döngümüzün ilk ayağı olan ModelMesh nesnesi modelimizde bulunan meshler

üzerinde işlem yapacaktır.İç foreach döngümüzde Effect uyguluyoruz.

Yalnız bu efekt sistemi HLSL yada diğer sistemler gibi değil tamamen XNA içine entegre

edilmiş bir Efekt sistemidir.bir HLSL,CGFX kadar yetenekli değildir…

 

Effect.diffusecolor da ilgili modele renk verebiliyoruz.Nitekim ben Turkuazımsı bir renk tercih ettim

Diğer kodlamalar sırasıyla world,view ve projection işlemleri ile alakalıdır.Bunlar kamera pozisyonu,

model pozisyonlarını ayarlamamızda işimize yarıyorlar.Ayrıca bu nesneler shader dillerinde de kullanılabiliyor…

45 derecelik bir perspektif görünüm yakalayarak modelimizi ekranda sürekli olarak döndürüyoruz…

Mesh.draw diyerek kendi fonksiyonumuzu yeniden çağırıyoruz ki Model gösterme işlemimiz sürekli olsun…

Projemizi çalıştırıyoruz ve böylece aşağıdaki gibi bir görünüme

 

kavuşuyoruz.

 

http://directx.oyungelistirici.net/pix/8.jpg

 

 

İşte bu kadar

XNA de Mesh yükleme olayı bu kadar basittir

 

Saygılarımla

 

İbrahim Ersoy

 

Son Güncelleme ( Pazar, 16 Mart 2008 15:10 )
  Yorum yok.
Yorum ekle. (0 yorum)

 

OyunGelistirici.net - Türk Oyun Yapımcılarının Buluşma Noktası

Bu sitede yazılan tüm yazıların hakları yazarlarına aittir. İzin alınmadan yayınlanamaz.

Bu sitede Firefox kullanmanız önerilir. En az 1024 x 768 masaüstü çözünürlüğü tavsiye edilir.