Sunday, June 1, 2014

OGRE Game Engine


GAME ENGINE

Game 
Game atau dalam bahasa Indonesia disebut sebagai permainan mengandung arti “kelincahan intelektual” (intellectual playability). Game juga bisa diartikan sebagai arena keputusan dari aksi pemainnya karena ada target-target yang ingin dicapai, kelincahan intelektual pada tingkat tertentu juga merupakan ukuran sejauh mana game itu menarik untuk dimainkan secara maksimal. Pada era globalisasi saat ini, para pengelola industry game berlomba-lomba untuk menciptakan game yang lebih nyata dan menarik untuk para pemainnya. Hal inilah yang membuat perkembangan game di computer sangat cepat. Sehingga game bukan hanya sekedar permainan untuk mengisi waktu luang atau sekedar hobi, melainkan sebuah cara untuk meningkatkan kreatifitas dan tingkat intelektual para penggunanya bahkan sebagai sebuah lapangan pekerjaan.

Game Engine

Game Engine dalam bahasa Indonesia diartikan sebagai mesin permainan, adalah sebuah system software yang dirancang untuk pembuatan dan pengembangan suatu video game. Terdapat banyak sekali game engine yang dirancang untuk bekerja pada beberapa konsol video game dan sistem operasi desktop seperti Microsoft Windows, Linux, dan Mac OS X. fungsi utama yang secara khusus disediakan oleh game engine meliputi mesin render (renderer) untuk grafik dua dimensi atau tiga dimensi, mesin fisika, deteksi tabrakan (dan tanggapan tabrakan), suara, script, animasi, kecerdasan buatan, jaringan, streaming, manajemen memori, threading, dukungan lokalisasi dan layar grafik. Banyak sekali game engine yang ada sekarang ini, mulai dari yang gratis sampai yang berbayar. Berikut masing-masing 10 contoh game engine yang gratis dan berbayar.

Pada pembahasan game engine ini,  saya akan mencoba untuk menjelaskan fitur-fitur serta teknologi game engine yang ada pada OGRE. Mengapa memilih OGRE? saya memilih OGRE dikarenakan game engine tersebut merupakan salah satu  game engine yang pernah saya pelajari dan saya coba. Baiklah sebelum itu, kita harus mengetahui apa sih OGRE itu?

OGRE
Ogre (Object Oriented Graphics Rendering Engine) merupakan open source rendering engine grfik yang ditulis dan dimaintain oleh tim inti kecil. Awal mula tahun 1999 kemudian baru dikenal pada tahun 2000 oleh suatu komunitas source forge.
Berikut ini adalah file-file yg dibutuhkan untuk membuat aplikasi 3D dengan library OGRE3D (Object Oriented Graphics Rendering Engine) antara lain :
         Eclipse-CPP ganymede sebagai IDE C++
         MinGW toolbox sebagai GCC opensource compiler
         MYSYS sebagai GNU Terminal environment
        OGRE3D SDK sebagai rendering engine di OGRE SDK for Code::Blocks + MinGW C++ Toolbox , perlu diperhatikan bahwa kita menggunakan MinGW sebagai c++ compilernya
OGRE hanyalah rendering engine. Seperti pada engine lainnya, hanya saja OGRE pada umumnya hanya sebagai graphic rendering. Dengan kata lain fitur OGRE hanya khusus menangani vector & matrix classes, memory handling, dan lain-lain. Ini bukanlah salah satu dari semua solusi dalam istilah game development / simulasi, OGRE tidak menyediakan audio / physics support.
Walaupun penjelasan diatas bisa dikatakan sebagai kelemahan dari ogre itu sendiri, akan tatapi itu semua sebanding dengan kemampuan grafis yang ada pada game engine tersebut. Kelebihan yang paling menonjol pada ogre adalah graphics engine yang bisa memberikan para developer sebuah kebebasan untuk menggunakan physics apapun, input, audio, & library lainnya. OGRE memberikan para tim development untuk fokus pada graphics daripada beberapa sistem-sistem yang ada dalam game development. OGRE dapat mensuport OIS, SDL, dan CEGUI libraries. Sekarang ini OGRE adalah publish dibawah dua lisensi, yaitu LGPL & OUL. Maka sekarang ini para publish tersebut membuka OGRE sebagai free / open-source software.

Contoh OGRE 3D Game Engine
Game Menjatuhkan Dadu dengan Bola 


Karakter pada Game Menjatuhkan Dadu dengan Bola
Dalam game “Menjatuhkan Dadu dengan Bola” ini terdapat dua objek yang utama, yaitu dadu dan bola. Di sini terdapat satu bola yang berwarna merah yang bertugas untuk menjatuhkan dadu dengan tepat sasaran. Diharapkan untuk sekali lemparan bola dapat menjatuhkan semua dadu. Sedangkan objek utama yang kedua ialah dadu. Dadu yang yang berbentuk kotak dan bertuliskan nilai “10” ini ada enam buah dalam permainan ini. Keenam dadu tersebut tersusun secara rapih dan teratur membentuk sebuah piramida dia atas sebuah alas menyerupai meja.

Software yang Digunakan

Mengenai software-software yang digunakan dalam pembuatan game “Menjatuhkan Dadu dengan Bola” satu persatu. Software yang digunakan tersebut diantaranya adalah
·        OGRE 3D Game Engine,
·        3DS Max,
·        OgreSceneMaxExporter,
·        Visual C++,
·        Ogre SDK, dan
·        Direct X SDK.

3Ds Max 3D 
Studio Max (kadangkala disebut 3ds Max atau hanya MAX) adalah sebuah perangkat lunak grafik vektor tiga dimensi dan animasi, ditulis oleh Autodesk Media & Entertainment (dulunya dikenal sebagai Discreet and Kinetix). Perangkat lunak ini dikembangkan dari pendahulunya 3D Studio for DOS, tetapi untuk platform Win32. Kinetix kemudian bergabung dengan akuisisi terakhir Autodesk, Discreet Logic. Versi terbaru 3Ds Max pada Juli 2005 adalah 7. 3Ds Max versi terbaru sampai tahun ini adalah 3Ds Max Autodesk versi 8. Interface pada 3Ds Max dibagi menjadi beberapa bagian, yaitu Title Bar, Menu Bar, Tool Bar, empat buah Viewport, Control Panel, Time Slider, Viewport Configuration Control. 

Title Bar 
Title Bar adalah Judul atau halaman yang sedang aktif atau yang sedang digunakan.

Menu Bar 
Manu Bar berisikan tool-tool seperti move, rotate, scale, array, rendering dan tool lainnya yang umum dan sering digunakan. Diatasnya terdapat property toolbar seperti menu file, edit, tools, dan lainnya, dari sini And adapt mengantar dan memilih seluruh fasilitas-fasilitas yang ada di dalman 3ds max.

Viewport 
Viewport adalah area anda untuk bekerja seperti pengeditan dan pembentukan obyek.

  • Viewport Top. Digunakan untuk melihat tampilan dari atas 
  • Viewport Left. Digunakan untuk melihat tampilan dari samping kiri 
  • Viewport Front. Digunakan untuk melihat tampilan dari depan 
  • Viewport Perspective. Digunakan untuk melihat tampilan secara perspective
Time Slider 
Time slider berfungsi untuk menunjukkan atau membaca frame yang sedang berlangsung. Tool ini digunakan utnuk memproses animasi.

Command Panel 
Berisikan perintah-perintah yang terdapat di dalam 3d max secara langsung, misalnya membuat objek, pengeditan objek, display, utility dan perintah lainnya.

Object Categories 
Fasilitas ini terdapat dalam Tab Create yang berfungsi untuk membuat berbagai macam objek. Objek-objec yang ada merupakan objek yang umum dan sering dilihat disekitar kita dan juga terdapat perintah-perintah yang mendukung untuk proses pemodelan.

Time Control 
Sama seperti aplikasi animasi lainnya, 3d max terdapat time control untuk mengatur proses animasi anda.

Viewport Navigation Control
Berisikan fitur-fitur yang berfungsi untuk melakukan pengaturan terhadap viewport Anda seperti menggeser Viewport, Zoom All, Zoom Extens All, dan fungsi lainnya.

Ogre Scene Max Exporter 
Pada umumnya objek yang dibuat pada 3Ds Max merupakan file dengan ekstensi .3ds. Sedangkan Ogre hanya bisa memproses objek dengan ekstensi file .mesh. Oleh karena itu dibutuhkan software tambahan yang dapat digunakan untuk mengkonversi objek dengan ekstensi file .3ds ke .mesh. Di sini software yang dapat digunakan adalah Ogre Max Exporter.

Visual C++ 
Visual C++ adalah sebuah produk Integrated Development Environment (IDE) untuk bahasa pemrograman C dan C++ yang dikembangkan Microsoft. Visual C++ merupakan salah satu bagian dari paket Microsoft Visual Studio. Visual C++ dapat berjalan lebih cepat pada windows karena hanya memerlukan memori yang kecil. Dalam hal ini, Ms. Visual C++ lebih unggul jika dibandingkan dengan Ms. Visual Basic. Ini menjadi salah satu alasan Ms. Visual C++ lebih dipilih programmer untuk membuat berbagai aplikasi dekstop maupun antivirus.

OGRE SDK 
SDK (Ogre Software Development Kit) sendiri merupakan alat untuk pengembangan piranti lunak. Dalam kata lain, Ogre SDK merupakan alat untuk pengembangan software pada game engine itu sendiri, yaitu Ogre.

Direct X SDK 
DirectX (atau bisa disebut Direct3D) adalah kumpulan API untuk menangani berbagai tugas dalam pemrograman multimedia khususnya permainan komputer dalam sistem operasi Microsoft Windows. DirectX sendiri merupakan gabungan dari Direct3D, DirectDraw, DirectMusic, DirectPlay, dan DirectSound. DirectX SDK dapat diperoleh secara cuma-cuma dari Microsoft.

Contoh Kasus
Di sini akan dijelaskan cara membuat permainan atau game dengan menggunakan Ogre 3D engine. Ogre 3D hanya sebagai perender hasilnya. Sedangkan untuk coding dan memetakan objeknya dibutuhkan bantuan dari aplikasi lain seperti Visual C++, 3D Max dan converter objeknya. Permainan yang dibuat di sini adalah “Game Menjatuhkan Dadu dengan Bola”. Berikut akan dijelaskan langkah-langkah pembuatannya. 
1.      Pertama-tama lakukan instalasi pada software 3D max terlebih dahulu, versi yang digunakan di sini adalah 3D Max 2008. Kemudian install Converter 3D to mesh, yaitu OgreMaxSceneExporter. Software ini digunakan untuk merubah objek berekstensi .max, .3ds, dan lain-lain menjadi file berekstensi .mesh. 
2.      Kemudian membuat objek yang nantinya akan digunakan, yaitu sebuah bola dan enam buah dadu menggunakan 3Ds Max. Kemudian simpan ketujuh objek tersebut. Konversi objek yang telah dibuat ini dengan cara klik File – Eksport, setelah itu pilih format berekstensi .mesh agar objek yang dibuat ini dapat dibuka pada Ogre3D. 
3.      Berikutnya lakukan instalasi pada beberapa software pendukung yang dibutuhkan seperti Visual C++, Ogre SDK, dan Direct X SDK. Setelah itu masukan objek yang sudah dikonversi berekstensi .mesh tadi ke Ogre SDK yang telah diinstal. Pada umumnya, Ogre SDK ini terdapat pada direktori C dan cari folder Ogre SDK. Pilih media – model, lalu tempatkan objek yang dibuat ke tempat itu. 
4.      Buka visual studio 2008 – create new project – Visual C++ win32 console application, berikan nama pada project yaitu gameKu.cpp dan klik OK, kemudian next. Pada bagian Application type pilih Windows Application dan pada bagian Additional options pilih empty project. Selanjutnya akan dibuat item pada project yang telah dibuat sebelumnya, pada menu Project –add new item – C++ File (.cpp) – beri nama main – klik Add. Maka secara otomatis akan muncul editor tempat menulis script cpp. Berikut adalah link untuk script yang digunakan. http://dikitdoang.blogspot.com/2010/05/membuat-game-dengan-ogre-3d.html 
5.      Buat item baru kembali untuk Header File (.h) dan masukkan script dari link ini kembali.
6.      Copy folder Media dan folder bin pada Ogre SDK di default path installation tempat menginstal Ogre ke folder workspace tempat project yang dibuat berada. Kemudian konfigurasikan path pada file resources.cfg pada folder debug dan resources.cfg pada folder release. Ganti bagian ../../ .. dengan path tempat default path installation tadi. Setelah konfigurasi ini selesai, berikutnya lakukan konfigurasi pada properties project. Pada jendela solution explorer, klik kanan nama project lalu pilih menu properties. Lakukan konfigurasi seperti ketentuan di bawah ini. 
7.      Pada debug active : 
Debugging : Working Directory = ..\bin\Debug 
Linker : General : Output File = ..\bin\Debug\hello.exe 
Linker : Input : Additional Dependencies += OgreMain_d.lib 
Linker : Input : Additional Dependencies += OIS_d.lib 
Linker : General : Additional Library Directories = $(OGRE_HOME)\lib 
C/C++ : General : Additional Include Directories = 
..\include;$(OGRE_HOME)\include;$(OGRE_HOME)\samples\include
8.    Lakukan juga pengaturan untuk folder Release, tetapi ganti bagian OgreMain_d.lib dan OIS_d.lib di atas menjadi OgreMain.lib dan OIS.lib.
9.     Konfigurasi selesai dilakukan. Lakukan running program dengan menekan tombol F5 pada keyboard. Maka akan muncul tampilan “OGRE Engine Rendering Setup”. Pilih Direct 3d9 Rendering Subsystem, maka hasil gambar berupa windows application akan tampil seperti berikut ini.


Contoh Lain Project Ogre

#include "ExampleApplication.h"


class test : public ExampleApplication {
public:
 test(){

 }

 ~test(){

 }
protected:
virtual void createCamera(void){
mCamera = mSceneMgr->createCamera("PlayerCam");
mCamera->setPosition(Vector3(-100,500,-200));
mCamera->lookAt(Vector3(0,250,0));
mCamera->setNearClipDistance(5);
}
virtual void createViewports(void)
{
Viewport* vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(1,1,1));
mCamera->setAspectRatio(Real(vp->getActualWidth()) /
Real(vp->getActualHeight()));
}
void chooseSceneManager(void) {
mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE);
}

void createScene(void)
{
mSceneMgr->setAmbientLight(ColourValue(1,1,1));
Entity *ent1 = mSceneMgr->createEntity("Ogrehead","ogrehead.mesh");
SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode ("OgreheadNode");
node1->attachObject(ent1);
node1->translate(700,500,2000);
node1->setScale(7,7,7);
node1->yaw(Degree(-180));
node1->pitch(Degree(60));

Entity *ent2 = mSceneMgr->createEntity("Robot","robot.mesh");
SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode ("RobotNode");
node2->attachObject(ent2);
node2->translate(500,100,500);
node2->yaw(Degree(-180));
node2->setScale(4,4,4);

Entity *ent3 = mSceneMgr->createEntity("Razor1","razor.mesh");
SceneNode *node3 = mSceneMgr->getRootSceneNode()->createChildSceneNode ("Razor1Node");
node3->attachObject(ent3);
node3->translate(1500,800,2000);
node3->setScale(7,7,7);
node3->yaw(Degree(-130));

Entity *ent4 = mSceneMgr->createEntity("Ninja","ninja.mesh");
SceneNode *node4 = mSceneMgr->getRootSceneNode()->createChildSceneNode ("NinjaNode");
node4->attachObject(ent4);
node4->translate(500,50,800);
node4->setScale(2,2,2);
node4->yaw(Degree(90));
mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox");
mSceneMgr->setWorldGeometry("terrain.cfg");
}
};
#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
{
 test app;
 try {
 app.go();
 } catch (Exception e) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
 MessageBox(NULL,e.what(),"Terjadi Error!",MB_OK | MB_ICONERROR
|MB_TASKMODAL);
#else
 fprintf(stderr,"Terjadi Error = %s\n",e.what());
#endif
 }
 return 0;
}


Hasil Output