Wednesday, October 2, 2013

Dasar Menggambar Grafik Menggunakan OpenGL C++

  No comments


*Materi Grafika Komputer FTI UKSW 2013 
  Download glut-3.7.6-bin.zip disini
  Cara Install FreeGLUT         lihat


Pemanggilan fungsi glutInit, berguna untuk inisialisasi secara umum terhadap nilai-nilai yang ada pada library GLUT.










Untuk menginisialisasi modus display dilakukan dengan memanggil fungsi: glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) pada procedure myInit();
Fungsi tersebut meminta window yang bersifat double buffered, dengan warna RGB. Beberapa baris berikut ini adalah membuat window.






Seperti yang kita lihat, GLUT langsung membuat window tanpa memerlukan macam-macam syarat.

fungsi glOrtho digunakan untuk membuat kotak tempat obyek yang sedang digambar.

Berikut ini adalah fungsi-fungsi aplikasi yang kita buat :

                               glutDisplayFunc(display);
                               glutMainLoop();

Fungsi pertama digunakan untuk mengubah pandangan dengan menggunakan GLUT. Selanjutnya dipanggil fungsi glutMainLoop() , yaitu digunakan untuk menjalankan program. Semua fungsi sebelumnya akan berpengaruh setelah fungsi ini dieksekusi.


Fungsi aplikasi untuk menampilkan kotak di dalam window adalah sebagai berikut :

               void display(void)
               {
                               glClear(GL_COLOR_BUFFER_BIT);
                               glRectf(-5.0, 5.0, 5.0, -5.0);
                               glutSwapBuffers();
               }

Pertama-tama dipanggil fungsi glClear dengan parameter  GL_COLOR_BUFFER_BIT. Fungsi ini akan menghapus window dan memberi warna yang telah kita definisikan sebelumnya dengan menggunakan glClearColor.  Selanjutnya menggambar segiempat yang kita inginkan dengan menggunakan fungsi glRectf.


Suatu fungsi memiliki beberapa macam prototipe. Contohnya fungsi glColor, memiliki beberapa prototipe berikut ini :

glColor3f(float, float, float);
glColor4f(float, float, float, float);
glColor3d(double, double, double);
glColor3i(int, int, int);
etc, etc, etc.

Fungsi-fungsi tersebut memiliki bagian-bagian:

     gl            Color              3                   f

Walaupun ada fungsi yang memiliki beberapa macam versi, sebaiknya dipilih versi yang menggunakan bilangan float. Karena dalam OpenGL semua nilai yang digunakan secara internal akan dikembalikan dalam bentuk float point.


Titik, Garis, dan Poligon

OpenGL menggunakan sistem koordinat Cartesius, sumbu datar sebagai sumbu x, sumbu tegak sebagai sumbu y, dan sumbu z nya adalah mendekat atau menjauh. Sumbu z positif selalu menuju ke arah kita, sebaliknya sumbu z negatif selalu menjauh dari kita. Dengan menggunakan sistem ini kita dapat menyatakan titik dalam ruang tiga dimensi, yang disebut juga “vertex”, dengan tiga sumbu koordinat x, y, dan z. Sebagai contoh :

(0,0,0)     à pusat sistem koordinat
(2,0,4)     à dua unit ke kanan, 4 unit menuju kita, dan sumbu y pada pusat
(3,-4,-2) à 3 unit ke kanan, 4 unit ke bawah, dan 2 unit menjauh dari kita

Untuk menyatakan titik tersebut OpenGL menyediakan fungsi glVertex yang didahului dan diakhiri dengan glBegin dan glEnd:

               glBegin(GL_POINTS);           /* Ingin menggambar titik */           
               glVertex3f(2.0, 0.0, 4.0);        /* menyatakan sejumlah titik */
               glVertex3f(3.0, -4.0, -2.0);
               glEnd();                                  /* Akhir dari menggambar titik */

Fungsi glBegin memberitahu kepada OpenGL bahwa kita akan mulai menggambar sekaligus menyatakan apa yang akan digambar, yaitu dengan memberikan parameter GL_POINTS. Fungsi glEnd menyatakan pembuatan gambar diakhiri. Dengan menggunakan OpenGL, menggambar pada bidang 3D sangat fleksibel, misalnya akan menggambar suatu garis, maka pada glBegin diberi parameter GL_LINES. Dengan ini pasangan-pasangan glVertex akan membentuk garis. Bila glVertex tidak memiliki pasangan maka perintah tersebut diabaikan (tidak akan menggambar titik)  


               glBegin(GL_LINES);                        /* mulai menggambar garis */
               glVertex3f(6.0, 4.0, 2.0);                   /* garis pertama, pasangan glVertex */
               glVertex3f(2.0, -4.0, 3.3);
               glVertex3f(5.0, 8.0, 8.0);                   /* garis ke dua */
               glVertex3f(-4.7, 5.0, -3.0);
               glVertex3f(0.0, 0.0, 0.0);                   /* garis ke tiga */
               glVertex3f(6.0, -1.0, -7.0);
               glEnd();

Untuk menggambar suatu bangun, OpenGL memiliki 6 macam bangun primitif, yaitu :
GL_TRIANGLES: setiap 3 glVertex membentuk segitiga, dan tiap segitiga saling lepas.
GL_TRIANGLE_STRIP : setiap 3 glVertex membentuk segitiga, dan semua segitiga saling terkait
GL_TRIANGLE_FAN  : membentuk beberapa segitiga yang berpusat pada satu titik (seperti kipas)
GL_QUADS             : tiap 4 glVertex membentuk segi empat
GL_QUAD_STRIP    : tiap 4 glVertex membentuk segi empat, dan semuanya saling menempel
GL_POLYGON.        : n glVertex akan membentuk bidang bersisi n






Contoh di bawah ini adalah menggambar segitiga biasa.

               glBegin(GL_TRIANGLES);
              
               glVertex3f(-3.0, -3.0, 2.0);
               glVertex3f(3.0, -3.0, -1.0);
               glVertex3f(0.0, 3.0, 4.0);

               glEnd();

Contoh program di bawah ini adalah menggambar sebuah segiempat belahketupat. Perhatikan, pada setiap bidang warnanya diganti dengan menggunakan fungsi glColor yang nilai parameternya berbeda-beda. Yang terjadi adalah, pada pergantian warna terjadi gradasi secara halus mulai dari  warna awal menuju warna berikutnya.




Output Program



No comments :