Ş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.