Irrlicht di OSX

Yeay! Saya ingin menulis artikel ini karena susah sekali mencari tutorial untuk menjalankan Irrlicht dengan IDE XCode. Semoga artikel ini bisa bermanfaat.
Apa saja yang dibutuhkan?

1. Irrlicht Engine SDK. Bisa didownload di irrlicht.sourceforge.net

2. XCode. Saya menggunakan XCode versi 3.2.6

3. OS X saya versi 10.6.8

4. Charger. Karena siapa tahu mac kamu sedang masa kritis baterai. Untuk prosescompile akan menggunakan energi yang cukup besar.

5. Internet dan waktu 😀

Yuk yuk kita mulai.
Disclaimer, Saya nubie! Don’t ask me advanced things such why those syntax iz had to be like that and advanced details about c++ XD.


1. Download irrlicht.

2. Lihat bin > MacOSX. Apakah isinya kosong? Jika ya berarti kita harus
mengcompile dulu. (Begitu sih yang dibilang tutorial)

3. Buka source/Irrlicht/MacOSX/MacOSX.xcodeproj

4. Ubah active configuration menjadi Release

5. Pastikan Active Architecture (letaknya di paling bawah) merupakan i386 (kalau
mac kamu menggunakan processor intel, jika masih PowerPC gunakan ppc)

6. Di bagian Group and Files (yang banyak filenya di sebelah kiri itu), klik file
MacOSX dan tekan CMD+I. Di tab Build ubah Base SDK menjadi latest Mac OSX

7. Pilih Build > Build (BUKAN BUILD AND RUN!)

8. Mungkin akan memakan waktu yang agak lama. Tunggu dulu karena ini adalah proses building.

9. Selesai, akan ada folder baru namanya Release yang berada di satu folder dengan file MacOSX.xcodeproj kita

10. Buka folder build/Release, dan cek, ada file bernama libirrlicht.a baru

Memulai demo

1. Buka XCode dan buat project baru. Pilihlah template di bagian Mac OS X > Other > Empty Project.

2. Beri nama project kamu, saya memberinya nama irrMa, dan klik save

3. Pilih menu Project > Add to Project. Akan ada dialog box untuk pilihan file.

4. Sekarang masukkan library yang perlu. Letaknya ada di Macintosh HD/System/Library/Frameworks. Bagi yang jauh, bagaimana cara up one level folder di OS X? Tekan CMD+UP_KEY

5. Masukkan framework Carbon, Cocoa, OpenGL, dan IOKIT

Untuk OpenGL letaknya ada di bawah

juga IOKit

6. Di Editor akan ada 4 framework

7. Selanjutnya masukkan libirrlicht yang telah di compile. Caranya sama dengan

Add to project tadi. Masukkan libirrlicht.a. Cara gampangnya kamu juga bisamendrag file dari Finder ke kotak dialog

8. Sekarang ada 5 library yang sudah dimasukkan

9. Masukkan MainMenu.nib ke project kamu agar project bisa dikeluarkan

10. Pilih Project > New Target…

11. Pilih Cocoa > Application. Klik Next

12. Beri nama untuk target. Saya memberinya nama Sydney

13. Pilih Project > New Group

14. Beri nama Resources

15. Pada folder irrlicht kita, buka folder Media dan masukkan Sydney.md2 ke dalam Resources dengan cara melakukan dragging. Kemudian beri cek “Copy Into ”destionation group’s folder (if needed)”. Klik Add

16. Masukkan juga Sydney.bmp

17. Pada Targets, pilih target yang akan dibuat (misalnya Sydney), tekan CMD+I untuk melihat info nya.

18. Di bagian Build, Hapus isi dari Precompiled Headers Cache Path nya.

19. Masih di bagian Build, Uncheck pilihan “Precompiled Prefix Header”

20. Cari Prefix Header dan hapus isinya

21. Architecturenya Native

22. Di tab bagian General, pilih Base SDK For All Configurations nya menjadi Latest Mac OS.

23. Sekarang buka Project > Edit Project Settings. Di Tab Build, klik Header SearchPath. Tambahkan path baru dengan mengklik tombol +, atau drag . File yang diinclude adalah di folder irrlicht versi yang kamu download > include . Cek tanda recursive

24. 

25. Pilih Project > Edit Project Settings. Pada bagian General buat Project Format menjadi XCode 3.2-Compatible

26.

27. Pilih File > New File… kemudian pilih C++ File.

28. Uncheck “also create .h”, dan beri nama file yang akan disimpan dengan nama main.cpp

Ketikkan kode berikut:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <OpenGL/OpenGL.h>
#include <irrlicht.h>
#include <iostream>
using namespace irr;
#pragma comment    (lib, "libIrrlicht.a")
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
char * resPath( char** argv, char* file )
{
// returns the path to the "Resources" directory
    char    tempPath[1024];
    strncpy( tempPath, argv[0], 1023 );
    int    x = strlen(tempPath) -1;
    while( tempPath[x] != '/' && x > 0 )
        tempPath[x--] = 0;
    
    strncat( tempPath, "../Resources/", 1023 );
    return strncat( tempPath, file, 1023 );
}
int main(int argc, char** argv){
    IrrlichtDevice *device = createDevice(video::EDT_OPENGL, dimension2d<u32>(640, 480), 16, false, false, false, 0);
    
    if (!device) {
        return 1;
    }
    
    
    device->setWindowCaption(L"Halo Duniaku dengan IRRLICHT");
    
    IVideoDriver *driver = device->getVideoDriver();
    ISceneManager *smgr = device->getSceneManager();
    IGUIEnvironment *guienv = device->getGUIEnvironment();
    
    guienv->addStaticText(L"Oh waw halo duniaaa", rect<s32>(10, 10, 260, 22), true);
    
    printf("Disini nih seharusnya\n");    
    //resPath(argv,"dwarf.x")
    IAnimatedMesh * mesh = smgr->getMesh(resPath(argv,"sydney.md2"));
    
    if(!mesh){
        printf("Oo.. tidak bisa");
        device->drop();
        return 1;
    }
    
    IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
    
    if(node){
        node->setMaterialFlag(EMF_LIGHTING, false);
        node->setMD2Animation(scene::EMAT_STAND);
        node->setMaterialTexture(0,driver->getTexture(resPath(argv, "sydney.bmp")));
        
    }
    
    
    smgr->addCameraSceneNodeFPS(0,100,0.05,-1,0,0,false);
    
    
    while(device->run())
    {
        driver->beginScene(true, true, SColor(255,100,101,140));
        
        smgr->drawAll();
        guienv->drawAll();
        
        driver->endScene();
    }
    
    device->drop();
    
    return 0;
    
}

29. Cobalah Build And Run, atur navigasi dengan tombol arrow dan mouse 😀

Feel free to ask 🙂