Root > Documents > Programlama > WPF 3D World Applications
Cyber-Warrior.Org \ Doküman \ Programlama > WPF 3D World Applications
Madde
  Yazar : S!LV3R
  Date : 05.06.2011 19:43:21
 
# WPF 3D World Applications
 

3 boyutlu evren kavrami size neyi çagristirir? Ya da söyle sormak daha dogru sanirim; biz evreni veya çevremizdeki cisimleri nasil görüyoruz?

Sakin 3D gördügünüzü sanmayin; biz cisimleri 2D olarak görüyoruz. 3D görmek için farkli koordinatlarin birlesim noktasini ayni düzlem ve ayni açidan görebilmek gerekir. Günlük hayatta fotograf makinalari, kameralar vs. gibi dijital aletler bize bunu sagliyor. Onun disinda sahip oldugumuz en büyük nimet olan gözümüzde bize bu olanagi sagliyor aslinda; önemli olan bakis açimiz. Daha iyi anlasilmasi için sekillerden yararlanmak daha iyi olacaktir.




Bir cismi 3D geometrik yapisini tanimlamak için üçgenlerden yararlaniyoruz. Yani seklin geometrik yapisini kendi içerisinde yeniden geometrik parçalara ayiriyoruz. Asagidaki sekle dikkatlice bakarsaniz, herbir parçanin özünde bir üçgen yer aldigini görebilirsiniz.




3D tanimina ve sekiller üzerindeki etkisine degindikten sonra nasil 3D görünümüne sahip geometrik bir sekil elde edebilecegimize biraz deginelim ve güzel bir örnek yapalim.

Öncelikle bilmemiz gereken ve kullanacagimiz özelliklere biraz deginelim ve neyin ne ise yaradigini ögrenelim.

Cismi 3 boyutlu görmek için farkli koordinatlarin birlesimini tek bir noktadan görüyor olmamiz gerektigini söylemistik. Örnek olarak bir kübün yapisini ele alalim.




Yukaridaki sekle sag el koordinat sistemi adi veriliyor. WPF’de olusturacagimiz sekli bu sistemi göz önüne alarak yapmaya çalisacagiz.

3D Elementler

Seklimizin olusumunda bas rol oyanacak olan elementleride açiklamak gerekirse;

Viewport3D : Adi üzerinde 3D görünüm veren ve 2D’den 3D’ye geçise olanak saglayan controldur.

Camera : Pozisyon ve bakis açisina ait degerleri kullanarak tek bir dogrultuda görüntülenmesini gerçeklestiren kontroldür.




3D Models : Seklin sahip oldugu koordinatlara göre belirlenen yapi "Geometry" ile dis görünüm özelliklerini kapsayan "Material" özelliklerini tutan kontrollerdir.

Lights : Isik ise, farkli koordinatlara düsen isigin cismin görünen rengine etkisini yansitan kontrollerdir. AmbientLight, DirectionalLight, PointLight, SpotLight özelliklerini içerir.

Simdi verdigimiz bilgilerden de yararlanarak bir küp olusturmaya çalisalim.

WPF’de geometrik sekilleri olusturmak için özellikle de bir simetriye sahip sekillerin olusturulmasinda kullanilan MeshGeometry tag’indan yararlaniriz. 3D bir küp olusturmak içinde MeshGeometry3D özelliginden faydalanacagiz. Bildiginiz gibi küp alti yüzeyi vardir ve 8 tepe noktasi ile 12 üçgenden olusmaktadir.

Buna göre yüzeylerimizi olusturalim.




Xaml kodlarimiza baktigimizda önyüz, arka, solyüz, sagyüz, üst yüzey ve alt yüzey olmak üzere küpün herbir yüzeyi için posizyon ve boyutlarini girdik. Fakat seklimiz hala somut olarak olusturulmus degil. MaterialGroup sayesinde default olarak yüzeyler için kirmizi brush, yansima içinde sari brush kullandik.

Mesh geometrik sekillerinin asil olusturulma islemi için Viewport3D elementlerinden yararlaniyoruz.

Asagidaki sekilde kodlarimizi yazdik. Son olarak ekledigimiz ModelVisual3D kontrolüne yazdigimiz GeometryModel3D özelligi sayesinde olusturmak istedigimiz seklin geometrik bir parçasini ve de kullandigimiz materyal bilgisini belirttik.





Gördügünüz gibi seklimiz olusmaya basladi. Ayni sekilde diger yüzeyleri de sirasiyla ekleyelim.





Ön, arka, sag, sol yüzeyleri olusturduk. Devam ediyoruz.





Son olarak alt ve üst yüzeyleri ekliyoruz.





Sekil itibariyle kübümüz olustu. Simdi de rengini belirtmek için light ayarlarini yapalim.





Son olarakta farkli posizsona düsen isigi ayarlayalim. Bir çesit yansima gibi.





Projemizi tamamladik. Penceremizin arka plan rengini degistirmek için grid’in backround’ina istediginiz rengi atayabilirsiniz. Ayrica bir tane icon ekledim ki projemiz çalistiginda araç çubugunda logosu görünsün. Projemizi derleyip çalistirdigimizda asagidaki gibi görüntülenecektir.

Projeye ait kaynak kodlari buradan insirebilirsiniz.

Herkese iyi çalismalar...

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©