10. Yeni bir üye fonksiyona değinelim. setVisible *kur.Görünürlük+fonksiyonu, E sınıfının üye fonksiyonu. Boolean değeriyle çalışıyor. Diyelim ki bir sahnede bir E’miz var. Bunu geçici bir süre onu görmek istemiyoruz. Sahne de görünmemesi için onu tanımlandığımız kodları silmemize gerek yok. Bunun yerine E nesnemizin setVisible üye fonksiyonuna ulaşıp, parametresini 0 veya false yapıyoruz. createScene fonksiyonumuzun içine en sona ekleyelim:
// İlk Ogre başını kaybediyoruz.
ogreBasi->setVisible(0);
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin:
11. ogreBasi nesnemizi görünmez yaptık. Şimdi ise görünür yapalım. Bu işlem için kodların en altına yeni bir setVisible fonksiyon çağrısı ekliyoruz. Parametresini 1 veya true yapmamız yeterli:
// İlk Ogre başını görünür yapıyoruz.
ogreBasi->setVisible(true);
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin.
12. Şimdi yeni bir işlem deneyeceğiz. ogreBasi3 adında üçüncü nesnemizi tanımlayacağız. Ama bu sefer onun için tanımladığımız SN’nin içinde konumu belirlemek yerine translate [translate(Vector3(X, Y, Z)] fonksiyonunu kullanarak konumlandıracağız.
// Üçüncü objemizi oluşturuyoruz:
Ogre::Entity* ogreBasi3 = mSceneMgr->createEntity("Bas3", "ogrehead.mesh");
Ogre::SceneNode* basDugumu3 = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu3");
basDugumu3->attachObject(ogreBasi3);
// basDugumu3 SceneNode’sinin üye fonksiyonlarından “translate();” ile konumlandırma yapıyoruz:
basDugumu3->translate(Ogre::Vector3(-100, 0, 0));
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin.
13. Şimdi -100. birime yerleştirdiğimiz ogreBasi3 nesnemizi bağlı olduğu SN nesnesi üzerinden konumlandırdık. Yani “basDugumu3->translate(Vector3(-100, 0, 0));” şeklinde konumlandırdık. Şimdi bağlı olduğu SN yerine, kendisi üzerinden konumlandıralım. Bir get fonksiyonu kullanarak ogreBasi3 nesnesinin bağlı olduğu SN’ye ulaşacağız. Bu işlemi getParentSceneNode fonksiyonuyla yapacağız. Sonra translate fonksiyonunu kullanacağız. Bu translate fonksiyonu basDugumu3 SN’sine aittir. Yani getParentSceneNode fonksiyonunu yazdığımızda basDugumu3 SN’sine ulaşmış oluyoruz. Son yazdığımız iki satırı silip yerine bu satırları ekleyelim:
// ogreBasi3 nesnesi üzerinden onun bağlı olduğu SceneNode’sine ulaşıyoruz ve konumlandırma yapıyoruz:
ogreBasi3->getParentSceneNode()->translate(Ogre::Vector3(-100, 0, 0));
createScene fonksiyonunun tümü:
void Ders1::createScene(void)
{
// Ambient light'ımızı kuruyoruz:
mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5));
// Bir ışık kaynağı oluşturuyoruz ve konumunu ayarlıyoruz:
Ogre::Light* ilkIsik = mSceneMgr->createLight("AnaIsik");
ilkIsik->setPosition(20,80,50);
// Entity, SceneNode oluşturuyoruz ve SceneNode’yi Entity’e bağlıyoruz:
Ogre::Entity* ogreBasi = mSceneMgr->createEntity("Bas1", "ogrehead.mesh");
Ogre::SceneNode* basDugumu = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu1");
basDugumu->attachObject(ogreBasi);
// İkinci objemizi tanımlıyoruz:
Ogre::Entity* ogreBasi2 = mSceneMgr->createEntity("Bas2", "ogrehead.mesh");
Ogre::SceneNode* basDugumu2 = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu2", Ogre::Vector3(100, 0, 0));
basDugumu2->attachObject(ogreBasi2);
// İlk Ogre başını kaybediyoruz.
ogreBasi->setVisible(0);
// Üçüncü objemizi oluşturuyoruz:
Ogre::Entity* ogreBasi3 = mSceneMgr->createEntity("Bas3", "ogrehead.mesh");
Ogre::SceneNode* basDugumu3 = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu3");
basDugumu3->attachObject(ogreBasi3);
// ogreBasi3 nesnesi üzerinden onun bağlı olduğu SceneNode’sine ulaşıyoruz ve konumlandırma yapıyoruz:
ogreBasi3->getParentSceneNode()->translate(Ogre::Vector3(-100, 0, 0));
}
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin. Bir önceki derlememizde aldığımız sonucun aynısı alacaksınız.
14. Döndürme işlemine geçmeden önce translate fonksiyonuyla ilgili bir örnek kod daha yazalım. translate fonksiyonu aslında koordinatlarda toplama ve çıkarma işlemi yapıyor. Örneğin ogreBasi3 nesnemizi X ekseninde -100. birime kurduk. Şimdi yeni bir kod daha yazacağız. X ekseninde 75 birim ötele diyeceğiz. “(-100) + 75” işleminin sonucu olarak X ekseninde -25.birime ogreBasi3 nesnemizi konumlandıracağız.
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin.
15. Şimdi 3D döndürme fonksiyonları olan pitch, yaw, roll fonksiyonlarını kullanmak için 3 tane daha E tanımlıyoruz:
// Dördüncü objemizi oluşturuyoruz:
Ogre::Entity* ogreBasi4 = mSceneMgr->createEntity("Bas4", "ogrehead.mesh");
Ogre::SceneNode* basDugumu4 = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu4", Ogre::Vector3(0, 100, 0));
basDugumu4->attachObject(ogreBasi4);
// Beşinci objemizi oluşturuyoruz:
Ogre::Entity* ogreBasi5 = mSceneMgr->createEntity("Bas5", "ogrehead.mesh");
Ogre::SceneNode* basDugumu5 = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu5", Ogre::Vector3(-100, 100, 0));
basDugumu5->attachObject(ogreBasi5);
// Altıncı objemizi oluşturuyoruz:
Ogre::Entity* ogreBasi6 = mSceneMgr->createEntity("Bas6", "ogrehead.mesh");
Ogre::SceneNode* basDugumu6 = mSceneMgr->getRootSceneNode()->createChildSceneNode("BasDugumu6", Ogre::Vector3(100, 100, 0));
basDugumu6->attachObject(ogreBasi6);
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin.
16. Şimdi tüm eksenlerde 90’ar derece döndürme işlemi yapacağız. pitch, yaw, roll fonksiyonları SN üzerinden çalışır. Teorik derste de bahsettiğimiz gibi nesnemizin konumu, döndürme ayarları, ölçeklemesi vb. konularla nesnemizin SN’si ilgilenir. İster “basDugumu4->…” yoluyla ister “ogreBasi4->getParentSceneNode()->…” yoluyla yapın. Her ikisi de nasıl olsa aynı kapıya çıkıyor. Biz bu işlemi şu şekilde yaptık:
// Son oluşturduğumuz üç Entity'mizi döndürüyoruz:
ogreBasi4->getParentSceneNode()->pitch(Ogre::Degree(90)); ogreBasi5->getParentSceneNode()->yaw(Ogre::Degree(90));
ogreBasi6->getParentSceneNode()->roll(Ogre::Degree(90));
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin.
17. Şimdi bu E’lerin dönme ayarlarını sıfırlayalım. Bu işlem için bir SN üye fonksiyonu olan resetOrientation’u [yenidenkurOryantasyon] kullanacağız:
// Objelerimizin dönme ayarlarını sıfırlıyoruz:
ogreBasi4->getParentSceneNode()->resetOrientation();
ogreBasi5->getParentSceneNode()->resetOrientation();
ogreBasi6->getParentSceneNode()->resetOrientation();
Kodlarımızı derleyip çalıştırın. Uygulamamızın yeni halini inceleyin.