|
Başlangıç seviyesi eğitseli 2:Kameralar,Işıklar,Gölgeler: -------------------------------------------------------------------------------- NOT:Bu eğitsel OGRE'nin 1.0.0 versiyonu için yazılmıştır ve bu versiyona göre derlenmiştir. BAŞLAMADAN ÖNCE: Bu eğitsel sizin C++ programlama dilini bildiğinizi ve bir OGRE uygulaması yapıp derleyebildiğinizi kabul ediyor.Bu eğitsel ilk eğitselin üzerine kuruldu ve sizin ilk eğitseli bildiğiniz varsayılıyor. GİRİŞ: Bu eğitselde OGRE'nin birkaç marifetiyle daha tanışacaksınız ve önceki OGRE bilginizi genişleteceksiniz.Bu eğitsel daha çok ışıklı objeler, bunların gölgeleri ve basit kamera olayları üzerinde duruyoruz. Eğitselde ilerledikçe öğrendiğiniz kodları yavaş yavaş asıl projenin üstüne ekleyin ve sonuçları görün. BAŞLAYALIM: Son eğtselle beraber başlangıç noktamız olarak hazır yapılmış bir koddan başlayacağız.TutorialApplication sınıfımıza iki yeni fonksiyon ekleyeceğiz createViewport ve createCamera.Bu iki fonksiyon zaten ExampleApplication adlı dosyada tanımlanmıştı şimdi kameraların ve görüş açısının(viewport) nasıl yapılıp,kullanılacağına bakacağız. Derleyicinizde yeni bir proje açın ve bu kaynak kodu ekleyin: #include "ExampleApplication.h" class TutorialApplication : public ExampleApplication { protected: public: TutorialApplication() { } ~TutorialApplication() { } protected: virtual void createCamera(void) { } virtual void createViewports(void) { } void createScene(void) { Entity *ent; Light *light; } }; #if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32 #define WIN32_LEAN_AND_MEAN #include "windows.h" INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ) #else int main(int argc, char **argv) #endif { // Create application object TutorialApplication app; try { app.go(); } catch( Exception& e ) { #if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32 MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL); #else fprintf(stderr, "An exception has occured: %s\n", e.getFullDescription().c_str()); #endif } return 0; } Eğer OgreSDK'yı kullanıyorsanız "[OgreSDK_DIRECTORY]\samples\include" adresini projenize ekleyin çünkü ExampleApplication.h bu dizinde.Eğer Ogre'yi SDK olmadan kullanıyorsanız başlık dosyasını "[OgreSource_DIRECTORY]\Samples\Common\include" bu dizinde bulabilirsiniz.Diğer bölüme geçmeden önce bu kodu derleyebildiğinizden emin olun.(aslında tam bir program gibi çalışmayabilir büyük ihtimal bir crash verir.)Bu programın güzelce çalışabilmesi için gerekli kodu daha sonra ekleyeceğiz. Program Kontrolleri:Hareket etmek için W-A-S-D,etrafa bakmak için mouse,programdan çıkmak için ESC. ------------------------------------------------------------------------------ NOT:SceneNode nedir? Scene = sahne Node = Dugum, Bogum anlamina geliyor. 3 boyutlu oyunlarda sahneler biririnden farkli nesnelerden meydana gelir.Her nesnenin, kendine ait ozellikleri vardir. Burada nesneden kastedilen, ekranda görünen bütün cisimler.Bunlara Node denir. ------------------------------------------------------------------------------- KAMERALAR: Ogre Kameraları:Kamera yaptığımız sahneyi görüntüleyebilmek için kullanılır.Kamera objesi setPosition,yaw,roll,pitch gibi fonksiyonlara sahiptir ve kamerayı herhangi bir ekrandaki nesneye(SceneNode) a ekleyebilirsiniz.Aynı SceneNode lar gibi kameranın pozisyonu da kendisinin üst sınıfları ile akrabadır.Tüm hareketler ve dönme için aslında bir kamerayı bir SceneNode la aynıdır diyebiliriz.Yani ikiside aynı fonksiyonlara sahip gibidir o açıdan. Ogre kameraları hakkında birşey daha var:Sizin umduğunuzun aksine şimdilik yalnızca bir tane kamera kullanabiliriz.Tabi ilerde aynı anda birden fazla kamerayı kullanmayı da öğreneceğiz inşallah.Peki iki kamera ne işimize yarardı?İki tane kamera yapardık bir tanesi sahnenin bir bölümünü diğeri başka bir bölümünü gösterirdi hatta bir tuşa basıp kameralar arasında geçiş yapabilirdik.Oynadığız oyunlarda böyle birşeyi görmüşsünüzdür herhalde.Bunu başarmanın bir yolu da SceneNode lar yapmaktır.Çünkü SceneNode lar kameraya sahipmiş gibi bir görev yapabilirler.Bu SceneNode lar sahneye yerleşir ve bir noktadan kameranın bakmak isteyeceği bir noktaya bakabilirler.Sahnenin başka bir bölümünün gösterilmesi söz konusu olduğunda kamera; uygun olan SceneNode a kendini ekleyebilir-bağlayabilir.Bu tekniğe daha sonra döneceğiz inşallah. Bir kamera yapmak: ExampleApplication dosyasının kamera yapmak için kullandığı method yerine biz başka bir method kullanacağız. Kodumuzu TutorialApplication::createCamera üye fonksiyonuna yazacağız.En başta bir kamera yapmamız gerekiyor.Kameralar sahne yöneticisi(SceneManager)'a bağlı olduğu için bir kamera yapmak için bir SceneManager objesi kullanırız.Objeye ulaştığımız zaman sınıfın içindeki kamera yapma fonksiyonunu çağırırız.Bir kamera yapmak için bu kodu ekleyin: // kamera yapmak mCamera = mSceneMgr->createCamera("PlayerCam"); Bu PlayerCam adında bir kamera yapar.Aynı zamanda bir kamera yapmak için SceneManager(sahne yöneticisi) sınıfının getCamera adlı fonksiyonunu da kullanabilirsiniz.Eğer kameraya bir işaretçi tutmak istemiyorsanız kameranın ismine göre bu fonksiyonla da kameraya ulaşabilirsiniz. Yapmamız gereken diğer şey kameranın yerini ve yönünü ayarlamak.Objeleri orijinin etrafına koymuş olacağız bu yüzden kameramızı z ekseninde pozitif sayılar tarafında bir yere koymak iyi olur.Kameramızın yüzünüde orijine doğru çeviririz.Şimdi de bu kodu ekleyelim: // yeri ve yönü mCamera->setPosition(Vector3(0,10,500)); mCamera->lookAt(Vector3(0,0,0)); lookAt fonksiyonu oldukça kullanışlıdır.Kameranın yönünü kolayca ayarlabilirsiniz.Sahne nesneleride(SceneNode) bu fonksiyonu kullanabilir.Böylece sahnede görüntülenecek nesnelerin yönünü başka yöntemler kullanmak yerine kolayca ayarlayabilirsiniz. Son olarak yakın görüş mesafemizi 5 birim ayarlıyoruz.(nearclipping)Yakın görüş mesafesi nedir?Yakın görüş mesafesi bir objeye ne kadar yaklaşabileceğinizi gösterir.Yani objeyle kamera arasındaki duvarın kalınlığı.Şöyle düşünün oyununuzda çarpışma kavramı yok.Bu yüzden cisimler birbirinin içinden geçiyor.Başka bir cisme yaklaştıkça cisim büyür büyür sonra görünmez olur çünkü içine gireriz.İşte yakın görüş mesafesi bir cisme en fazla ne kadar yaklaşabileceğimizi ayarlar.Aynı şekilde bir de uzak görüş mesafesi vardır.Uzak görüş mesafesine bazı araba yarışlarında rastlamışsınızdır.Viewing distance diye geçer.Uzak görüş mesafesi de kameranın en fazla ne kadar uzaklıktaki cisimleri görebileceğini hesaplar.Belli bir uzaklığı geçen cisimler görünemez ve OGRE o cisimleri sahneye girmedikçe render lemez.(Türkçe'si ne?) Uzak görüş mesafesi sahnede çok ayrıntı olduğu zaman kare hızını arttırmada kullanılır.Motor uzaktaki cisimleri çizmez bilgisayara düşen yük hafifler,performans artar. Yakın görüş mesafesini ayarlamak için şu kodu yazmalıyız: mCamera->setNearClipDistance(5); Uzak görüş mesafesini bu eğitselde kullanmayacağız. GÖRÜNTÜ ÇIKTISI: Oyunlarınızda birden fazla kamera kullanmaya başladığınız zaman görüntü çıktısı sınıfı çok daha işinize yarayacaktır.Görüntü çıktısı nedir?Kısaca açıklayalım.Görüntü çıktısı pencerenin boyutları değişmeden görmek istediğiniz alanı belirler.Garip bir tanım mı oldu?Yani penceremiz 640-480 boyutlarında olsun ve biz sahneyi 400-400 boyutlarında bir bölge içinde görmek istiyoruz ve bunu yapmak için de penceremizin boyutlarını 400-400 yapabiliriz.Ama biz bunu istemiyoruz çünkü pencerenin geriye kalan kısımlarında da başka şeyler görüntülemek istiyoruz.Mesela bir strateji oyunu;ekranın altında bir arabirim vardır ordan asker yaparız,bina yaparız falan ve ekranın geri kalan kısmında da oyun sahnesini görürüz.İşte oyun sahnesi belli bir görüntü çıktısı içinde görüntüleniyor.Ekranın alt kısmı da başka bir görevde kullanılıyor. Görüntü çıktısı konusuna şimdi değindik çünkü OGRE'nin bir sahneyi "render" lerken hangi kamerayı kullancağına nasıl karar verdiğini anlamanız önemli.OGRE'de aynı anda birden fazla sahne yöneticisi(SceneManager) kullanmak mümkün.Ekranı ikiye bölüp iki kamera yerleştirip bir oyun yapmak ta mümkün.Yani aynı bilgisayardan oynanan bir araba yarışı gibi ekranı ikiye bölebiliriz ve OGRE aynı anda iki farklı sahneyi "render" leyebilir. Bunları yapmanın mümkün olduğunu biliyoruz ama şimdi bunları öğrenmeyeceğiz,ilerde daha ileri düzey eğitsellerde inşallah. OGRE'nin bir sahneyi nasıl "render" lediği konusunda şu 3 kavram önemli:Kamera(Camera),Sahne Yönetisi(SceneManager),Render Pencere(RenderWindow) RenderWindow'u daha öğrenmedik ama basitçe söylemek gerekirse herşeyin gösterildiği penceredir.SceneManager ise obje yapmada kullanılır.Camera ise sahneyi görüntülemekte kullanılır.RenderWindow'a sahnede hangi kameranın kullanılacağını ve kamerada sahnenin ne kadarlık bir kısmının görüntüleneceğini belirtmek zorundayız.RenderWindow içinde kameranın ne kadarlık bir alanı göstereceğini belirleyeceğimiz kod bizim görüntü çıktımızdır.Örneğimizde bir tane kamera kullanacağız böylece bir tane görüntü çıktımız olacak. Şimdi bir görüntü çıktısının oluşturulabilmesi için kameranın nasıl kayıt(register) ettirileceğini öğreneceğiz.Daha sonra bu görüntü çıktısı nesnesini arkaplan rengini belirlemede kullanacağız. Görüntü çıktısının oluşturulması: Başlık dosyamız olan ExamplaApplication'ın kullandığı fonksiyonu kullanmayacağız.Bu yüzden kendimizin TutorialApplication::createViewports fonksiyonunu kullanacağız. Kodları TutorialApplication::createViewports üye fonksiyonunun içine yazın.Görüntü çıktısı oluşturmak için RenderWindow'un fonksiyonu olan addViewport fonksiyonunu kullanırız ve argüman olarak kameramızı atarız.mWindow sınıfı ExampleApplication'un içinde. // Create one viewport, entire window Viewport* vp = mWindow->addViewport(mCamera); Görüntü çıktımızı yaptık ama tabi şu an için yapacak pek fazla birşeyimiz yok.setBackgroundColour fonksiyonu ile arkaplan rengini ayarlayabiliriz. vp->setBackgroundColour(ColourValue( 0,0,0)); ColourValue içindeki üç sıfırın anlamı sırasıyla şu:Kırmızı,yeşil ve mavi.0 ve 1 arası bir değer verebilirsiniz.Biz bu örnekte siyah rengi tanımladık. Son ve en önemli şey kameramızın görüntü niteliğini belirlemektir.Bu örnek için biz standart tam ekran bir görüntü ayarlayacağız. // Alter the camera aspect ratio to match the viewport mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight())); Görüntü çıktısını ayarladık. IŞIKLANDIRMA VE GÖLGELER: OGRE'nin desteklediği gölge çeşitleri: Ogre 3 çeşit gölgeyi destekler; 1-Modulative Texture Shadows(SHADOWTYPE_TEXTURE_MODULATIVE)Bu üçünün arasında en az yoğun olanı budur.Gölgelerin değeri yoktur yalnızca siyah-beyaz bir gölge çizer. 2-Modulative Stencil Shadows(SHADOWTYPE_STENCIL_MODULATIVE)Bu gölgelendirme türü tam olarak hatasız değildir.Ekrana önce saydam olmayan objeler çizilir.Tüm yoğunluktaki gölgeler gösterilir.Ama Additive Stencil Shadows kadar iyi değildir. 3-Additive Stencil Shadows(SHADOWTYPE_STENCIL_ADDITIVE)3'ünün arasında en iyisi.Işıklar birbirinden ayrılarak birşeyler yapılır.(anlaması zor)Ama grafik kartınıza binen yük artar. OGRE motorun bir parçası olarak yumuşak gölgeleri desteklemez.Eğer yumuşak gölgeler istiyorsanız kendi köşe ve parça(?) programlarınızı yazmalısınız.Bu eğitselde sadece kısa bir bilgi olarak gölgelendirme veriliyor. OGRE'de gölgeleri kullanmak: OGRE'de gölgeleri kullanmak oldukça kolaydır.Sahne yöneticisi(SceneManager) sınıfı setShadowTechnique adında bir üye fonksiyona sahiptir.Bu fonksiyonu kullanarak gölge çeşidimizi ayarlayabilirz.Daha sonra ekranda bir obje çizmek istediğinizde her zaman setCastShadows fonksiyonunu çağırın.Motorun bir objenin gölgelerini kapayıp,açmasını ayarlayabilmesi için gerekli. Şimdi çevredeki ışığı zifiri karanlığa ayarlıyoruz ve gölge çeşidimizi seçiyoruz. TutorialApplication::createScene üye fonksiyonuna bunu ekleyelim: mSceneMgr->setAmbientLight( ColourValue( 0, 0, 0 ) ); mSceneMgr->setShadowTechnique( SHADOWTYPE_STENCIL_ADDITIVE ); Şimdi ekrana bir cisim çizelim ve gölgeleri açalım Bu satır şöyle bir hataya neden olabilir: "variable 'vtable for Ogre::MeshPtr' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details." Bağlayıcı ayarlarınıza şunu eklemeniz lazım: " -Wl,--enable-runtime-pseudo-reloc" ent = mSceneMgr->createEntity( "Ninja", "ninja.mesh" ); ent->setCastShadows( true ); mSceneMgr->getRootSceneNode()->createChildSceneNode( )->attachObject( ent ); Bu MeshManager(ekranda yapılacak girişlerin yöneticisi;mesela siz bir 3ds yada Maya dosyası yüklettiğinizde bu bir "mesh"tir yada kendi koordinantlarınızı belirleyerek çizdiğiniz bir çizgi de "mesh"dir.)'i kullanmak için bir eğitsel değil ama basit bir giriş oldu. Ninjanın üzerinde durması gereken biryer yapmalıyız;bir düzlük(Plane); böylece gölge oraya düşecek.Bunun için küçük bir düzlük yapacağız.Önce Plane objesini kendi kendine tanıtmalıyız.Düzlükler(plane) OGRE'de tanımlı bir sınıftır. Plane objesinin y ekseninin pozitif sayılar bölümde olması ve orijine 0 uzaklıkta olmasını istiyoruz. Plane plane( Vector3::UNIT_Y, 0 ); Şimdi düzlüğümüzü kaydettirmeliyiz(register) böylece uygulamamızda kullanabiliriz.MeshManager ekranda yüklediğimiz herşeyin izini tutar. MeshManager sınıfının createPlane üye fonksiyonu istediğimiz koordinantları vererek bir düzlük tanımlamada kullanılır.Bu kod düzlüğümüzü kullanım için kaydediyor ve bir düzlük yapıyor. MeshManager::getSingleton().createPlane("ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z); Bu kodun anlamına çok fazla değinmeyeceğiz çünkü konumuz MeshManager'ı kullanmak değil.Onun yerine basitçe söylemek gerekirse 1500-1500 boyutlarında(birimini bilmiyorum) bir düzlük tanımladık ve düzlüğümüzün adı "ground". Şimdi yüklediğimiz ve hazır olan bu mesh'i ekrana koyalım: ent = mSceneMgr->createEntity( "GroundEntity", "ground" ); mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent); Düzlüğümüzle işimiz bitmeden önce yapmamız gereken iki şey daha var.Birincisi castShadows fonksiyonunu çağırmak ikincisi düzlüğümüze bir doku eklemek.Ekrana yüklediğimiz Ninja gibi "mesh" lerde zaten bir doku tanımlı.Ama düzlüğü biz kendmiz yaptığımız için bir doku atamalıyız.Examples/Rockwall adlı doku örneğini kullanacağınız. ent->setMaterialName("Examples/Rockwall"); ent->setCastShadows(false); Şimdi bir ninjamız ve ninjanın üzerinde durduğu bir düzlüğümüz var.Hadi derleyelim!Ama hiç birşey gözükmüyor neden?Çünkü arkaplanı siyah yaptık ve sahnede hiç ışık yok.O zaman ışık koyalım. Işık Çeşitleri: 3 çeşit ışık var: 1-Point(LT_POINT):"Point" türü ışıklar kendinden etrafa her yönde ışık saçar,güneş gibi. 2-Spotlight(LT_SPOTLIGHT):"Spotlight" türü ışıklar aslında "flashlight" lara benzer.Spotlight!in bir başlangıç konumu vardır ve belirli bir yöne doğru harekete geçer.Spotlight'ın içindeki ve dışındaki ışığın açısını belirleyebilirsiniz.(ışıkların merkeze yakın bölgesi daha parlak olur o bölge iç bölge) 3-Directional(LT_DIRECTIONAL):"Directional" ışıklar uzaktan gelip herşeye çarpan ışıklardır.Mesela bir gece sahnemiz olsun ve havada ay yapmak isteyelim bunun için çevreye bir ışık koyabiliriz ama herşeyi eşit şekilde aydınlatmaz."Directional" ışık bunu başarır. Işıklar,kendisinin nasıl çalışacağını belirleyen pek çok ayara sahiptir.İki önmeli ayar ışığın yayılma oranı ve rengidir. Işık oluşturmak: OGRE'de ışık yapmak bir kamera yapmaya benzer.Sahne yöneticisinin(SceneManager) createLight üye fonksiyonunu çağırırız ve ışığa bir isim veririz.Bir ışık oluşturduktan sonra yerini kendimiz ayarlayabiliriz yada hareket için ekrandaki bir nesneye(SceneNode) bağlayabiliriz.Işık ile ilgili iki fonksiyon var.Bunlar yerini ayarlamak için setPosition yönünü ayarlamak için setDirection fonksiyonları.Eğer bir ışığın hareket etmesini istiyorsanız onu bir nesneye bağlamalısınız.Örneğin bir karakterin arkasına. Yani ışık bir hareket fonksiyonuna sahip değil. Bir "Point" türünde ışık yapalım,yerini ve tipini belirtelim. light = mSceneMgr->createLight( "Light1" ); light->setType( Light::LT_POINT ); light->setPosition( Vector3(0, 150, 250) ); Işığı oluşturduk şimdi yayılma oranını ve rengini ayarlayalım: light->setDiffuseColour( 1.0, 0.0, 0.0 ); light->setSpecularColour( 1.0, 0.0, 0.0 ); Şimdi derleyip çalıştırın.Oldu!Artık ninjayı ve sahhneyi görebiliyoruz.Ninjaya karşıdan bakıp,tüm silüetini görebildiğinizden emin olun. Bide "Directional" ışık çeşidini deneyelim.Işığımıza biraz sarı renk verelim ve ışığımız ninjaya önden gelsin. Yine ışığımızı oluşturuyoruz ve rengini ayarlıyoruz. light = mSceneMgr->createLight( "Light3" ); light->setType( Light::LT_DIRECTIONAL ); light->setDiffuseColour( ColourValue( .25, .25, 0 ) ); light->setSpecularColour( ColourValue( .25, .25, 0 ) ); "Directional" ışık uzaktan geldiği için yerini ayarlamaya gerek yok ama yönünü ayarlayabiliriz.Işığın yönünü z eksenin pozitif ve y ekseninin negatif sayıları yönünde ayarlıyoruz.(ninjanın önünden ve yukarıdan 45 derecelik açıyla geliyormuş gibi) light->setDirection( Vector3( 0, -1, 1 ) ); Derleyip çalıştırın.Şimdi 2 gölgemiz var."Directional" ışık biraz zayıf.Dikkat ettiyseniz ona bağlı olarak gölge de zayıf.Şimdi bide mavi renkli bir "Spotlight" ışığı ekleyelim. light = mSceneMgr->createLight( "Light2" ); light->setType( Light::LT_SPOTLIGHT ); light->setDiffuseColour( 0, 0, 1.0 ); light->setSpecularColour( 0, 0, 1.0 ); "Spotlight" ışığının yerini de yönünü de ayarlayacağız.Işığı ninjanın sağ omzunun üstünde bir yere yerleştireceğiz ve ninjaya doğru yönünü ayarlayacağız. light->setDirection( -1, -1, 0 ); light->setPosition( Vector3( 300, 300, 0 ) ); Ayrıca "Spotlight" ışıkları ışığın genişliğinin ne kadar olacağını belirtebilmemizi de sağlar.Bir saniye içinde yanıp sönen bir flaş ışığı düşünün.Işığın merkezi,etrafına yayılan ışıktan daha parlaktır.setSpotlightRange fonksiyonu ile bu iki bölgenin ışığının genişliğini ayarlayabilirsiniz. light->setSpotlightRange( Degree(35), Degree(50) ); DENENEBİLECEK ŞEYLER: Farklı gölge çeşitleri: Bu örnekte sadece bir tane gölge çeişdi kullandık,diğer gölge çeşitlerini de deneyin ve farkı görün.En iyisi bu sanırsam çünkü ben pek anlatamadım.Ayrıca SceneManager sınıfının içinde çeşitli gölgelerle ilgili fonksiyonlar da mevcut onları da inceleyebilirsiniz. Işıklar: setAttenuation adında bir fonksiyon var.Bu fonksiyon yanılmıyorsam ışıktan uzaklaştıkça ışığın ne kadar dağılacağını belirliyor.Bunu deneyebilirsiniz. SceneManager::setAmbientLight bu fonksiyonu bir deneyin.Ne işe yaradını bilmiyorum ama çevredeki ışıklarla ilgili birşey olsa gerek. Görüntü çıktısı: Arkaplan rengiyle oynayabilirsiniz. Plane: createPlane fonksiyonun argümanlarıyla biraz oynayın. Kamera: Camera::setFarClipDistance uzak görüş mesafesini ayarlayın.Program içinde bunu yapmamıştık. Arkadaşlar bu çeviride zorlanmadım desem yalan olur.Değişik şeyler vardı ve anlayamadım bu yüzden belki dikkat etmişsinizdir bazı yerlere fazla eğilmedim,yani kısa bir açıklama yapıp geçtim.Böyle şeyler için çok özür dilerim ama bende anlayamadım bazı yerleri.Özellikle gölge çeşitlerini anlatmada biraz zorlandım.Bu eğitselin orjinali bu adreste http://www.ogre3d.org/wiki/index.php/Basic_Tutorial_2 eğer çeviride anlayamadığınız yer varsa bide bu adresten orjinaline bakın lütfen. Ayrıca denenecek şeyler kısmında kullanımını bilmediğiniz fonksiyonları şu adresten "http://www.ogre3d.org/docs/api/html/classOgre_1_1SceneManager.html#Ogre_1_1TerrainSceneManagera89" BELKİ bulabilirsiniz çünkü çok fazla fonksiyon var ve aradığınızı bulmak kolay değil. Umarımki yardımcı olabilmişimdir.Kusuruma bakmayın. Caner
|