Yazılarımı Daha Kolay Takip Etmek İçin Tıklayın!

XNA’de MATRIX YAPISI ve MATRİSLER

yazan: 12/6/2008 8:10:00 AM

Merhabalar; bir önceki yazımda kısaca XNA’de hatta ve hatta genel oyun programlama dünyasında matrislerin nasıl kullanıldığından ve ne gibi avantajlar sağladığından kısaca bahsetmiştim. Bu yazımda ise XNA’de matris yapısı (struct) ile neler yapabiliriz, hangi metodu ne amaçla kullanabiliriz gibi konulardan bahsedeceğim.

Öncelikle tarzım olduğu üzere metotları tanıyalım, sonra nasıl kullanıldıklarından bahsedeceğim.

CreateRotationX() ->

CreateRotationY() ->

CreateRotationZ() -> Z ekseni etrafında dönme hareketini sağlayacak olan matrisi geri döndürür.

CreateTranslation() -> Bir yada daha fazla eksene göre, dorusal hareket sağlayan matrisi geri döndürür.

CreateScale() ->  varlığı ölçekleyecek bir matris geri döndürür.

CreateLookAt() -> Kameranın bakış açısındakileri gösteren bakış matrisini (View matrix) oluşturur. Kameranın yerini, görüntülerin yerini ve hangi yönün yukarı olduğunu biz  belirleriz.

Not: Kamerayı monitörümüz aracılığı ile görebildiğimiz alan için, mönitörün ekranıdır diyebiliriz, sonuçta perspektif bir bakış açısında, görüntünün başladığı sınır ekrandır sonra z indexine göre görüntü derinlik kazanır. Yada basitçe bir FPS (counter strike gibi oyunlar) oyununda karakterimizin gözleri kameradır diyerek bunu kafamızda canlandıralım.

CreatePerspectiveFieldOfView() -> Perspektif izdüşüm kullanarak, görünür alanın matrisini yaratır, görünür dünyayı bir matrisle temsil eder. Bu method ile bakış matrisini (View Matrix), ekranın görüntü oranını (Aspect Ratio) , yakın  ve uzak görüntü sınırlarını paremetre olarak kullanırız, dolasıyla bu metod, View Matriximize bağımlıdır. Özetle bu metot bir perspektif görüş için ekrandan itibaren görebileceğimiz son sınıra kadar trepezoit (yamuk) bir alan oluşturur.

Not: Aspect Ratio (ekran oranı) GraphicsDevice türünden bir aygıtın,

aygıt.ViewPort.width / aygıt.ViewPort.Height  şeklinde kurabileceğimiz bir oranla hesaplanır. Sonuç genellikle 4:3 veya 16:9 gibi günümüz standart oranlarıdır.

CreatePerspectiveOffCenter() -> View Matrix’ten bağımsız bir perspektif izdüşüm matrisi oluşturur.

CreateWorld() -> Dünya matrisimizi oluşturur.

Şimdilik bu kadar metodu anlatmanın yeterli olduğunu düşünüyorum; fazlasını merak edenler MSDN kütüphanesinden yaralanabilirler.

Metotlarımızı tanıdığımıza göre şimdi matrisleri nasıl kullanacağımız konusuna değinelim;

Öncelikle dünyamızı temsil edecek bir dünya matrisi tanımlayalım;

 

Matrix worldMatrix = Matrix.Identity;

 

Matrix.Identity birim matris geri döndürür.

Şimdi de hareket işlemini nasıl sağlayacağımızı görelim;

 

worldMatrix*= Matrix.CreateRotationX(1.0f)*Matrix.CreateRotationY(1.0f);

 

Bir önceki yazımda iki matrisi çarparak haraket sağlayabileceğimizi anlatmıştım. Burda da yaptığımız aynen bu. Sadece matrisin değerlerini XNA’e tanımlatıyoruz, biz bildiğimiz klasik anlamda matrisi görmüyoruz. Gördüğünüz gibi her çarpı (*) işareti bir hareket anlamına geliyor, ikinci * işaretinde Y ekseni etrafında bir birimlik hareket, birinci * işaretinde de Y ekseni etrafında bir birimlik hareket yapıyoruz. Yani nesnemiz tek bir işlem dizisinde art arda iki hareket yapmış oluyor;

Gördüğünüz gibi XNA’de nesnelere hareket vermek bu kadar kolay, yazının başında verdiğim metotları da çarpma değeri ile çarparak hareketi çeşitlendirebiliriz.

Altın kural şu; önce, dünyayı nesneyi vb. tanımlayan bir matris atıyoruz, sonra hangi hareketi yaptıracağımıza karar veriyoruz, nesnemizi temsil eden matrisi hareketimizi sağlayacak matrisle çarpıp nesne matrisimize bu sonucu atıyoruz. Gördüğünüz gibi XNA’de matrislerden korkmanızı gerektirecek pek bir şey yok.

Currently rated 3.8 by 5 people

  • Currently 3.8/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , , , , , ,

XNA

Related posts

Comments

3/3/2010 12:37:13 PM

ucvhost

Thanks for the great post,i love to read articles that are informative and beneficial in nature.

ucvhost us

Add comment


(Will show your Gravatar icon)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

3/12/2010 4:01:06 AM

 

Yazar Hakkında

Erçin YONTAR
Erçin Yontar
1986 yılında Çorlu'da doğdu.İlk öğrenimini Ankara'da, ortaöğrenimini Eskişehir'de gördü.
Çanakkale 18 Mart Üniversitesi Bilgisayar Mühendisliği Bölümü mezunu.
Yazılım ile çok ilgili; Visual Studiosu daima açık :) bunun sayesinde Imagine Cup 2008 Türkiye 3.sü ve bir çok proje geliştiriyor.
Yazılım dışında : Frp hastası, rock/metal dinliyor, organizasyon işlerine merak sardı. Bunların yanında o bir; 
MCTS (Microsoft Certified Technology Specialist)



MSP (Microsoft Student Partner)

Bana posta atın Send mail

Favorilerine Ekle


Add to Technorati Favorites

 

Twitter - Ne Yapıyorum?

    Pages

      Recent comments

      Feragatname

      Burada yazan yazılar ve içerdikleri fikirler yazarına aittir. Başkasını ilgilendirmez. Yazıları kaynağını kopyaladığınız yazının içinde tıklanabilir link halinde belirtmek şartı ile olduğu gibi kullanabilirsiniz. Bu kuralları değiştirme hakkım saklıdır. Yarın bir gün benim yazım benim blogumdan başka bir yerde olamaz dersem Kopyaladığınız yazıyı da silmek zorundasınız. Bu işe girşen kişi bu koşulları ve doğan yasal yükümlülükleri kabul etmiş sayılır. Eyvallah diyen devam etsin.

      © Tüm hakları saklıdır.

      Giriş