Improve the Basic tutorial

13 05 2009

Ok sekarang kita akan sedikit mempoles Basic tutorial sebelumnya dengan menambah Loading Bar dan Plane ..hehe….

1. Menambah Loading screen dan progress Bar

Loading Screen biasanya ditampilkan pada saat program sedang meload resources atau initialisasi. Nah pada saat Loading biasanya ditampilkan gambar maupun animasi. Animasi yang sering dipake adalah progress bar yang menunjukkan persentasi proses yang sedang berjalan.

Pada OGRE 3D sudah ada contoh Loading Bar menggunakan Ogre::overlay. Untuk memulainya, tambahkan pada applikasi code berikut :

#include <ExampleLoadingBar.h>

setelah itu cari code initialisasi Resource Group :

ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

tambahkan code ini diatasnya :

// add Loading bar
ExampleLoadingBar mLoadingBar;

mLoadingBar.start(window, 1, 1, 0.7f);
sceneMgr->clearSpecialCaseRenderQueues();
sceneMgr->addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
sceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);

Pada sceneMgr diatas kita menghapus semua Render_queue, dan menambah Render_queue_overlay , karena LoadingBar menggunakan Ogre::overlay. Setelah itu lakukan initialisasi Resources Group. setelah selesai maka kita kembalikan Render_queue seperti semula. Masukkan code berikut dibawah inisialisasi resource Group

// Back to full rendering
sceneMgr->clearSpecialCaseRenderQueues();
sceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
mLoadingBar.finish();

apabila berhasil maka Gambar akan mucul 😛

loadingbar

Gambar 1.1 Loading Screen

Read the rest of this entry »





OGRE Basic tutorial

11 04 2009

ogreheadapp

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.

configdialogGambar1.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 »