Anasayfa Eğitseller Oyun Yapımı OGRE Oyun Motoru - Bölüm 3

OGRE Oyun Motoru - Bölüm 3 PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 2
ZayıfEn iyi 
Eğitseller - Oyun Yapımı
Cuma, 20 Ekim 2006 21:37
Bu yazimizda size SceneManager, SceneNode, ve EntityObjects gibi kavramlari en basitinden anlatmaya calisacagim. Cok fazla kod yazmakla ugrasmiyacaksiniz, onemli olan su anda OGRE'niin nasil calistigini anlamaniz.Bu yaziyi okuryorsaniz, Bundan onceki Egitselli iyice okudugunuzu ve denilenleri yaptiginizi, ayni zamanda C++ bildiginizi kabul ediyorum. İsterseniz hemen baslayalim.¨

Baslangic.


Buraya kadar yazilan kodlar daha onceden yazilmistir bu asamada createScene (sahne olusturma) methodduna kadar olan kismi haric geri kalanini cok fazla umursamayin. Bundan sonraki egitsellerde daha ayrintilariyla diger kalan kisimlarida sizlere anlatmaya
calisacagim. Asagidaki kodu yazarak basliyalim-
Visual studio nuzu atesleyin ve yeni bir OGRE SDK projesi olusturun.., standart application'u
secin, next next devam edin, proje isimini yazmayi unutmayin. Mesala test1 gibi.
Simdi projeniz karsinizda test1.cpp yazilan dosyayi eger sizin girdiginiz isim bu degilse sizin
yazdiginizi, açin ve yazilan butun kodu silin, hatirlaycaginiz gibi daha once karsimiza bir
canavar cikiryordu, simdi bizim yapmak istedigimiz. Siyah bir ekran olusturmak ve herseyi
zamanla kendimiz eklemek.
#include "ExampleApplication.h"
class TutorialApplication : public ExampleApplication
{
protected:
public:
TutorialApplication()
{
}
~TutorialApplication()
{
}
protected:
void createScene(void)
{
}
};
#if 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 == 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;
}
Buraya kadar yazdiysaniz projenizi build edin ve calistirin. Umarim ekranda sadece ogre yazisini
ve system bilgisini gormussunuzdur. Birde siyah ekran peki OGRE nasil calisiyor.
OGRE nasil calisiyor.
SceneManager Temmelleri.
Ekranda gorulen heresy SceneManager tarafindan control edilir. Ekrana bir obje
yerlestirdiginizde, SceneManager Class’i bunlari takip eder. Kameralar yaratiginiz zaman.
SceneManager bunlarini ceteresini tutar. Vb…
SceneManager bir suru farkli tipi vardir. Ornegin terrain render yapan, Bsp maps renderlayan vs.
SceneManager cesitlerini sirasi geldikce deginecegiz.
Entity Temelleri
Entityler ekranda gorutulecegimiz, nesnelere verilen addir. 3 Boyutlu meshlerin hepsi birer
entitydir. Bir robot, bir balik, bir araba, yada karakterin yuruyecegi arazi cok buyuk bir entitydir.
Isiklari ve kameralari entity diye adlandiramayiz.

SceneNode Temelleri.
SceneNode un yaptigi butun objelerin yerini ve oryantasyonunu saglamak. Bir Entity
yaratiginizda SceneNode eklemezseniz Renderlama yapilmaz.Ilk once SceneNode yaratmaniz ve
daha sonrada nesneleri yada obje leri buna eklemeniz gerekir.
SceneNodelar ayrica baska SceneNode larada eklenebilir,. Boylelikle bir aile agaci benzeri bir
sey olusturabilirsiniz. Bunu daha iyi kavramaniz icin asagidaki resimi biraz inceleyin.
http://i79.photobucket.com/albums/j157/ulakar/Clipboard02.jpg
Ilk OGRE Programiniz.
Simdi daha once yaptigimiz dokumana gidin( yukardaki kodlari yazdigimiz yere). Simdi
yaratigimiz sahneye biraz isik ekleyelim.
Bunu yapmamiz icin setAmbientLight diye bir foksiyon kullanacagiz,.
Asagidaki kodu. void createScene(void) nin icine ekleyin.
mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1));
Bundan sonraya yapacagimiz SceneManager a bir obje(entity) ekliyecegiz.
Entity *ent1 = mSceneMgr->createEntity( "Robot", "robot.mesh" );
Simdi akliniza takilan sorulari birazcik aciklayalim ornegin bu robot nereden
geldi, Bu sizing icin OGRE tarafinda yaratilmis bir model, bu mesh
"ExampleApplication" icinde mevcut ilerde bu sekilde kendi modellerinizide
ekleyebilirsiniz. Her yaratilan Entity(obje) nin kendine has bir ismi olmasi
gerekiyor. Eger ayni isimde iki tane obje yaratmaya calisirsaniz hata
alirsiniz.
Hatirlatmak icin tekrar soyluyorum Buradaki mesh bize hazir olarak sunulan
bir mesh.
Su ana kadar isigi yaratik, objeyi yaratik bunlari isimdi yaratacagimiz bir
SceneNode a eklememiz gerekiyor, Her SceneNode un bir child (cocuk) u nu
yaratmamiz gerekiyor. Bunu yaratip bizim objeyi buraya ekleyecegiz,.su
sekilde:
SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode
( "RobotNode" );
Daha sonra ekliyoruznode1->
attachObject( ent1 );

Bukadar, Simdi programi derleyin ve calistirin,
Bundan sonrasini anladan once biraz Matematik ile ilgili bilgilerinizin
ustunu biraz supurelim.
Karabit.org tan dokumanlar bolumden vektorler ili ilgili e-book u siddetle
okumanizi tavsiye ederim, Bundan sonra bir suru programda bunlari
kullanacagiz.

  Yorum yok.
Yorum ekle. (0 yorum)

 

OyunGelistirici.net - Türk Oyun Yapımcılarının Buluşma Noktası

Bu sitede yazılan tüm yazıların hakları yazarlarına aittir. İzin alınmadan yayınlanamaz.

Bu sitede Firefox kullanmanız önerilir. En az 1024 x 768 masaüstü çözünürlüğü tavsiye edilir.