Gambar1.1 OgreHeadApp
Pada Saat setting applikasi kita masih menggunakan class (tutorial application) yang inherit dari class OGRE example Application. Sekarang kita akan mencoba buat class applikasi OGRE sendiri. Ubah Main.cpp seperti dibawah ini :
#include <Ogre.h>
#include <OIS/OIS.h>
using namespace Ogre ;
class TutorialApplication
{
public:
TutorialApplication()
{
}
~TutorialApplication()
{
}
void go()
{
}
};
#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
MessageBoxA( 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;
}
Pada kode diatas kita membaut class TutorialApplication dengan sebuah fungsi void go(), yang nantinya akan dipanggil di fungsi main. Jika kita membuka ExampleApplication.h maka akan banyak kita temui fungsi – fungsi seperti setup(), createCamera,createViewport,dll.
Pada latihan kali ini kita hanya membuat 1 fungsi go() saja dan semua code untuk class TutorialApplication akan kita letakkan disana. Ok, kita mulai saja letakkan code berikut pada Main.cpp class TutorialApplication, fugnsi Void go() :
1. Hal yang pertama akan kita buat adalah objek Ogre::Root, yang merupakan inti dari Ogre
// Create OGRE Root
Ogre::Root *mRoot = new Root();
2. Kita beri tahu Ogre dimana letak Resource ( scripts, texture, model, particle, dll ). Path untuk Resource ada di file resources.cfg, file tersebut bisa kita temukan di cobaOgre/bin/debug. Kita akan meLoad resources.cfg dengan menggunakan Ogre::ConfigFile dan memparsing isinya (path dari resources) kedalam ResourceGroupManager
Ogre::ConfigFile cf;
cf.load("resources.cfg");
ConfigFile::SectionIterator seci = cf.getSectionIterator();
while (seci.hasMoreElements())
{
String secName = seci.peekNextKey();
ConfigFile::SettingsMultiMap *settings = seci.getNext();
ConfigFile::SettingsMultiMap::iterator i;
for (i = settings->begin(); i != settings->end(); ++i)
{
String typeName = i->first;
String archName = i->second;
ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName);
}
}
3. Memunculkan Ogre config Dialog ( Gambar 1.2 ) agar user bisa mengeset Rendering Subsystem (DirectX / OpenGL ) dan Rendering System Options (FullScreen, video Mode, dll). Apabila user membatalkan config Dialog maka Ogre::Root akan dihapus.
Gambar1.2 Ogre Config Dialog
// Show OGRE config Dialog
if(!mRoot->showConfigDialog())
{
delete mRoot;
throw Exception(52, "User canceled the config dialog!","Ogre Config Dialog");
}
4. Membuat Ogre::RenderWindow, Window untuk tempat kita merender Ogre
Ogre::RenderWindow* window = mRoot->initialise(true, "Ogre Head Application");
5. Membuat Scene , menambah Camera pade scene dan menambah Viewport pada Camera
//create Scene
Ogre::SceneManager* sceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE);
//createCamera
Ogre::Camera* camera = sceneMgr->createCamera("SimpleCamera");
camera->setPosition(Vector3(100,100,200));
camera->lookAt(Vector3(0,0,0));
camera->setNearClipDistance(4);
// Create one viewport
Ogre::Viewport* viewPort = window->addViewport(camera);
Read the rest of this entry »
Recent Comments