Sojourn

Still a Long Way To Go

  • Home
  • About

12

Nov

My First OpenGL Program

Posted by ulimhd  Published in Game Programming

Nothing much for this first program.

Yang dilakuin program ini cuma pop-up blank window. Yah, namanya juga pelajaran pertama, pasti dimulai dari yang simple.

Inti dari program ini sebenarnya bukan hasil yang keluar, tapi set-up parameter-parameter OpenGL untuk pengembangan program lebih lanjut.

Cukup membingungkan, terlebih untuk yang belum familiar dengan window programming. Sekedar saran, pelajari dulu dasar window programming terutama untuk message handling. Bukan menggurui, sekedar self-message biar saya baca-baca lagi tentang message handling, udah lama jadi lupa. Hehe..

Anyway, ini listing program yang saya buat contek dari tutorial di situs ini.

Penjelasan lebih detail dari masing-masing perintah, silakan merujuk pada Lesson #1 situs Nehe itu.

Kalau berminat download source code program ini, bisa di ambil lewat link ini:

http://www.ziddu.com/downloadlink/2628718/lesson01.zip

Mudah-mudahan bermanfaat.

Next stop: Lesson #2 Creating Basic Polygon

Tags: Game Programming, openGL

3 comments

21

Oct

Preparing OpenGL in Visual C++ 2008 Express Edition

Posted by ulimhd  Published in Game Programming

Sebenernya aga kesulitan juga untuk mulai menggunakan OpenGL di VC++ 2008 EE ini (selanjutnya ditulis VC9 aja ya, biar lebih pendek. 9 itu mengacu pada versi si VC). Pada awalnya saya kira harus download semacam SDK atau sekumpulan library seperti sewaktu saya mencoba winpcap setahun yang lalu. Ya memang benar sih, tapi ternyata kumpulan library dan file header itu ga berdiri sendiri, dengan kata lain ada dalam paket SDK yang lain. Selengkapnya seperti berikut.

Install Windows SDK
Berdasarkan tulisan ini, yang pertama dilakukan adalah menginstall Windows SDK for Windows Server 2008 and .NET Framework yang didalamnya terdapat file header dan library esensial yang diperlukan oleh OpenGL. Untungya saya ga perlu install ini karena beberapa waktu yang lalu sudah menginstall Windows SDK for Windows Server 2003 R2. Yah, memang termasuk ketinggalan jaman sih, soalnya waktu itu install untuk dijalanin di VC++ 2005 a.k.a VC8. Tapi ga masalah, library dan file header masih bisa digunakan. Jadi, dengan kata lain, tanpa perlu install versi terbaru pun sudah mencukupi.

Catatan: instalasi SDK ini hanya untuk Express Edition. Pada versi professional, SDK tidak perlu di-install karena sudah termasuk dalam paket VC9, menurut tulisan ini.

Build Library
Langkah selanjutnya adalah download dan install library GLUT. Jujur, belum tau untuk apa fungsi glut ini, tapi dari contoh pertama yang saya lihat, glut.lib ini dibutuhkan. File glut.lib beserta beberapa library yang berhubungan dengannya bisa didownload dari situs Nate Robin ini. Katanya sih glut ini udah ga update lagi. Versi yang lebih update namanya freeglut, yang bisa di download lewat SourceForge. Biar lebih mudah, silakan download glut dan freeglut dari link-link berikut:

freeglut 2.4.0 : http://www.ziddu.com/downloadlink/3182371/freeglut-2.4.0.tar.gz

glut 3.7.6 : http://www.ziddu.com/download/3182388/glut-3.7.6-bin.zip.html

Di sini kebingungan muncul. Tadi katanya library freeglut bisa didapat setelah download dari SourceForge, tapi setelah download dan extract, sama sekali ga ketemu file dengan extensi lib. Nah, setelah Googling, ternyata library freeglut baru bisa muncul setelah seluruh file di folder freeglut yang sudah di download, di build di VC9 ini. Berikut ini langkah-langkahnya:

  • Buka project freeglut.dsw dari folder freeglut.
  • dari menu bar, pilih Build >> Batch Build
  • Select All, kemudian pilih Build All
  • serangkaian proses akan berjalan otomatis dari sini. Tunggu sampai semua proses selesai.
  • Setelah selesai, freeglut.lib dan freeglut_static.lib serta freeglut.dll dapat ditemui pada folder Debug dan DebugStatic yang muncul setelah proses Build.

Install File Header, Library dan DLL
Yang dimaksud install di sini adalah meng-copy file-file freeglut dan glut ke dalam direktori atau folder yang bersesuaian.

  • Untuk file header (freeglut.h , freeglut_ext.h , freeglut_std.h , glut.h), copy-kan ke direktori

C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\gl

  • Untuk library (freeglut.lib , freeglut_static.lib), copy-kan ke direktori

C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib

  • Terakhir, untuk file DLL (freeglut.dll), copy-kan ke direktori

C:\Windows\System32

Catatan: Sesuaikan direktori “Microsoft Platform SDK for Windows Server 2003 R2″ dengan versi Windows SDK yang telah anda install.

Sampai di sini, OpenGL sudah siap digunakan. Langkah terakhir yang harus dilakukan adalah, pada tiap project OpenGL yang akan kita buat, jangan lupa untuk mendeklarasi library glut dan freeglut tadi pada bagian additional dependencies. Lengkapnya seperti ini:

  • Pilih pada menu bar Project >> [nama_project] Properties
  • Klik tanda pada Configuration Properties
  • Pilih All Configurations
  • Pilih Linker >> Input
  • Pada Additional Dependencies, tambahkan GlU32.lib OpenGL32.lib freeglut.lib glut32.lib
  • Terakhir, klik OK.

Nah, selesai sudah. Sekarang, tinggal buat program OpenGL untuk pertama kali. Ada referensi tutorial yang cukup bagus: http://nehe.gamedev.net .

Mudah-mudahan informasi ini bisa bermanfaat.

Tags: freeglut, Game Programming, gamedev, glut, openGL, sdk

4 comments

20

Oct

OpenGL – Prelude

Posted by ulimhd  Published in Game Programming

The OpenGL graphics system is a software interface to graphic software (The GL stands for Graphics Library). It allows you to create interactive programs that produce color images of moving three-dimensional objects. With OpenGL, you can control computer-graphics technology to produce realistic pictures or ones that depart from reality in imaginative ways.

OpenGL Programming Guide a.k.a OpenGL Blue Book

Setelah berkonsultasi dengan seorang teman, akhirnya saya tinggalkan dulu DirectX untuk sementara waktu beralih ke OpenGL, mempelajari dasar-dasarnya bahkan kalau bisa menjadi expert, sebelum kembali ke DirecX.

Kenapa dengan DirectX? Ga kenapa kenapa. Cuma DirectX yang selama ini dipelajari lewat buku referensi (DirectX 7), memang sudah ketinggalan jaman, lebih baik langsung pake DirectX 9. Tapi, demi mendapatkan pemahaman yang lebih baik tentang graphic programming, saya disarankan menggunakan OpenGL sebelum kembali ke DirectX.

Karena itu, selamat tinggal, DirectX (untuk sementara). Selamat Datang, OpenGL :)

Doakan saya diberi kemudahan dalam mempelajarinya :)

Tags: directx, openGL, programming

no comment

31

Jul

Studying Obsolete

Posted by ulimhd  Published in Chit Chat, Game Programming

Apa masih bermanfaat kalau kita mempelajari hal yang sudah obsolete?

Ini karena di buku referensi masih memakai DirectX 7, padahal yang ada sekarang DirectX 10. Perbedaan yang baru diketahui ada di fungsi DirectDraw yang sejak versi 8 katanya sudah di-manage oleh Direct3D.

Apa masih perlu untuk belajar mengikuti buku referensi meski versinya dah ketinggalan? Masalahnya, itu buku benar-benar cover every ground untuk game programming. Dia membahas dari dasar banget disertai contoh-contoh yang simple. Termasuk juga soal dasar window programming yang waktu jaman ngerjain TA dulu dicari-cari dan ga ketemu. Baru ketemu pas dah beres kuliah. Sigh…

Back to topic. Tapi kalau mesti ganti buku yang lebih up-to-date, pastinya ada perbedaan gaya penulisan dan perbedaan pendekatan. Nah, ini yang repot. Sudah terlanjur cocok sama buku yang ini. Rasanya bakalsulit kalau mesti ganti lagi, ditambah lagi belum tentu pembahasan selanjutnya dah kadaluarsa. Tapi kalautetap lanjut, ada resiko yang sudah dipelajari ga bakal dipake lagi seiring perubahan versi.

Jadi?

*Tulisan yang muncul akibat ga (belum) ngerti tentang DirectDraw beserta konco-konconya macam Pixel Plotting dan Back Buffer. Makanya sedang cari pembenaran biar bisa lompat ke pembahasan lain :P

Tags: direct3d, directdraw, directx, obsolete

no comment

8

Jul

Error LNK2019 Saat Mengcompile DirectX pada Visual C++ 2008

Posted by ulimhd  Published in Game Programming, Tutorial, Visual Studio 2008

Akhirnya masuk juga ke pembahasan tentang DirectX, setelah sebelumnya berkutat dengan GDI dan kawan-kawannya.

Problem pertama yang saya temui ketika akan meng-compile source code adalah munculnya pesan error berikut:

error LNK2019: unresolved external symbol _DirectDrawCreateEx@16 referenced in function “int __cdecl Game_Init(void *,int)” (?Game_Init@@YAHPAXH@Z)

Seperti biasa, untuk memecahkan masalah ini, Google sangat membantu.

Ternyata link error ini karena saya belum memasukkan library dari DirectX ke dalam project. Untuk memasukkan library DirectX, yang perlu dilakukan adalah menambahkan folder library tersebut pada directory yang ada pada menu Tools >> Options >> Projects and Solutions >> VC++ Directories >> Show Directories for Library.

Directory library dari DirectX ini biasanya terletak pada Program Files\Microsoft DirectX SDK\Lib

Jangan lupa tambahkan juga folder Include. Terus terang saya belum tau efeknya apabila folder ini tidak dimasukkan.

Setelah itu, pada menu Project >> Properties >> Configuration Properties >> Input >> Additional Dependencies, masukkan 3 buah library ini: dxguid.lib ddraw.lib dinput8.lib

Compile ulang. Seharusnya setelah langkah-langkah di atas dijalani, error yang tadi tidak akan muncul lagi.

Silakan download source code-nya disini.

Tags: C/C++, Game Programming

no comment

1

Jul

Shot The Blocks!

Posted by ulimhd  Published in Game Programming

Akhirnya, setelah dengan perjuangan darah dan keringat (berlebihan), berhasil juga membuat tahap awal dari game menembak balok ini. Yang dilakukan game ini hanya menggerakkan paddle (di dalam code, paddle ini saya namakan ship) untuk menembak balok-balok yang ada.

Masih banyak kekurangan yang belum saya perbaiki. Misalnya, peluru ditembakkan secara otomatis, yang seharusnya menembak hanya ketika tombol space ditekan. Selain itu, belum ada level ataupun sistem penilaian. Ending game pun belum saya buat. Jadi, intinya, ini benar-benar sekedar inti sebuah game, terutama dibuat agar saya dapat merasakan dan mengerti dasar dari pembuatan game.

Silakan klik disini untuk mendapatkan source code dari program ini.

Sebelumnya saya berniat untuk menuliskan arti dari prototype game yang pernah saya post sebelumnya, tapi tampaknya sampai saat ini hal itu belum bisa terwujud. Harap bersabar…

no comment

30

Jun

Error C2065

Posted by ulimhd  Published in Game Programming, Visual Studio 2008

This is the first time I ever use the “cout” command in my codes. I always use “printf” rather than “cout”, nothing special, just the habits of using old C language.

Anyway, I try to compile this simple program using the “cout”, but it return an error like this:

error C2065: ‘cout’ : undeclared identifier

To me, it’s weird. As far as I know, “cout” is a standard command, adding the right header file (the “iostream”, that is) should make this command work. Hey, what do you know, in C++ to use this command (and other standard commands), I have to add this line after defining header files:

using namespace std;

Hm…

Still need lots of studies to master this language…

Tags: C/C++

no comment

19

May

Alur Kerja Window-based Program

Posted by ulimhd  Published in Game Programming, Tutorial

Sebelum kita lihat satu per satu arti dari tiap baris dari prototype, ada baiknya kita lihat terlebih dahulu diagram alir berikut ini:

Sumber: Windows Game Programming Gurus

Diagram di atas menggambarkan proses umum dari window-based program, termasuk untuk game.

Dari diagram, terlihat ada 3 buah proses utama yang membentuk alur program tersebut:

1. Message Queue
Message (pesan) adalah inti dari user-based program. Message merupakan respon dari program terhadap input atau proses yang terjadi pada program yang kita buat. Input disini tidak selalu berupa ketikan karakter dari keyboard. Perpindahan mouse sekecil apapun merupakan suatu input, dan perpindahan tersebut juga menghasilkan message. Message ini lah yang akan direspon oleh program yang kita buat untuk diterjemahkan ke dalam perintah-perintah yang bermakna yang mempengaruhi program kita tersebut. Misalkan, apabila kita klik tanda silang pada pojok kanan atas dari window untuk menutup window, program akan menggenerate suatu message berdasarkan tindakan kita itu, untuk kemudian menerjemahkan message itu ke dalam perintah yang menutup window.

2. WinMain
Bagian ini adalah inti dari program. Message yang dihasilkan oleh program akan diterjemahkan dalam proses ini. Dari diagram terlihat, message pertama kali akan di proses oleh perintah GetMessage(), untuk kemudian di terjemahkan oleh TranslateMessage() dan setelah itu fungsi DispatchMessage() akan memanggil proses berikutnya yaitu Event Handler. Dari diagram juga terlihat terdapat proses Game Logic. Disinilah proses dari seluruh game/program yang kita buat berjalan. Seluruh proses WinMain ini berlangsung dalam sebuah loop, suatu hal yang wajar, karena kita ingin program yang kita buat ini berjalan terus menerus sampai kita perintahkan untuk berhenti.

3. Event Handler
Disinilah seluruh message yang dihasilkan akan diproses. Terdapat banyak message yang secara default dikenali Windows. Untuk daftar lengkap message, silakan lihat secara online dari situs Microsoft.com

Tidak terlalu sulit. Mudah-mudahan bagian selanjutnya juga mudah untuk dimengerti.

Tulisan Terkait:

Prototype Game Programming

Tags: C/C++, Game Programming

no comment

16

May

Prototype Game Programming

Posted by ulimhd  Published in Game Programming, Tutorial

Ini adalah prototype yang saya gunakan untuk game programming. Saya ambil dari buku “Windows Game Programming Gurus“. Penjelasan lebih lengkap mengenai prototype ini saya jelaskan di tulisan lain.

// Generic Game Console
// The basis of all Windows Game from now on

#define WIN32_LEAN_AND_MEAN // just say no to MFC

#include <windows.h> // include all the windows headers
#include <windowsx.h> // include useful macros
#include <mmsystem.h> // include winmm.lib
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>

#define WINDOW_CLASS_NAME “WINCLASS1″ // define WINDOWCLASS

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0×8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0×8000) ? 0 : 1)

HWND main_window_handle = NULL; // globally track main window
HINSTANCE hinstance_app = NULL; // globally track instance
HDC global_dc;

char buffer[80]; // general printing buffer

// Start Window Message Processing
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
PAINTSTRUCT ps;
HDC hdc;
char buffer[80];

// create scenario for every message occured
switch(msg)
{
case WM_CREATE:
{
// do initialization stuff here

// return success
return(0);
}
break;

case WM_PAINT:
{
// simply validate the window
hdc = BeginPaint(hwnd,&ps);

// you would do all your painting here

EndPaint(hwnd,&ps);

// return success
return(0);
}
break;

case WM_DESTROY:
{
// kill the application, this sends a WM_QUIT message
PostQuitMessage(0);

// return success
return(0);
}
break;

default:
break;

} // end switch

// process any message that didn’t take care of
return (DefWindowProc(hwnd, msg, wparam, lparam));
}

int Game_Main(void *parms = NULL, int num_parms = 0)
{
// main loop for the game, do all the game process here

// test if the user press ESC key
// use it to send WM_CLOSE message to winproc
if(KEYDOWN(VK_ESCAPE))
SendMessage(main_window_handle, WM_CLOSE, 0, 0);

return(1);
}

int Game_Init(void *parms = NULL, int num_parms = 0)
{
// this is called after the initial window is created and
// before the main event loop (Game_Main function) run.
// do all the initialization here

return(1);
}

int Game_Shutdown(void *parms = NULL, int num_parms = 0)
{
// this is called after the game is exited
// and the main event loop “while” is exited.
// do all the cleanup and shutdown here

return(1);
}

// this is the main function, specify every event occured in and for the window
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASSEX winclass; // this will hold the class we create
HWND hwnd; // generic window handle
MSG msg; // generic message
HDC hdc;

winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

hinstance_app = hinstance;

// register the window class
if(!RegisterClassEx(&winclass))
return(0);

// create the window
if(!(hwnd = CreateWindowEx(NULL,
WINDOW_CLASS_NAME,
“Generic Game Console, For All Your Gaming Solutions”,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0,
400, 300,
NULL,
NULL,
hinstance,
NULL)))
return (0);

// save the main window handle
main_window_handle = hwnd;

// intialize game here
Game_Init();

// main event loop. this is where the game logic running
while(TRUE)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT) // test to see if the message is to quit
break;

// translate message
TranslateMessage(&msg);

DispatchMessage(&msg);

}
// this is where the main processing occured
Game_Main();
}

Game_Shutdown();

return(msg.wParam);
}

Tags: C/C++, Game Programming

no comment

Search Here

 

September 2010
M T W T F S S
« Mar    
 12345
6789101112
13141516171819
20212223242526
27282930  

Recent Comments

  • suta on SMS 1717
  • suta on SMS 1717
  • dhika on Install MS-Office 2007 di Ubuntu 9.04
  • panji on Rubik’s Cube
  • Hcmsu on Tidak Bisa Mengaktifkan Visual Effect

Recent Posts

  • Rubik’s Cube
  • Cahaya Mata
  • Bandung Lagi Deh
  • Sekedarnya
  • EPL Joke

Categories

  • Bike
  • Blogsome
  • Chit Chat
  • Comic
  • Extra Post
  • Game Programming
  • General Info
  • Internet and Technology
  • Joke
  • That a Science?
  • Thought
  • Tutorial
  • Ubuntu
  • Uncategorized
  • Vista Stuff
  • Visual Studio 2008
  • Windows
  • Word of The Day

Blogroll

  • Documentation
  • Themes
  • WordPress Planet

Contributors

  • Words of A Mind

Friends

  • Achai
  • Deni Yulian
  • Detri
  • Effendi
  • Eric
  • Ericson
  • Nico
  • Sigit
  • Siti

Archives

  • March 2010
  • January 2010
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008

Recent Entries

  • Rubik’s Cube
  • Cahaya Mata
  • Bandung Lagi Deh
  • Sekedarnya
  • EPL Joke
  • Hujan di Pagi Hari
  • Akhirnya Koala Juga
  • Error Saat Menjalankan Perintah Configure
  • Unbounce di Googlegroups
  • Time to Upgrade?

Recent Comments

  • suta in SMS 1717
  • suta in SMS 1717
  • dhika in Install MS-Office 2007 di Ubuntu 9.04
  • panji in Rubik's Cube
  • Hcmsu in Tidak Bisa Mengaktifkan Visual Effect
  • aseta in Rubik's Cube
  • union in Verifikasi PayPal Tanpa Kartu Kredit
  • ulimhd in Rubik's Cube
  • siti in Rubik's Cube
  • ulimhd in Hati-hati Penipuan Produk Aowa
  • Random Selection of Posts

    • Photo Gallery
    • Uninstall Game Robots (dan Game Lainnya) di Ubuntu
    • Hati-hati Penipuan Produk Aowa
    • My Rain Gear
    • My Way of Simple Math
    • Hello Again
    • Ubuntu 9.04 Jaunty Jackalope on Lenovo R61
© 2008 Sojourn is proudly powered by WordPress
Theme designed by Roam2Rome