Pengantar Pemrograman OpenGL di Linux(Ubuntu)
Tulisan ini didedikasikan untuk Anda yang ingin memrogram OpenGL dengan GLUT (GL Utility Toolkit) di Linux. Jika Anda terbiasa memrogram di WIndows dengan Microsoft Visual C++ dan ingin melakukannya di Linux, maka tulisan ini sesuai untuk Anda. Tulisan ini memperkenalkan kepada Anda OpenGL, GLUT, masalah lisensi GLUT, FreeGLUT sebagai alternatifnya, instalasi FreeGLUT di Ubuntu, pengaturan IDE Geany untuk kompilasi OpenGL dengan g++, dan tentunya contoh-contoh programnya. Semoga tulisan ini bermanfaat.
Isi Tulisan Ini
- Apa Itu OpenGL dan GLUT
- Bagaimana Pemrograman OpenGL Itu
- Masalah Lisensi GLUT
- FreeGLUT Sebagai Solusi Terbaik
- Menginstal OpenGL dan FreeGLUT di Ubuntu
- Menginstal IDE Geany untuk Menulis Kode
- Mengatur Konfigurasi Build Options Geany g++
- Contoh-Contoh Kode Program OpenGL FreeGLUT
- Membaca dan Memahami Dokumentasi Teknis OpenGL
- Kumpulan Referensi Lanjutan OpenGL dan GLUT
- Referensi Tulisan Ini
1. Apa Itu OpenGL dan GLUT
OpenGL adalah Open Graphic LIbrary. Ia adalah library, kumpulan header-header yang berisi fungsi khusus, yang berguna untuk membuat grafis di komputer. OpenGL juga merupakan API (Application Programming Interface) yang setara dengan Microsoft Direct3D. Dengan OpenGL, orang bisa membuat grafis digital, animasi, hingga game 2D/3D sebagaimana biasa dilakukan dengan Direct3D juga. OpenGL bisa digunakan dengan bahasa pemrograman C, C++, Python, dan FORTRAN. Tulisan ini hanya membahas OpenGL dengan C++.GLUT (GL Utility Toolkit) adalah pustaka yang dibuat untuk membantu OpenGL dalam hal I/O ke dalam sistem operasi secara low-level. Dengan kata lain, GLUT yang bertanggung jawab membuat jendela untuk OpenGL. GLUT juga yang bertanggung jawab memroses masukan dari keyboard/mouse pengguna untuk mengendalikan program OpenGL. Tulisan ini akan dititikberatkan pada GLUT daripada OpenGL.
2. Bagaimana Pemrograman OpenGL itu
Pemrograman C++ dengan pustaka OpenGL itu dilakukan untuk menghasilkan suatu gambar di monitor secara manual. Anda akan menjumpai subpustaka-subpustaka di dalam OpenGL seperti GLUT, GLU, dan GLEW. Secara singkat, Anda akan menemukan fungsi-fungsi program seperti berikut:- glBegin()
- glEnd()
- glVertex2f()
- glClear()
Perlu diingat, fungsi-fungsi dalam pemrograman OpenGL itu sangat khas. Di dalam OpenGL, Anda akan menemukan fungsi-fungsi yang selalu diawali dengan gl seperti:
- glTranslatef()
- glClear()
GLUT
Sedangkan di dalam GLUT, Anda akan temukan fungsi-fungsinya berawalan glut seperti:- glutMainLoop()
- glutDisplayFunc()
- glutInit()
- glutCreateWindow()
GLU
Selain keduanya, Anda juga akan bertemu dengan GLU (OpenGL Utility Library) yakni pustaka inti OpenGL yang merupakan pustaka grafisnya. Pustaka ini mudah dikenali dengan fungsi-fungsinya yang selalu berawalan glu seperti:- gluOrtho2D()
- gluPerspective()
- gluPickMatrix()
GLEW
GLEW adalah OpenGL Extension Wrangler, suatu pustaka yang bertugas memuat ekstensi-ekstensi (baca: plugin) OpenGL ke dalam kode program. GLEW digunakan dengan #include <GL/glew.h>. Di dalam GLEW, ada fungsi utama glewInit(). Dan Anda bisa memanggil ekstensi OpenGL dengan memakai variabel GLEW_{nama_ekstensinya}.Singkatnya, pemrograman OpenGL sangat bergantung pada fungsi-fungsi. Maka mau tidak mau, Anda harus tahu (bukan hafal) fungsi-fungsi yang disediakan oleh OpenGL. Sedangkan Anda tidak harus memulai semua pemrograman dari nol karena sudah disediakan dokumentasi resmi dan sangat banyak tersedia contoh-contoh kode program OpenGL di internet. Cukup salin dan jalankan. Maka Anda akan menemukan bahwa siklus pemrograman OpenGL itu sederhananya demikian:
- Dapatkan contoh kode program.
- Jalankan.
- Baca dokumentasi OpenGL (baca fungsi yang dibutuhkan).
- Kembali ke tahap 1.
Perlu diketahui, OpenGL adalah pustaka yang sangat terkenal. Jadi akan sangat mudah menemukan contoh program dan panduan di internet. Anda pun bisa mulai membiasakan diri membaca dokumentasi referensi pustaka OpenGL. Berikut ini skrinsot yang diambil dari halaman http://www.opengl.org/sdk/docs/man4/.
3. Masalah Lisensi GLUT
GLUT sendiri adalah pustaka yang proprietari. Selain itu, GLUT telah berakhir pengembangannya pada 1998. Permasalahan pentingnya, lisensi GLUT tidak mengizinkan distribusi pustaka yang telah dimodifikasi.4. FreeGLUT Sebagai Solusi Terbaik
Karena masalah GLUT, komunitas open source berinisiatif membuat implementasi GLUT yang open source dari nol. Akhirnya muncullah FreeGLUT yang kompatibel 100% (artinya kode fungsi-fungsinya sama) dengan GLUT. FreeGLUT memiliki kelebihan di sisi pengembangan yang aktif dan dukungan komunitas yang besar selain dia open source. Sebagai kabar baik, FreeGLUT telah tersedia di repositori Ubuntu sejak lama.Sebenarnya masih ada solusi selain FreeGLUT yaitu OpenGLUT. Namun ia sendiri sudah berhenti dikembangkan pada 2005. Oleh karena itu, FreeGLUT adalah satu-satunya solusi dan yang terbaik untuk memrogram OpenGL di Linux. Tulisan ini akan menyebut FreeGLUT sebagai GLUT untuk memudahkan penjelasan.
5. Menginstal OpenGL dan FreeGLUT di Ubuntu
Instalasi GLUT di Ubuntu sangat mudah. Cukup diselesaikan dalam 1 baris perintah saja (pastikan komputer terhubung ke internet):sudo apt-get install freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev
Perintah tersebut diadakan karena kita memerlukan paket-paket berikut untuk menginstal GLUT di Ubuntu:
- freeglut3
- freeglut3-dev
- libglew1.5
- libglew1.5-dev
- libglu1-mesa
- libglu1-mesa-dev
- libgl1-mesa-glx
- libgl1-mesa-dev
sudo apt-get install build-essential
Catatan 1: jika Anda tidak terhubung ke internet, maka gunakanlah cara offline untuk menginstal paket-paket yang dibutuhkan. Dijamin berhasil jika dilaksanakan dengan benar. Silakan pilih tutorial satu atau tutorial dua.
Catatan 2: saya menulis tulisan ini pada Ubuntu 12.04 32 bit pada April 2014. Mungkin pada masa depan akan ada perubahan nama paket karena ada pemutakhiran dari developer.
6. Menginstal IDE Geany untuk Menulis Kode
Jika di Windows Anda terbiasa dengan Microsoft Visual C++, maka di Linux bisa jadi Anda memperoleh penganti yang lebih baik. Dan Anda punya banyak pilihan IDE. Tulisan ini akan menggunakan Geany sebagai IDE untuk menulis, mengompilasi, dan men-debug program C++ OpenGL. Jika tidak suka Geany, Anda bisa menggantinya dengan Codelite, Codeblocks, KDevelop, dan lain-lain. Semuanya tersedia di repositori Ubuntu. Adapun perintah instalasi Geany, sama sederhananya dengan perintah sebelumnya:sudo apt-get install geanyBerikut ini skrinsot Geany on action:
7. Mengatur Konfigurasi Build Options Geany g++
Untuk bisa memrogram, Anda harus menggunakan kompiler untuk mengubah kode sumber menjadi biner. Untuk melakukan itu, Anda harus tahu perintah kompilasinya. Setelah tahu, Anda harus memasukkan perintah itu ke dalam build options dari IDE Anda. Apa tujuannya? Supaya jika ditekan tombol Compile, perintah kompilasi akan dikerjakan oleh IDE. Begitu juga dengan tombol Build dan Run. Di sini, karena kita menggunakan bahasa C++, maka kita menggunakan kompiler g++. Lalu kita atur supaya perintah kompilasi dan build milik g++ dijalankan otomatis oleh Geany dengan menuliskan perintah g++ ke dalam menu Build > Set Build Options. Ini harus kita lakukan supaya bisa memrogram semudah Microsoft Visual C++ dengan klik untuk kompilasi.Masukkan dua perintah berikut pada tempatnya masing-masing:
- Perintah Compile: g++ -Wall -c “%f”
- Perintah Build: g++ -Wall -o “%e” “%f” -lglut -lGLEW -lGLU
Adapun maksud perintah g++ Compile di atas adalah:
- -Wall : Warning All, mengatur supaya g++ melaporkan semua pesan warning.
- -c : compile, mengatur supaya g++ mengompilasikan kode sumber tetapi tidak melakukan linking.
- “%f” : file, ini adalah tanda yang hanya dimengerti oleh Geany. Ini digunakan sebagai variabel supaya Geany bisa mengompilasikan kode sumber dengan nama berkas apa pun. Tanpa menggunakan tanda “%f”, Anda harus mengganti Build Options untuk setiap berkas berbeda.
- -Wall : lihat atas.
- -o : object, menciptakan hasil keluaran bernama file. Nama file akan ditentukan oleh argumen setelah -o ini.
- “%e” : executable, ini argumen setelah -o yang nantinya akan menjadi nama eksekutabel yang dihasilkan. Tanda “%e” adalah tanda yang hanya dimengerti oleh Geany.
- “%f” : file, nama berkas kode sumber.
- -lglut : library glut, opsi spesial g++ untuk menyertakan pustaka glut dari dalam sistem ke dalam linking ketika build. Tanpa ini, Anda tidak akan bisa melakukan include terhadap <GL/glut.h> di dalam kode sumber.
- -lGLEW : library GLEW, opsi spesial g++ untuk menyertakan pustaka GLEW yang dibutuhkan oleh glut. Lihat kembali penjelasan GLEW di awal tulisan.
- -lGLU : library GLU, opsi spesial g++ untuk menyertakan pustaka GLU yang dibutuhkan oleh glut. Lihat kembali penjelasan GLU di awal tulisan.
8. Contoh-Contoh Kode Program GLUT
Berikut bagian paling penting dari tulisan ini. Anda harus mencoba kode sumber-kode sumber contoh OpenGL supaya memahami pemrogramannya. Perhatikannya kemiripan di antara kode-kode berikut dan temukanlah kuncinya. Saya telah berusaha memberi komentar pada setiap baris kode sebagai penjelasan.
8.1 Garis Horizontal
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
|
|
8.2 Garis Vertikal
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
| //Program Garis Vertikal #include <GL/glut.h> //pemanggilan pustaka glut.h sekaligus gl.h milik OpenGL void display() //fungsi display() salah satu fungsi terpenting dalam program OpenGL { glClearColor( 0 .0f, 0 .1f, 0 .0f, 1 .0f); //glClearColor() berguna untuk membersihkan kanvas lalu mengatur warnanya (RED, GREEN, BLUE) glClear(GL_COLOR_BUFFER_BIT); // glBegin(GL_LINES); //glBegin() dan glEnd() fungsi yang dipakai untuk membuat objek geometri. glVertex2f( 100.0 , 0.0 ); //variabel GL_LINES menandakan objek yang dibuat adalah garis glVertex2f( 100.0 , 100.0 ); //X tetap Y berubah, maka garis menjadi vertikal glEnd(); //karena ada di antara glBegin() dan glEnd(), maka dua glVertex2f() akan membentuk satu garis glFlush(); //perintah render scene } int main( int argc, char **argv) //fungsi utama seluruh program C++ { glutInit(&argc, argv); //perintah inisialisasi program GLUT glutInitWindowPosition( 100 , 100 ); //penempatan jendela nantinya berdasarkan ukuran (PIKSELX, PIKSELY) glutInitWindowSize( 250 , 250 ); //penentuan ukuran jendela glutCreateWindow( "Assalamu'alaykum" ); //penentuan judul jendela gluOrtho2D( 0.0 , 640.0 , - 240 , 340.0 ); //penentuan sumbu X dan Y glutDisplayFunc(display); //glutDisplayFunc() adalah fungsi istimewa GLUT untuk memanggil fungsi yang akan menggambar seisi kanvas glutMainLoop(); //glutMainLoop() adalah fungsi untuk mengulang terus rendering dalam main() yang dilakukan } |
8.3 Titik
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
| //Program Titik #include <GL/glut.h> //pemanggilan pustaka glut.h sekaligus gl.h milik OpenGL void display() //fungsi display() salah satu fungsi terpenting dalam program OpenGL { glClearColor( 0 .0f, 0 .1f, 0 .0f, 1 .0f); //glClearColor() berguna untuk membersihkan kanvas lalu mengatur warnanya (RED, GREEN, BLUE) glClear(GL_COLOR_BUFFER_BIT); // glBegin(GL_POINTS); //glBegin() dan glEnd() fungsi yang dipakai untuk membuat objek geometri. glVertex2f( 100.0 , 0.0 ); //variabel GL_POINTS menandakan pembuatan titik untuk apa pun kode di antara glBegin() dan glEnd() glVertex2f( 100.0 , 100.0 ); //X tetap Y berubah, maka garis menjadi vertikal glEnd(); //karena ada di antara glBegin() dan glEnd(), maka dua glVertex2f() akan membentuk satu garis glFlush(); //perintah render scene } int main( int argc, char **argv) //fungsi utama seluruh program C++ { glutInit(&argc, argv); //perintah inisialisasi program GLUT glutInitWindowPosition( 100 , 100 ); //penempatan jendela nantinya berdasarkan ukuran (PIKSELX, PIKSELY) glutInitWindowSize( 250 , 250 ); //penentuan ukuran jendela glutCreateWindow( "Assalamu'alaykum" ); //penentuan judul jendela gluOrtho2D( 0.0 , 640.0 , - 240 , 340.0 ); //penentuan sumbu X dan Y glutDisplayFunc(display); //glutDisplayFunc() adalah fungsi istimewa GLUT untuk memanggil fungsi yang akan menggambar seisi kanvas glutMainLoop(); //glutMainLoop() adalah fungsi untuk mengulang terus rendering dalam main() yang dilakukan } |
8.4 Segitiga
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
| //Program Segitiga #include <GL/glut.h> //pemanggilan pustaka glut.h sekaligus gl.h milik OpenGL void display() //fungsi display() salah satu fungsi terpenting dalam program OpenGL { glClearColor( 0 .0f, 0 .1f, 0 .0f, 1 .0f); //glClearColor() berguna untuk membersihkan kanvas lalu mengatur warnanya (RED, GREEN, BLUE) glClear(GL_COLOR_BUFFER_BIT); // glBegin(GL_POLYGON); //glBegin() dan glEnd() fungsi yang dipakai untuk membuat objek geometri. glVertex2f( 100.0 , 10.0 ); //variabel GL_POINTS menandakan pembuatan poligon (bidang yang dibuat dari titik-titik yang terhubung oleh garis) glVertex2f( 100.0 , 100.0 ); //ada 3 vertex yang saling terhubung menjadi segitiga glVertex2f( 10.0 , 100.0 ); //vertex-vertex itu ada di dalam cakupan GL_POLYGON glEnd(); //karena ada di antara glBegin() dan glEnd(), maka 3 glVertex2f() akan membentuk satu segitiga glFlush(); //perintah render scene } int main( int argc, char **argv) //fungsi utama seluruh program C++ { glutInit(&argc, argv); //perintah inisialisasi program GLUT glutInitWindowPosition( 100 , 100 ); //penempatan jendela nantinya berdasarkan ukuran (PIKSELX, PIKSELY) glutInitWindowSize( 250 , 250 ); //penentuan ukuran jendela glutCreateWindow( "Assalamu'alaykum" ); //penentuan judul jendela gluOrtho2D( 0.0 , 640.0 , - 240 , 340.0 ); //penentuan sumbu X dan Y glutDisplayFunc(display); //glutDisplayFunc() adalah fungsi istimewa GLUT untuk memanggil fungsi yang akan menggambar seisi kanvas glutMainLoop(); //glutMainLoop() adalah fungsi untuk mengulang terus rendering dalam main() yang dilakukan } |
8.5 Segiempat
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
| //Program Segiempat #include <GL/glut.h> //pemanggilan pustaka glut.h sekaligus gl.h milik OpenGL void display() //fungsi display() salah satu fungsi terpenting dalam program OpenGL { glClearColor( 0 .0f, 0 .1f, 0 .0f, 1 .0f); //glClearColor() berguna untuk membersihkan kanvas lalu mengatur warnanya (RED, GREEN, BLUE) glClear(GL_COLOR_BUFFER_BIT); // glBegin(GL_POLYGON); //glBegin() dan glEnd() fungsi yang dipakai untuk membuat objek geometri. glVertex2f( 10.0 , 10.0 ); //variabel GL_POINTS menandakan pembuatan poligon (bidang yang dibuat dari titik-titik yang terhubung oleh garis) glVertex2f( 10.0 , 100.0 ); //ada 4 vertex yang saling terhubung menjadi segiempat glVertex2f( 100.0 , 100.0 ); //vertex-vertex itu ada di dalam cakupan GL_POLYGON glVertex2f( 100.0 , 10.0 ); // glEnd(); //karena ada di antara glBegin() dan glEnd(), maka 4 glVertex2f() akan membentuk satu segiempat glFlush(); //perintah render scene } int main( int argc, char **argv) //fungsi utama seluruh program C++ { glutInit(&argc, argv); //perintah inisialisasi program GLUT glutInitWindowPosition( 100 , 100 ); //penempatan jendela nantinya berdasarkan ukuran (PIKSELX, PIKSELY) glutInitWindowSize( 250 , 250 ); //penentuan ukuran jendela glutCreateWindow( "Assalamu'alaykum" ); //penentuan judul jendela gluOrtho2D( 0.0 , 640.0 , - 240 , 340.0 ); //penentuan sumbu X dan Y glutDisplayFunc(display); //glutDisplayFunc() adalah fungsi istimewa GLUT untuk memanggil fungsi yang akan menggambar seisi kanvas glutMainLoop(); //glutMainLoop() adalah fungsi untuk mengulang terus rendering dalam main() yang dilakukan } |
9. Membaca dan Memahami Dokumentasi Referensi API OpenGL
Seseorang bisa memrogram dengan baik jika dia mampu membaca dokumentasi referensi. Hal ini juga berlaku untuk pemrograman OpenGL. Anda perlu tahu bagaimana cara membaca lalu menerapkan referensi API dari OpenGL. Saya akan menunjukkan dulu cara baca dokumentasi tidak resmi baru kemudian yang resmi.9.1 Dokumentasi Tidak Resmi
Contoh yang sangat bagus yang saya temukan adalah satu laman dari universitas di Singapura. Alamatnya http://www3.ntu.edu.sg/home/ehchua/programming/opengl/CG_Introduction.html dan berikut ini saya sertakan skrinsot sebagian halamannya.Di dalam setiap dokumentasi referensi API, selalu ada bagian-bagian utama seperti spesifikasi fungsi-fungsi, daftar fitur (beragam jenis di setiap pustaka), dan jika Anda beruntung maka ada contoh-contoh. Di laman di atas, Anda akan memperoleh penjelasan fungsi-fungsi OpenGL.
Cara membaca referensi fungsi adalah perhatikan pada nama fungsi kemudian argumen-argumennya (isi dari kurung () milik fungsi). Misalnya, di dalam sebuah kode Anda menemukan glVertex3f. Anda tidak tahu apa fungsinya. Maka cari dan bacalah referensi fungsi glVertex3f di dalamnya. Bisa juga langsung membaca contoh-contoh implementasinya.
Biasanya, orang yang membuat program lebih fokus membaca referensi spesifikasi (tata cara penulisan) suatu fungsi. Dalam contoh di atas, glVertex3f disebutkan dengan argumen berjumlah 3 (1.1f, 2.2f, 3.3f). Artinya, saat menggunakan glVertex3f nanti, Anda harus mengisinya dengan 3 argumen yang bertipe float seperti tertera di spesifikasi. Begitulah cara membacanya.
9.1.1 Fungsi
Di atas ini adalah referensi spesifikasi fungsi. Referensi fungsi menjelaskan tata cara penulisan suatu fungsi. Yang perlu diperhatikan adalah tipe data dari fungsi sendiri, nama fungsinya, dan argumennya. Tipe data itu elemen sebelum nama fungsi (void, int, float, dll.), nama fungsi itu yang diawali dengan gl dan memiliki argumen, sedangkan argumen itu variabel-variabel yang mengisi kurung () suatu fungsi.
9.1.2 Fitur Penting (Geometric Primitives)
Referensi ini menjelaskan variabel yang bisa Anda gunakan untuk membuat objek geometri yang diinginkan. Jika ingin membuat garis, gunakanlah GL_LINES. Jika ingin membuat segitiga, gunakanlah GL_TRIANGLES. Dan seterusnya. Variabel ini bisa dipasangkan sebagai argumen pada glBegin() (tertera pada lanjutan skrinsot di atas.
9.1.3 Contoh
Jalan pintas belajar pemrograman adalah salin kode sumber contoh, kompilasikan, lihat hasilnya. Lakukan itu terus menerus maka Anda mampu membaca referensi dengan baik. Selebihnya, Anda akan mudah melakukan pemrograman nantinya.
9.2 Dokumentasi Resmi
Dokumentasi resmi dari setiap pustaka atau framework selalu tampak lengkap dan profesional. Tidak terkecuali OpenGL. Bukalah alamat http://www.opengl.org/sdk/docs/man4/ (jika Anda memakai OpenGL 4) lalu buka nama fungsi yang Anda ingin tahu spesifikasinya. Itulah cara membukanya. Lalu perhatikan apa saja yang ada di dalam 1 halaman referensi.Saya beri contoh pada gambar di atas pencarian spesifikasi glFlush. Mirip dengan manpages di Linux, Anda memperoleh laman yang menjelaskan arti dan cara penulisan fungsi glFlush. Biasanya, hal terpenting yang dicari programer adalah spesifikasi (tata cara penulisan) fungsinya. Baca lalu terapkan pada kode Anda. Untuk bisa membaca, tentu Anda harus banyak mencoba kode sumber-kode sumber contoh.
10. Kumpulan Referensi Lanjutan OpenGL dan GLUT
- Dokumentasi fungsi-fungsi FreeGLUT -> http://freeglut.sourceforge.net/docs/api.php
- Dokumentasi fungsi-fungsi OpenGL -> http://www.opengl.org/sdk/docs/
- Contoh-contoh kode GLUT (resmi) -> http://www.opengl.org/archives/resources/code/samples/glut_examples/examples/examples.html
- Contoh-contoh kode GLUT (tidak resmi) I -> http://openglsamples.sourceforge.net/
- Contoh-contoh kode GLUT (tidak resmi) II -> http://www.codecolony.de/opengl.htm
- Contoh-contoh kode GLUT (tidak resmi) III -> http://www.csse.monash.edu.au/~jonmc/CSE3313/Resources/SampleCode/
- Contoh-contoh kode GLUT (tidak resmi) IV -> http://people.sc.fsu.edu/~jburkardt/cpp_src/opengl/opengl.html
- Contoh-contoh kode GLUT (tidak resmi) V -> http://www.antongerdelan.net/opengl/ (bagus)
- Contoh-contoh kode GLUT (tidak resmi) VI -> http://cs.lmu.edu/~ray/notes/openglexamples/ (bagus)
- Kumpulan link tutorial OpenGL profesional -> https://www.opengl.org/wiki/Code_Resources
11. Referensi Tulisan Ini
- http://en.wikipedia.org/wiki/Opengl
- http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit
- http://en.wikipedia.org/wiki/OpenGL_Utility_Library
- http://www.opengl.org/sdk/docs/man2/
- http://glew.sourceforge.net/basic.html
- https://www.opengl.org/sdk/libs/GLEW/
- http://en.wikipedia.org/wiki/OpenGL_Extension_Wrangler_Library
- http://en.wikipedia.org/wiki/Freeglut
- http://stackoverflow.com/questions/17370/using-glew-to-use-opengl-extensions-under-windows
Sumber
0 komentar: