Sayfalar

2 Eylül 2010 Perşembe

ogre3D ve temel sınıflar ve dosyalar – bölüm 4

Şimdiye kadar temel birkaç sınıftan bahsettik, üstüne Ogre3D ekibinin hazırlamış olduğu ExampleApplication ile ExampleFrameListener adlı iki sınıfı inceledik. Hayli kullanışlı sınıflar olduğunu gördükten sonra sıra geldi biraz daha derine inmeye :) Bu seferki yazımda ise kod sisteminde bulunan kaplamaların nereden ve nasıl atandığından, nasıl yeni materyaller tasarlayabileceğimizden bahsedeceğim. Ayrıca bazı önemli dizinlerden bunları bizim de etkin kullanabileceğimizden bahsedeceğim.

Öncelikle OgreSDK klasörümüzü açalım, karşımıza ilk önce " bin " klasörümüz çıkacaktır. Bu klasör bizim projemizin " Debug " ve " Release " çıktılarını barındıran klasörümüzdür. Ekranın fotoğrafını çekerseniz ( ExampleFrameListener sınıfını kullanıyorsanız geçerlidir. Eğer ki kulllanmıyorsanız da harici olarak siz bu fonksiyonelliği kazandırabilirsiniz elbette ) bu resim otomatik olarak Debug dizininin içine kaydedilir. Ayrıca debug ve release dizinlerinin içerisinde bazı cfg, *_d.dll (debug dizini için ), *.dll ( release dizini için ) ve log dosyaları mevcuttur ki bunlar gerekli harici çıktı veya girdi dosyalarıdır. Örneğin " *.log " dosyaları yaptığımız eylemlerin kaytılarını tutarlar içerlerinde. " *.cfg " dosyaları da önemli olan girdi bilgilerini barındırır. Örneğin " resources.cfg " dosyası en önemli cfg dosyasıdır. Zira bu dosya " FileSystem " adı altında klasör sistemini ve " Zip " adı altında bazı önemli zip dosyalarının adreslerini içerisinde barındırır. Bu adreslemenin yanlış veya eksik yapılması derleme hatalarından ziyade programın çökmesine neden olabilecek hataları beraberinde getirir. Aynı şekilde " plugin.cfg " dosyasının içerisine, o dizinde bulunmayan pluginlerin ( ki bunlar aynı dizinde bulunan dll dosyalarımızdır. ) kayıtları girildiğinde de çökmeye neden olur.

"Bin" dizinini hallettikten sonra sıra geldi "docs" klasörüne ki o da Ogre'nin yardım sayfasını içermektedir. Bu dizinin üstünde durmuyorum ve devam ediyorum.

"include" dizini tahmin edebileceğiniz gibi önemli bir dizindir zira kodlarımızı içerisinde barındırır. Eğer ki harici bir kütüphaneyi projenize dahil etmek istiyorsanız bu dizine atmanızda fayda vardır zira toplu düzenli görünür en azından :)

"samples" dizinimiz ise içerisinde Ogre3D ekibinin önceden hazırladığı örnek projeleri içermektedir. Kullanışlı bir dizindir, sık sık bu dizindeki projelere göz atmak durumunda kalacaksınız ister istemez :) en azından bende bolca böyle oldu :)

"media" klasörünün içeriği ise bizi en çok ilgilendirecek olan kısımdır. İçerisinde bulunan "gui" klasörü, CEGUI ile yapılmış olan menüleri tutan dosyaları barındırır. CEGUI ile menü yapımına gireceğim zaman bu dosyaları nasıl kullanacağımızdan bahsedeceğim. "models" klasörümüz adından da anlaşılabileceği gibi mesh uzantılı modellerimizi barındırmaktadır içerisinde. "packs" klasörü ise Ogre'nin temel evren resimlerini barındırmakta içerisinde. Bununla birlikte resources.cfg dosyasında mevcut olan zip dosyaları da burada bulunmaktadır. Bazı dosyaları zip halinde paketleyip kullanmak tercih edilebilir. Ayrıca nasıl 3dsMax'de nasıl evren yapabileceğimize de değineceğim. "particle" klasörümüzde ise bizim efektlerimiz mevcuttur, örneğin havai fişek efekti burada barınmakta. "PCZAppMedia" klasöründe ise terrain ( belli bir gri renk ölçeğine sahip bir resimde beyazların yükseltiyi, siyahların da alçaltıyı temsil ettiği bir yüzey yapım metodu. İleride bu tekniğe detaylı değinmeyi düşünüyorum. ) nesnesinde yükseltiyi yapacak olan resimler burada tutulmaktadır. "material" klasörüen girecek olursak karşımıza "program", "script" ve "texture" adlı üç klasör daha gelecektir. "programs" kısmı benim direkt olarak kullandığım bir klasör olmadı ama yapacağınız çalışmalar dolaylı da olsa buraya erişmiştir. Zira burada çeşitli compositor efektleri için gerekli olan temel dosyalar mevcut anladığım kadarı ile. Bu kısım ile ilgili pek bir bilgim yok o yüzden yanlış bir bilgi vermeden devam ediyorum sıradaki klasöre. "scripts" klasöründe ise karşımıza bir dizi "*.material" dosyası çıkıyor beraberinde birkaç farklı dosya tipi ile birlikte. Ancak burada en çok yardımımıza koşan dosyalar yine "Example" ile başlayan dosyalarımız olacaktır. Example.material, Example.compositor, Example-Water.material gibi dosyaların içinde yine yığın halinde örnekler mevcut. Özellikle şu sıralar yapacağımız seviyedeki örnekler için bize Example.material dosyamız lazım. Gelelim "textures" klasörüne. Burada bulunan resim dosyaları da "models" klasörümüzün içerisindeki mesh uzantılı modellerimizin kaplama malzemeleri ile example.material dosyamızın içerisindeki kaplama malzemelerini barındırmaktadır. Aynı şekilde terrain nesnemizin de yüzey kaplaması buradadır.

Şimdi sırayla bu Example dosyalarına göz atalım. Önce Example.material dosyamızın içine gireceğiz. İçerisinde "material Examples/... " şeklinde bir dizi seri vardır. Örneğin "material Examples/CloudyNoonSkyBox" bizim standart projemizdeki evren kaplamasıdır. "mSceneMgr ->setSkyBox (true, "Examples/ CloudyNoonSkyBox");" kod satırındaki "Examples/CloudyNoonSkyBox" adlı bu kaplama malzemesi Example.material dosyasının içerisinde yer almaktadır:

material Examples/CloudyNoonSkyBox
{
technique
{
pass
{
lighting off
depth_write off

texture_unit
{
cubic_texture cloudy_noon.jpg separateUV
tex_address_mode clamp
}
}
}
}

setSkyBox () fonksiyonundan bir ortam yarattığımız için tahmin edebileceğiniz gibi evrenimiz, tam merkezinde bulunduğumuz bir küpten ibaret. Küp olduğu için de cubic_texture kısmında cloudy_noon.jpg resmi tanımlanmış. "Debug" dizininde bulunan "media.cfg" dosyasında
"CubeMap=cloudy_noon.jpg" satırıyla bunun bir CubeMap olduğu söylenmiş. "media\packs\" dizinindeki "cubemapsJS.zip" dosyasında ise
  • cloudy_noon_BK.jpg,
  • cloudy_noon_DN.jpg,
  • cloudy_noon_FR.jpg,
  • cloudy_noon_LF.jpg,
  • cloudy_noon_RT.jpg,
  • cloudy_noon_UP.jpg.
adlı altı tane resim bulunmaktadır. Bu altı resim asıl küp evrenimizi temsil etmektedir. material dosyasında kaplama malzemesi olarak cloudy_noon.jpg kullanılması demek aslında bu altı resimin kullanılması demek anlamına gelmektedir. Zaten eğer ki "cloudy_noon" diye OgreSDK dizininde aratırsanız bulabileceğiniz sonuçlar bu altı resimden ibaret olacaktır.

Hiç yorum yok:

Yorum Gönder