Ogre Kütüphanesi Bölüm-8 Terrain - Gökyüzü ve Sis - 4
UstaDerslik Soru-Cevap Yararlı Araçlar
arama ikon

bilgi UstaDerslik
Bu uyari kutusudur.
Tamam
Anasayfa
İletişim
Üyeler

Ogre Kütüphanesi Bölüm-8 Terrain - Gökyüzü ve Sis - 4

profil
OLENVERDGRUP
BEĞEN(1)
BEĞENME(0)
GÖRÜNTÜLENME(4093)
RAPOR ET
12. createFrameListener Fonksiyonu
Bu fonksiyonunun detaylarına değinmeyeceğiz. bilgiEtiketi nesnemizi her ne kadar Ders3.h dosyasında tanımlamış olsak da BaseApplication’a çalışma düzeninde bilgiEtiketi nesnemiz gibi Label sınıfından türemiş nesneler createFrameListener fonksiyonunda tanımlandığından dolayı bilgiEtiketi nesnesini bu fonksiyonun içinde tanımlamak zorundayız. Bu yüzden bu fonksiyonu override edeceğiz. Gerekli satırları ekledikten sonra createFrameListener fonksiyonunun tümü şu şekilde görünecek:


void Ders3::createFrameListener(void) {
BaseApplication::createFrameListener();
bilgiEtiketi = mTrayMgr->createLabel(OgreBites::TL_TOP, "TInfo", "", 350); }


13. destroyScene Fonksiyonu
Bu fonksiyon C++ programının çalışma prensibinden dolayı hazırlanıyor. C++’da new komutuyla dinamik hale getirilen her şey programın sonunda veya işlem bittikten sonra delete komutuyla silinmek zorundadır. OGRE, new yerine OGRE_NEW komutunu; delete yerine OGRE_DELETE komutunu kullanıyor. createScene fonksiyonunda terrainAyarlari ve terrainGrubu nesnelerini dinamik olarak tanımlamıştık. Bu fonksiyonda da dinamik olarak tanımladığımız bu iki nesneyi siliyoruz:


void Ders3::destroyScene(void) {
// OGRE_NEW komutuyla dinamik olarak tanımladığımız nesneleri siliyoruz:
OGRE_DELETE terrainGrubu; OGRE_DELETE terrainAyarlari; }


http://ustaderslik.com/resim/ders/tb69q.png

14. Projenin Derlenmesi ve Çalıştırılması
Projemizi artık derleyip çalıştırabilirsiniz. Ekranda bilgiEtiketi nesnesine kurduğumuz yazıları göreceksiniz. Programımız ilk çalıştırıldığında oldukça geç açılacak. Sonraki çalıştırmalarınızda açılma hızı normale dönecek. Çünkü terraini üretmek yerine kaydettiği dosyadan yükleyecek. Ayrıca, bilgiEtiketi nesnemiz kaybolduğunda, terrain dosyamızı C:\OgreSDK\media dizinine Ders3Terrain_00000000.dat şeklinde kaydedecek.

http://ustaderslik.com/resim/ders/tb6b4.png

15. GÖKYÜZÜ TÜRLERİ
OGRE’de üç gökyüzü tanımı vardır. Bunlar: SkyBox yani Gökyüzü Kutusu; SkyDome yani Gökyüzü küresi; SkyPlane yani Gökyüzü Düzlemi’dir. Gökyüzü tanımlarının tümü createScene fonksiyonunun içine tanımlanır. Ayrıca, her üç gökyüzü türü için kullanacağımız kaplamalar, OGRE’nin içinde ogrehead.mesh, ninja.mesh modelleri gibi OGRE kurulumuyla birlikte hazır gelen kaplama dosyalarıdır. Yalnız, dikkat çekmek istediğimiz bir nokta var. Kullanacağımız bu hazır kaplamların çözünürlükleri düşük olduğundan piksel piksel görünecekler. Bu durum kaplamayla ilgilidir, kullandığımız gökyüzü türü ile ilgili değildir. Eğer çözünürlüğü yüksek kaplama yüklersek oldukça güzel görüntüler elde ederiz. İlerleyen dokümanlarda kaplama hazırlama işlemlerine de değineceğiz. Şimdi gökyüzü türlerimize göz atalım.

16. SkyBox’lar
SkyBox, tüm sahneyi içine alan devasa bir küptür. Bu küpün 6 yüzeyi de gökyüzü resmiyle kaplanarak bize sanal bir gökyüzü oluşturur. createScene fonksiyonunun içine SM nesnesi üzerinden setSkyBox üye fonksiyonu kullanılarak SkyBox kurulur. setSkyBox fonksiyonunun parametrelerini adım adım anlatacağız. İlk parametresi bir boolean değeridir. true olduğunda SkyBox’umuz etkinleşir. İkinci parametre, SkyBox küpünün yüzeylerine yüklenecek olan kaplamaların material dosyasıdır. Dikkat edin, SkyBox’umuzun konumunu kurmadık. Peki neden? Az sonra anlatacağız. Şimdi createScene fonksiyonunun içine önceden yazdığımız kodlardan sonra setSkyBox fonksiyonunu ekliyoruz:


//----------------------------------- GÖKYÜZÜ TANIMI ----------------------------------
// SkyBox'umuzu kuruyoruz:
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");


Programımızı derleyip çalıştırın:
http://ustaderslik.com/resim/ders/tb6bv.png

setSkyBox fonksiyonumuzun üçüncü ve dördüncü parametrelerinden bahsedelim. SkyBox’umuza konum değeri atamamıştık. Bunun nedeni SkyBox’umuzun, kameraya bağlı olmasıdır. SkyBox, kameranın konumuna bağlı olarak hareket eder. setSkyBox fonksiyonunun üçüncü parametresinde SkyBox’un kameradan ne kadar uzağa kurulacağını belirleyeceğiz. Yalnız dikkat etmemiz gereken bir nokta var. Ders2’de kameranın yakın kırpma mesafesinden bahsetmiştik. Eğer setSkyBox fonksiyonunun üçüncü parametresini, kameranın yakın kırpma mesafesinden daha küçük kurarsak, SkyBox’umuz ekranda görüntülenmeyecektir.

setSkyBox fonksiyonunun dördüncü parametresinden bahsedelim. Bu parametre SkyBox’un sahnedeki her şeyden önce mi yoksa sahnedeki her şeyden sonra mı renderleneceğini belirliyor. Bu dördüncü parametreye çizim önceliği parametresi diyebiliriz. İngilizce adı da firstDraw’dır. Çizim önceliği parametresi bir boolean değeriyle çalışır. Varsayılan değeri true’dir.

Çizim önceliğini diyelim ki true yaptık. Önce SkyBox’un tüm yüzeyleri renderlenecek. Sonra terrain ve diğer nesneler renderlenecek. Şöyle bir durum oluşuyor. SkyBox’umuzun yüzeyleri renderlendikten sonra, terrain ve renderlendiğinde ekranı dolduruyor. Yani önceki görüntünün üstüne biniyor. Mesela çizim önceliğini false yaptığımızda önce terrain renderlenecek. Sonra ekranda terrain’den arta kalan yerlere SkyBox yüzeyleri renderlenecek.

Farklı bir şekilde ifade edelim. SkyBox’u yüklemeden önce programımızı çalıştırdığımızda gökyüzümüz simsiyahtı. Kamerayı bir tarafa döndürüp baktığımızda terrain’in tepeleri ve üstünde bir siyah boşluk vardı. Çizim önceliği false olduğu zaman, yani SkyBox sahnedeki tüm her şeyden sonra renderlendiği zaman, sadece gördüğümüz siyah boşluklara SkyBox renderlenecek. SkyBox’un görmediğimiz, terrain’inin altında veya terrain’in tepelerinin arkasında kalan SkyBox yüzeyleri renderlenmeyecek. Sonuç olarak, setSkyBox fonksiyonunun dördüncü parametresi olan çizim önceliği parametresini false olarak ayarlamak, OGRE’nin resmi eğitim dokümanına göre bize bir parça hız kazandıracak. Bellekten tasarruf etmemizi sağlayacak. setSkyBox fonksiyonunun üçüncü ve dördüncü parametrelerini kullanarak denemeler yapalım. Hatırlayalım, üçüncü parametrede SkyBox’un kameradan ne kadar uzağa kurulacağını belirliyorduk. İlk denememiz şöyle olsun:

mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 10, false);


http://ustaderslik.com/resim/ders/tb6cl.png

İkinci denememiz:
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 100, false);


http://l1310.hizliresim.com/1g/6/tb6d3.png

Üçüncü denememiz:
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 5000, false);


http://ustaderslik.com/resim/ders/tb6dn.png



Kod
Kalın
Vurgu
Resim
Video
Url
CEVAPLA
Tüm Hakları Saklıdır. ©Arleone 2013-2014 UstaDerslik






Giriş
Şifremi Unuttum...
Şifre Talep
  Kuralları Kabul Ediyorum.
Kaydol