Anda di halaman 1dari 21

LAPORAN

GRAFIKA KOMPUTER

NURHIDAYAT DBC 113 055


JULPIYANUR DBC 113 064
REKKY RAMADHAN DBC 113 081
DONI APRIADI DBC 113 105
RIKI YULIANDI DBC 113 111
FAHMI AZHARI DBC 113 130

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKA RAYA
2015
BAB I
LANDASAN TEORI

1. OpenGL
OpenGL adalah kumpulan standard API (Application Programming Interface) yang
menghubungkan software dengan hardware grafis untuk menampilkan gambar 2D dan
3D. Intinya OpenGL itu adalah kumpulan library untuk mengakses hardware (GL=
graphical library). OpenGL mendefinisikan berbagai instruksi untuk menggambar objek,
image (umumnya 3D) dan melakukan berbagai operasi terhadap objek-objek tersebut.
OpenGL tidak mengandung source code, hanya spesifikasi saja. Pembuat GPU
(graphical processing unit) seperti NVIDIA, Intel, Samsung dll yang akan membuat
implementasi. Dengan cara ini walaupun GPU diproduksi oleh berbagai produsen
dengan berbagai berbagai variasi tipe dan implementasi, semuanya dapat diperintah
dengan spesifikasi yang sama.
OpenGL dirancang independen terhadap sistem operasi, hardware, maupun bahasa
pemrograman yang digunakan. Bahkan jika GPU tidak tersedia, openGL dapat
dijalankan diatas software yang mengemulasi hardware, tentu dengan kinerja yang lebih
rendah.
OpenGL dikembangkan mulai dari tahun 90-an dan saat ini telah menjadi standard
industri. OpenGL ada hampir disemua platform: Windows, Linux, Mac, smartphone,
game console, avionic dan berbagai embedded system. Dari sisi software, OpenGL
digunakan untuk berbagai macam hal mulai dari game, visualisasi, simulasi, CAD
(Computer-Aided Design) sampai editing video dan image.
Standard yang ada di OpenGL dikelola oleh konsorsium yang berisi berbagai pihak
yang berkepentingan dengan computer grafis. Konsorsium itu disebut Khronos yang
anggotanya antara lain: AMD, Intel, NVIDIA, Apple, ARM, Nokia, Qualcomm,
Samsung, Sony, Epic Games. Khronos juga mengelola standard lain seperti OpenCL,
OpenVG dan WebGL.
OpenGL adalah low level API, jadi saat kita menggambar suatu objek kita harus
mengirimkan terlebih dulu objek, texture, shaders dan lainnya. Ini membuat
programming dengan OpenGL bisa jadi hal yang rumit, tapi disisi lain jadi lebih
powerfull dan fleksibel. Bagi pemula hal ini bisa memusingkan karena terdapat banyak
variasi teknik yang dapat dilakukan untuk mencapai hasil yang sama. Umumnya
pengembang game tidak menggunakan openGL secara langsung, tetapi melalui game
engine seperti Unity.

2. C++
Sebelum C++ dikembangkan, sudah ada bahasa sejenis yang digunakan programmer
yaitu bahasa C (dikembangkan oleh Dennis Ritchie dari bahasa B), saat itu dia dari Bell
Laboratories sedang mengembangkan system operasi Unix. C ini merupakan bahasa
prosedural, kemudian dikembangkan hingga menjadi sebuah bahasa pemrograman C
yang berorientasi pada object (OOP – Object Oriented Programming) yang kemudian
disebut dengan C++ (dikembangkan oleh Bejarne Stroustrup tahun 1979).
Bahasa C merupakan bahasa pemrograman prosedural, di mana penyelesaian atas
suatu masalah dilakukan dengan membagi-bagi masalah tersebut ke dalam sub-sub
masalah yang lebih kecil. Sedangkan C++ merupakan bahasa pemrograman yang
memiliki sifat Object Oriented Programming (OOP). Untuk menyelesaikan masalah, C+
+ melakukan langkah pertama dengan mendefinisikan class-class yang merupakan a.-
class yang dibuat sebelumnya sebagai abstraksi dari objek-objek fisik. Class tersebut
berisi keadaan objek, anggota-anggotanya, dan kemampuan dari objeknya. Setelah
beberapa class dibuat, masalah dipecahkan menggunakan class.

3. OpenGL pada C++


Pemrograman C++ dengan pustaka OpenGL itu dilakukan untuk menghasilkan suatu
gambar di monitor secara manual. Subpustaka-subpustaka di dalam OpenGL seperti
GLUT, GLU, dan GLEW. Secara singkat, Anda akan menemukan fungsi-fungsi program
seperti berikut:
 glBegin()
 glEnd()
 glVertex2f()
 glClear()
Perintah di atas biasanya digunakan pada program-program C++ yang memanfaatkan
OpenGL. Sederhananya, Anda akan membuat gambar, animasi, atau game dengan
kendali 100% di tangan Anda karena menggunakan OpenGL. Jika Anda terbiasa
membuat gambar dengan GIMP atau Krita di Linux, maka secara kasar Anda akan
membuat gambar per pikselnya di pemrograman OpenGL. Namun keuntungan
menggunakan OpenGL adalah Anda tidak perlu menulis kode gambar per piksel karena
sudah dilakukan oleh fungsi-fungsi yang tersedia banyak di dalam OpenGL. Panggil
fungsi itu ke dalam kode C++ dan jadilah satu gambar. Itulah kegunaan pustaka OpenGL.
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()

4. 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.
Sedangkan di dalam GLUT, Anda akan temukan fungsi-fungsinya berawalan glut
seperti:
 glutMainLoop()
 glutDisplayFunc()
 glutInit()
 glutCreateWindow()
BAB II
PEMBAHASAN

Pembuatan Citra Lampion


Pembuatan gambar lampion pada c++ memerlukan sebuah library OpenGL package
untuk menampilkan graphic citra yang dibuat. Glut atau OpenGL adalah sekumpulan perintah
(syntax) rendering primitif, dan menjadi landasan bagi perintahperintah rendering dengan
level yang lebih tinggi. OpenGL juga harus menggunakan landasan mekanisme pembuatan
window sesuai dengan sistem yang digunakan.
Dengan menggunakan fungsi dari #include <GL/glut.h> #include <iostream>
#include <gl\GL.h> #include <gl\GLU.h> yang merupakan library dari openGL pada Bahasa
c++ agar dapat menjalan fungsi glutWireSphere(2,90,90); untuk menggambar bola yang
berada ditengah atau pada inti objek donat dengan fungsi dari WireSphere yang terdiri dari
nilai (radius, slices, stacks) di mana nilai yang dimasukan menentukan bentuk dari pola
objek bola yang akan dibuat. Kemudian diikuti dengan glutSolidSphere(2,90,90); yang
menjadikan warna dari bola yang dibuat menjadi full warna sesuai dengan nilai yang ada
pada fungsi glutWireSphere yakni nilai radius=2, slices=90 dan nilai stacks=90 agar
pemberian warna full sesuai dengan pola gambar bola yang dibuat.
Pada perintah glutWireTorus (4, 2, 90, 30); yang berfungsi untuk membuat sebuah pola dari
fungsi glut yang telah disediakan yakni WireTorus dengan nilai yang dapat diinputkan
meliputi INNER RADIUS, OUTTER RADIUS, SIDES DAN RINGS seperti pada perintah
yang diguanakan nilai yang diberikan agar membentuk sebuah donat adalah INNER
RADIUS = 4, OUTTER RADIUS = 2, SIDES = 90 DAN RINGS = 30 untuk perintah
glColor3f(1,0,0); merupakan sebuah fungsi yang digunakan untuk memberikan warna pada
sebuah pola pada fungsi glutWireTorus dengan pewarnaan (R,G,B) seperti pada perintah
yang digunakan nilai R=1, G=0 dan B=0 sehingga warna pada pola akan menjadi merah,
Koding pembuatan Objek :
glutWireSphere(2,90,90);//fungsi bola

glutSolidSphere(2,90,90);//Bola Penuh warna

glColor3f(1,0,0);//fungsi Warna(R,G,B) pada donat

glutWireTorus (4, 2, 90, 30);//fungsi donat


Menggerakan Gambar dengan Tombol
Zoom In dan Zoom Out :
Dengan menggunakan sebuah prosedur void Keyboard dengan parameter yang telah
disediakan dari prosedur ini dari library OpenGL yakni (GLubyte key, GLint x, GLint y).
Dimana isi dari prosedur ini adalah if (key == 'a' || key == 'A') z+=2; dimana setiap user
menekan tombol ‘a/A’ pada keyboard nilai z akan melakukan increment atau penambahan
nilai z pada objek sebanyak 2 atau pada tampilan akan melakukan proses zoom in. Sedangkan
if (key == 'd' || key == 'D') z-=2; merupakan fungsi untuk zoom out pada objek dengan
mengurangi (decrement) nilai z sebanyak 2 setiap user menekan tombol ‘d/D’.
Koding zoom in dan zoom out :

void Keyboard (GLubyte key, GLint x, GLint y) {

if (key == 'a' || key == 'A') z+=2;

if (key == 'd' || key == 'D') z-=2;


Zoom Out (Tombol D) :

Zoom In (Tombol A) :
Rotasi Citra :
Pada rotasi citra, menggunakan fungsi dari if (key == 'x' || key == 'X') { x1=1;
y1=0; z1=0; sudut +=10; yang berfungsi jika user menekan tombol ‘x/X’ maka proses
rotasi akan dilakukan dengan pemberian nilai x1=1, nilai y1=0, z1=0 dan pada nilai sudut
melakukan proses increment setiap tombol ‘x/X’ ditekan dengan nilai increment sebanyak 10,
sehingga Citra atau gambar berputar dengan titik sumbu x.
Koding Rotasi pada sumbu x :

if (key == 'x' || key == 'X') {


x1=1;
y1=0;
z1=0;
sudut +=10;
}

Untuk rotasi sesuai dengan sumbu y, menggunakan perintah if (key == 'y' || key ==
'Y') { x1=0; y1=1; z1=0; sudut +=-10; dimana setiap user menekan tombol ‘y/Y’ maka
proses rotasi akan dilakukan dengan nilai x1= 0, y1 diberikan nilai 1, z1 = 0 dan nilai sudut
akan melakukan increment sebanyak -10 (kebelakang).
Koding rotasi pada sumbu y :

if (key == 'y' || key == 'Y') {


x1=0;
y1=1;
z1=0;
sudut +=-10;
}

Untuk rotasi sesuai dengan sumbu z, menggunakan perintah if (key == 'z' || key ==
'Z') { x1=0; y1=z; z1=1; sudut +=-10; dimana setiap user menekan tombol ‘y/Y’ maka
proses rotasi akan dilakukan dengan nilai x1 = 0, y1 = 0 1, z1 diberikan nilai 1 dan nilai sudut
akan melakukan increment sebanyak -10 maka citra akan berputar pada poros.
Koding rotasi pada sumbu z :

if (key == 'z'|| key == 'Z') {


x1=0;
y1=0;
z1=1;
sudut +=-10;
}
Fungsi fullscreen menggunakan perintah if ( key == 'f'|| key == 'F') { glutFullScreen
();} dimana jika user menekan tombol ‘f/F’ pada keyboard maka fungsi dari library openGL
glutFullScreen (); maka tampilan window run dari program ini akan menjadi fullscreen.
Koding fullscreen :
if ( key == 'f'|| key == 'F') {
glutFullScreen ();
}
Main Program
Untuk main program menggunakan int main (int argc, char **argv) dimana isi dari
main program adalah memanggil mengembalikan semua prosedur – prosedur yang ada.
Sehingga saat program di run akan menjalankan semua prosedur yang dipanggil dalam main
program ini. glutInitWindowPosition (1,1); akan menampilkaan jendela tampilan hasil run
pada koordinat (1,1) atau letak menampilkan window pada pojok kiri atas. Kemudian
pemanggilan fungsi dari glutInitWindowSize (w,h); merupakan size (weight dan Height) atau
ukuran window saat program dijalankan di mana nilai w = 800 dan h = 600. Untuk fungsi
glutCreateWindow ("TUGAS GRAFKOM PERBAIKAN CITRA (ROTASI CITRA
DAN FULLSCREEN)") adalah memberikan judul pada window dengan isi judul “TUGAS
GRAFKOM PERBAIKAN CITRA (ROTASI CITRA DAN FULLSCREEN)”, kemudian
glutKeyboardFunc (Keyboard); untuk menjalankan fungsi dari input keyboard dari user.
Koding main program :

int main (int argc, char **argv) {


glutInit (&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition (1,1);
glutInitWindowSize (w,h);
glutCreateWindow ("TUGAS GRAFKOM PERBAIKAN CITRA (ROTASI CITRA DAN
FULLSCREEN)");
gluOrtho2D (-w/2,w/2,-h/2,h/2);
glutDisplayFunc (renderScene);
glutReshapeFunc (resize);
glutKeyboardFunc (Keyboard);
glutTimerFunc (1,timer,0);
glutMainLoop ();
}
Hasil Run program :
BAB III
KESIMPULAN

Dari pembahasan pokok diatas dapat ditarik kesimpulan bahwa Pemrograman C++
dengan Library OpenGL dilakukan untuk menghasilkan suatu gambar di monitor secara
manual. Secara lebih spesifik lagi OpenGL adalah kumpulan standard API (Application
Programming Interface) yang menghubungkan software dengan hardware grafis untuk
menampilkan gambar 2D dan 3D. Intinya OpenGL itu adalah kumpulan library untuk
mengakses hardware (GL= graphical library).
OpenGL dalam menghasilkan suatu gambar memerlukan beberapa directory
tambahan yaitu 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.
OpenGL juga merupakan suatu antarmuka antara software dengan hardware grafis.
Antarmuka ini memiliki ratusan function untuk menghasilkan citra obyek 3D dengan warna
yang berkualitas tinggi. Sifatnya yang independent menyebabkan OpenGL dapat digunakan
di hampir seluruh bahasa pemrograman yang tersedia. Dengan kata lain, OpenGL hanya
menyediakan function dan library yang diperlukan untuk menghasilkan citra, sedangkan
sintak program tergantung kepada bahasa pemrograman yang digunakan.
DAFTAR PUSTAKAN

http://arsipbertuah.blogspot.co.id/2015/01/tugas-transformasi-2d-dan-3d-opengl-c.html (di
akses pada 27 oktober 2015)
http://indonesiaberkicau.com/apa-itu-opengl/ (diakses pada 27 oktober 2015)
http://programgagal.blogspot.co.id/2013/02/sejarah-dan-pengertian-bahasa-c-dan-c.html
(diakses pada 27 otober 2015)
http://faqihshofyan.blogspot.co.id/2014/05/pengantar-pemrograman-opengl-di.html (diakses
pada 27 oktober 2015)
LAMPIRAN

Run Program :

Fungsi Zoom Out (Tombol d) :

Fungsi Zoom In (Tombol a) :


Fungsi Rotasi sumbu x (Tombol x) :
Fungsi Rotasi sumbu y (Tombol y) :

Fungsi Rotasi sumbu z (Tombol z) :


Fungsi FullScreen (Tombol F) :
Coding Program :
#include <GL/glut.h>
#include <iostream>
#include <gl\GL.h>
#include <gl\GLU.h>
#include <windows.h>

int w=800, h=600, z=0;


int x1=0, y1=0, z1=0, sudut=0;
void renderScene (void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor (0, 0, 0, 0);
glLoadIdentity ();
glTranslatef (0, 0, z);
glRotatef (sudut, x1, y1, z1);
glColor3f(1, 1, 0);

glutWireSphere(2,90,90);//fungsi bola
glutSolidSphere(2,90,90)
glColor3f(1,0,0);
glutWireTorus (4, 2, 90, 30);//fungsi donat

glutSwapBuffers ();
}
void resize (int w1, int h1) {
glViewport (0, 0, w1, h1);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective (45.0,(float) w1/(float) h1,1.0, 100.0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
}
void Keyboard (GLubyte key, GLint x, GLint y) {
if (key == 'a' || key == 'A') z+=2;
if (key == 'd' || key == 'D') z-=2;
if (key == 'x' || key == 'X') {
x1=1;
y1=0;
z1=0;
sudut +=10;
}
if (key == 'y' || key == 'Y') {
x1=0;
y1=1;
z1=0;
sudut +=-10;
}
if (key == 'z'|| key == 'Z') {
x1=0;
y1=0;
z1=1;
sudut +=-10;
}
if ( key == 'f'|| key == 'F') {
glutFullScreen ();
}
{
int foo;
foo = x + y;
if ('q' == key || 'Q' == key || 27 == key)
exit (0);
}
}
void timer (int value) {
glutPostRedisplay ();
glutTimerFunc (1,timer,0);
}
int main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition (100,100);
glutInitWindowSize (w,h);
glutCreateWindow ("TUGAS GRAFKOM(CITRA LINGKARAN)");
gluOrtho2D (-w/2,w/2,-h/2,h/2);
glutDisplayFunc (renderScene);
glutReshapeFunc (resize);
glutKeyboardFunc (Keyboard);
glutTimerFunc (1,timer,0);
glutMainLoop ();
}

Anda mungkin juga menyukai