4.1 Konsep 3 Dimensi
4.2.1 Pembuatan Objek
4.2.3.4 Segi Empat
Segi empat dibentuk minimal oleh 4 buah titik. Sintaks untuk membuat persegi empat pada OpenGL adalah
Contoh kotak yang dibuat dengan menggunakan OpenGL ditunjukkan pada gambar 4.17
Gambar 4.17 Segiempat dalam OpenGL Kode program dalam OpenGL dari gambar 2.16 adalah
glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1,0,0);glVertex3f(-1,1,0); glColor3f(0,1,0);glVertex3f(-1,0,0); glColor3f(0,0,1);glVertex3f(1,0,0); glVertex3f(1,1,0); glEnd; glFlush(); glBegin (GL_QUADS); glVertex3f(x1,y1,z1); glVertex3f(x2,y2,z2); glVertex3f(x3,y3,z3); glVertex3f(x4,y4,z4); glEnd();
4.2.3.5 Polygon
Polygon dapat dibentuk oleh lebih dari 4 buah titik. Sintaks untuk membuat poligon pada OpenGL adalah
Contoh Polygon yang dibuat dengan menggunakan OpenGL ditunjukkan pada gambar 2.18
Gambar 2.18 Polygon dalam OpenGL Kode program dalam OpenGL dari gambar 2.18 adalah
glcolor3f(0.1686,0.796,0.451); glbegin(gl_POLYGON); glvertex3f(-5,2,0); glvertex3f(1,4,0); glvertex3f(5,-2,0); glBegin (GL_POLYGON); glVertex3f(x1,y1,z1); glVertex3f(x2,y2,z2); glVertex3f(x3,y3,z3); glVertex3f(x4,y4,z4); glVertex3f(x5,y5,z5); glEnd();
glvertex3f(6,2,0); glend();
glFlush();
4.2.3.6 Kubus
Dalam OpenGL tidak ada perintah untuk membentuk kubus, sehingga untuk membuatnya diperlukan titik-titik penyusun segi empat. Karena kubus terdiri dari 6 bangun segi empat, maka untuk mmbentuk kubus kita perlu meletakkan 24 titik dimana masing-masing 4 titik akan membentuk bangun segi 4. Kubus yang dibuat dengan OpenGL digambarkan pada gambar 2.19
Gambar 2.19 Kubus yang dibuat dengan OpenGL Kode program dalam OpenGL dari program diatas adalah
glBegin(GL_QUADS); glcolor3f{hijau}(0,0.686,0.192); glVertex3f(-1.0, -1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); glcolor3f{kuning}(0.929,0.988,0.008); glVertex3f( 1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); glcolor3f{ungu}(0.2745,0.0039,0.2745); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f( 1.0, 1.0, -1.0); glVertex3f( 1.0, -1.0, -1.0); glcolor3f{biru tua}(0.0157,0.047,0.6627); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0); glVertex3f( 1.0, 1.0, -1.0);
glVertex3f(-1.0, -1.0, -1.0); glVertex3f( 1.0, -1.0, -1.0); glVertex3f( 1.0, -1.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glcolor3f{hijau}(0,0.686,0.192); glVertex3f( 1.0, -1.0, -1.0); glVertex3f( 1.0, 1.0, -1.0); glVertex3f( 1.0, 1.0, 1.0); glVertex3f( 1.0, -1.0, 1.0); glcolor3f{pink}(0.976,0.604,0.961); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, -1.0, 1.0); glcolor3f{kuning}(0.929,0.988,0.008); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); glEnd(); glFlush();
Dari kode program diatas dapat diketahui bahwa kubus disusun oleh 6 bangun persegi yang digunakan untuk menyusun kubus bagian depan, belakang, kanan, kiri, atas, dan bawah.
4.2.3.7 Tabung
Tabung dibuat dengan memanfaatkan library pada OpenGL yang bernama OpenGL Utility Library (GLU). Dengan GLU, tabung yang apabila dibuat dengan OpenGL tidak dapat langsung dibuat, melainkan harus ditentukan masing-masing titiknya, maka dengan GLU tabung dapat langsung dibuat. Sintaks untuk membuat tabung adalah
Untuk membuat objek tabung dengan menggunakan GLU, diperlukan variabel bantu yang bertipe PGLUQuadricObj untuk dideklarasikan sebagai prosedur
GLUNewQuadric. Prosedur ini berfungsi untuk memberi tanda bahwa terdapat suatu objek baru yang menggunakan GLU.
gluCylinder(qobj: PGLUquadric; jari-jari bawah, jari-jar atas ,tinggi: GLdouble; slices, stacks: GLint);
Contoh tabung ditunjukkan oleh gambar 2.20
Gambar 2.20 Tabung Kode program dengan OpenGL dari program di atas adalah
procedure display; cdecl; var quadratic: PGLUquadricObj; begin glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT ); quadratic := gluNewQuadric(); glrotatef(-90,1,0,0); glcolor3f{baby blue}(0.549,0.698,0.996); gluCylinder(quadratic,1,1,2,32,32); glFlush(); end;
Pada kode diatas diketahui bahwa variabel quadratic mendeklarasikan prosedure gluNewQuadric. Selanjutnya dilakukan transformasi rotasi sebesar -90 searah sumbu x agar posisi tabung sejajar dengan sumbu y. Objek yang dihasilkan jika digunakan GLU akan searah dengan sumbu z. Dari kode diatas juga diketahui bahwa jari-jari bawah tabung adalah 1, jari-jari atas tabung adalah 1, tinggi tabung adalah 2, slice dan stacknya sebesar 32.
4.2.3.8 Bola
Pembuatan bola pada OpenGL juga dibuat dengan menggunakan GLU. Sintaks untuk membuat bola adalah
Contoh bola yang dibuat dengan menggunakan OpenGL ditunjukkan dengan gambar 2.21
Gambar 2.21 Bola Kode program dari pembuatan objek bola adalah
procedure display; cdecl; var quadratic: PGLUquadricObj; begin glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT ); quadratic := gluNewQuadric(); glrotatef(-90,1,0,0); gluSphere(quadratic,1,32,32); glFlush(); end;
Kode program di atas mirip dengan pembuatan tabung pada subbab sebelumnya. Perbedaannya terletak pada perintah untuk membuat bola yaitu
gluSphere(quadratic,1,32,32) dimana parameter pertama menunjuk kepada prosedur gluNewQuadric, parameter kedua adalah jari-jari lingkaran, parameter ketiga adalah slice, dan parameter keempat adalah stack.
Pada layar komputer yang berwarna, hardware tertentu telah membuat setiap piksel padal layar terbagi menjai 3 warna yaitu merah, hijau dan biru yang bersatu dengan intensitas yang berbeda-beda (Neider, 1997). Inilah yang akhirnya disebut dengan warna RGB (red green blue). Pada OpenGL, setiap piksel menyimpan warna merah, hjau dan biru dengan intensitas yang berbeda. Nilai yang dikandung oleh masing-masing warna tersebut minimal 0 dan maksimal 1. Sintaks untuk menentukan warna pada suatu objek pad OpenGL adalah
Contoh pemberian warna pada objek segitiga ditunjukkan pada gambar 2.22
Gambar 2.22 Segitiga Berwarna Merah
Kode program pada pembuatan segitiga tersebut adalah
glBegin(GL_TRIANGLES); glColor3f(1,0,0); glVertex3f(-1,0,0); glVertex3f(0,1,0); glVertex3f(1,0,0); glEnd;
Pewarnaan objek pada OpenGL memungkinkan untuk dibuat berbeda pada setiap titiknya, hasilnya akan diperoleh warna gradasi halus. Contoh pemakaian warna di setiap titik pada bangun segitiga ditunjukkan pada gambar 2.23
Gambar 2.23 Segitiga Dengan Gradasi Warna
Kode program pada pembuatan segitiga dengan gradasi warna tersebut adalah
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);glVertex3f(-1,0,0); glColor3f(0,1,0);glVertex3f(0,1,0); glColor3f(0,0,1);glVertex3f(1,0,0); glEnd;
Dari kode diatas dapat dilihat warna yang berbeda pada tiap-tiap titik, namun seperti yang terlihat pada gambar 2.23, gabungan warna ini telah memberi warna gradasi baru yang lebih indah.
4.2.5 Transformasi
Menurut Neider(1997), transformasi pada OpenGL dibedakan menjadi 3, yaitu translasi, rotasi, dan penskalaan.
4.2.5.1 Translasi
Translasi adalah pemindahan suatu titik dari titik P=(x,y,z) ke posisi P=(x’,y’,z’) (Hearn, 1994) Pada OpenGL, translasi biasanya digunakan untuk
memindah pusat koordinat ke posisi yang baru. Sintaks untuk mentranslasikan objek pada OpenGL adalah
Contoh objek yang ditranslasikan pada OpenGL ditunjukkan dengan gambar 2.24
Gambar 2.24 Posisi Bola Sebelum dan Sesudah Ditranslasikan Kode program dalam OpenGL dari program di atas adalah
glbegin(gl_quads); glcolor3f(1,1,1); glvertex3f(-2,0,-2); glvertex3f(-2,0,2); glvertex3f(2,0,2); glvertex3f(2,0,-2); glend(); quadratic:=glunewquadric(); glusphere(quadratic,0.5,32,32); gltranslatef(1,0,1); glusphere(quadratic,0.5,32,32); glFlush();
Dari kode diatas diketahui bahwa posisi bola sebelum ditranslasikan berada pada koorinat (0,0,0). Kemudian posisinya ditranslasikan sepanjang sumbu x sebesar 1 satuan dan sepanjang sumbu z sebesar 1 satuan. Dengan adanya proses
pentranslasian tersebut, maka pusat koordinat yang baru berada pada koordinat (1,0,1).
4.2.5.2 Rotasi
Untuk merotasikan sebuah objek diperlukan sumbu rotasi (poros untuk merotasikan objek) (Donald Hearn, 1994). Sintaks untuk merotasikan objek pada OpenGL adalah
Bola sebelum di- translasi
Bola setelah di- translasi
Parameter pertama adalah nilai perputaran sudut. Parameter kedua , ketiga, dan keempat bernilai 1 apabila sumbunya dijadikan sumbu putar. Contoh perotasian objek ditunjukkan pada gambar 2.25
Listing program dari aplikasi diatas adalah
quadratic:=glunewquadric();
glucylinder(quadratic,0.25,0.25,1,32,32); gltranslatef(1,0,1);
glrotatef(-90,1,0,0);
glucylinder(quadratic,0.25,0.25,1,32,32);
Pada contoh diatas, diketahui bahwa posisi awal tabung sejajar dengan sumbu z. Namun, setelah dirotasi sebesar -90 dengan sumbu putar x, posisi tabung sejajar dengan sumbu y. Itu menunjukkan bahwa perotasian objek dengan sudut putar positif akan berputar berlawanan dengan arah jarum jam, begitu pula sebaliknya, jika sudut putar bernilai negatif, maka objek akan berputar searah dengan jarum jam.
4.2.5.3 Penskalaan
Transformasi skala adalah perubahan ukuran suatu objek (Sutopo, 2002). Sintaks untuk untuk melakukan proses penskalaan dalam OpenGL adalah
Gambar 2.25 Tabung Sebelum dan Sesudah Dirotasi
Tabung sesudah dirota-si sebesar -90 dengan sumbu putar x
Tabung sebelum dirotasi
Parameter pertama, kedua, dan ketiga masing-masing menunjukkan nilai skala dari ukuran objek. Apabila parameter tersebut bernilai 1, maka berarti ukuran objek tersebut tetap. Contoh penskalaan ditunjukkan oleh gambar 2.26
Gambar 2.26 Segitiga sebelum dan sesudah proses penskalaan Listing program dari aplikasi diatas adalah
gltranslatef(-1.5,0,0); glBegin(GL_TRIANGLES); glColor3f(1,0,0);glVertex3f(-1,0,0); glColor3f(0,1,0);glVertex3f(0,1,0); glColor3f(0,0,1);glVertex3f(1,0,0); glEnd; gltranslatef(2.5,0,0); glscalef(1.5,0.5,1); glBegin(GL_TRIANGLES); glColor3f(1,0,0);glVertex3f(-1,0,0); glColor3f(0,1,0);glVertex3f(0,1,0); glColor3f(0,0,1);glVertex3f(1,0,0); glEnd; glFlush(); 4.2.6 Proyeksi
Menurut Neide (1997), proyeksi pada OpenGL dibedakan menjadi 2 macam, yaitu proyeksi perspektif dan proyeksi orthogonal.
Segitiga setelah u- kuran x-nya ditam- bah dari ukuran aslinya, titik y diku-rangi dari ukuran asli, sedangkan titik z tetap
Ukuran Segitiga yang sebenar-nya
4.2.6.1 Proyeksi Perspektif
Proyeksi perspektif adalah pemindahan posisi objek menuju bidang pandang melalui garis yang berkumpul menjadi suatu titik yang disebut dengan projection
refrence point (pusat proyeksi). (Hearn, 1994). Proyeksi perspektif dalam OpenGL
memanfaatkan fasilitas proyeksi perspektif pada GLU. Sintaks untuk melakukan proyeksi perspektif adalah
Dalam penulisan perintah ini, perlu diperhatikan daerah pada objek yang akan dijadikan daerah pandang (Neider, 1997). Misalnya jika jarak mata pada monitor adalah 7,8” maka sudut pandang yang tepat adalah sebesar 90. Untuk lebih memperjelas pemahaman tenang parameter pada gluPerspective, kita lihat gambar 2.27 (Neider, 1997)
Gambar 2.27 Gambar perspektif untuk melihat objek
Parameter fovy adalah sudut daerah pandang yang jangkauan nilainya adalah 0 sampai 180 derajat. Parameter aspect adalah perbandingan yang merupakan hasil bagi lebar dan tinggi (width dan height). Parameter zNear dan zFar adalah jarak diatara titik pandang (viewpoint) dan daerah pandang (clipping planes) yang berada di
Contoh pada gambar 2.28 akan membandingkan objek kubus yang dilihat pada perspektif dengan sudut 45 dan 90.
(a) Proyeksi Perspektif (b) Proyeksi Perspektif
Kubus Dengan Sudut Pandang 45Kubus Dengan Sudut Pandang 90
Gambar 2.28 Perbandingan 2Sudut Pandang Pada Proyeksi Perspektif Listing program untuk proyeksi perspektif kubus dengan sudut pandang 45 adalah
procedure reshape(w,h:integer);cdecl; var ratio:real; begin if h=0 then h:=1; ratio:=1*(w/h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0,0,w,h); gluPerspective(45,ratio,1,1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(-2,2,6, 0,0,-1, 0,1,0); end;
Listing program untuk proyeksi perspektif kubus dengan sudut pandang 90 adalah
procedure reshape(w,h:integer);cdecl; var ratio:real; begin if h=0 then h:=1; ratio:=1*(w/h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0,0,w,h); gluPerspective(90,ratio,1,1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(-2,2,6, 0,0,-1, 0,1,0); end;