Anda di halaman 1dari 9

TUGAS AKHIR TEORI

GRAFIKA KOMPUTER
Disusun untuk Memenuhi Matakuliah Praktikum Grafika Komputer
Yang Dibimbing oleh Bapak Heru Wahyu Herwanto, S.T., M.Kom.

OLEH:
PUTRI RIZKY RAHMANIA
130533608286
S1 PTI 2013 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
April , 2015

TUGAS AKHIR TEORI


RUMAH 3D BESERTA LIGHTING
1. SCRIPT
#include <stdlib.h>
#include <glut.h>
//pendeklarasian variable global
int w = 400, h = 400;
int sudut=0, o=0, p=0, q=0;
int a, b;
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
GLfloat LightPosition[] = {10.0f, 20.0f, 30.0f, 0.0f};
LightPosition[0] = a;
LightPosition[1] = b;
glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
glRotatef(sudut, o, p, q); //fungsi rotasi sesuai yang dideklarasikan
glEnable(GL_COLOR_MATERIAL);
//dinding rumah
glPushMatrix(); //Fungsi untuk menyimpan nilai matrix
glEnable(GL_COLOR_MATERIAL);
glTranslatef(0, 0, -100); //fungsi translasi
glRotatef(50, 0, 1 ,0); //fungsi rotasi
glColor3f(0, 0, 1);
glutSolidCube(20); //fungsi pembuatan
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
//atap
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glTranslatef(0, 10, -100);
glScalef(20, 10, 20);
glRotatef(5, 0, 1, 0);
glColor3f(0, 1, 0);
glutSolidOctahedron();
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
//pintu
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 0, 0);
glTranslatef(-9,-5, -95);
glRotatef(140, 0, 1, 0);
glScalef(6,10,1);
glutSolidCube(1);
glPopMatrix();
//jendela
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0);
glTranslatef(-5,-3, -90);
glRotatef(130, 0, 1, 0);
glScalef(2,2,1);
glutSolidCube(1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();

glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0);
glTranslatef(-2,-3, -80);
glRotatef(130, 0, 1, 0);
glScalef(2,2,1);
glutSolidCube(1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0);
glTranslatef(-2,0, -80);
glRotatef(130, 0, 1, 0);
glScalef(2,2,1);
glutSolidCube(1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0);
glTranslatef(-5,0, -90);
glRotatef(130, 0, 1, 0);
glScalef(2,2,1);
glutSolidCube(1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
//pagar
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0, 1, 0);
glTranslatef(-30, -5, -110);
glRotatef(50, 0, 1, 0);
glScalef(25,5,1);
glutSolidCube(2);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0, 1, 0);
glTranslatef(10, -5, -110);
glRotatef(140, 0, 1, 0);
glScalef(30,5,1);
glutSolidCube(2);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0, 1, 0);
glTranslatef(25, -5, -82);
glRotatef(50, 0, 1, 0);
glScalef(20,5,1);
glutSolidCube(2);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0, 1, 0);
glTranslatef(-32, -5, -74);
glRotatef(140, 0, 1, 0);
glScalef(10,5,1);

glutSolidCube(2);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
//lantai
glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 1);
glTranslatef(0, -11, -100);
glRotatef(90, 1, 0, 0);
glScalef(50,50,1);
glutSolidCube(2);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix(); //fungsi untuk kembali ke koordinat sebelum dipush
glutSwapBuffers();
}
//fungsi untuk pengaturan window agar objek tetap pada posisi dan ukuran/perbandingannya ketika
window diperbesar atau diperkecil
void resize(int w1, int h1){
glViewport(0,0,400,400);
glMatrixMode(GL_PROJECTION); //fungsi mode proyeksi,mengatur penglihatan kubus
glLoadIdentity();
//sudut pandangan, aspek ratio, kedekatan Z, jauh Z
gluPerspective(60.0,(float) w1/(float) h1, 1.0,200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); //definisi objek
}
void mouse(int button, int state, int x, int y){ // interaksi mouse
a = x-(w/2);
b = (h/2)-y;
}
void motion (int x, int y){
a = x-(w/2);
b = (h/2)-y;
}
void myKeyboard(unsigned char key, int x, int y){ //fungsi interaksi keyboard
if (key == 'a') { //tombol A untuk perpindahan objek ke atas
o = 1;
p = 0;
q = 0;
sudut+=10;
}
else if (key == 'd'){ //tombol D untuk perpindahan objek kesamping
o = 0;
p = 1;
q = 0;
sudut+=10;
}
else if (key == 's'){ // untuk merotasi objek (memutar berlawanan arah jarum jam)
o = 0;
p = 0;
q = 1;
sudut+=10;
}
}
void timer(int value){
glutPostRedisplay();
glutTimerFunc(50,timer,0);
}

//Fungsi pencahayaan pada objek


void init(){
GLfloat LightAmbient[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat LightSpecular[] = {0.5f, 10.0f, 20.0f, 10.0f};
GLfloat Shine[] = {80};
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
//meng-enablekan pencahayaan OpenGL single
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glMaterialfv(GL_FRONT, GL_SPECULAR, LightSpecular);
glMaterialfv(GL_FRONT, GL_SHININESS, Shine);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
return;
}
void main (int argc, char **argv){ //Pemanggilan fungsi utama
glutInit(&argc, argv); //Pemanggilan fungsi utama OpenGL
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); //Fungsi warna jenis tampilan
glutInitWindowPosition(100,100); //Menetapkan posisi window
glutInitWindowSize(w,h); //Menetapkan ukuran windows
glutCreateWindow("TUGAS AKHIR GRAFKOM"); //Membuat window dan menentukan judulnya
init();
glutDisplayFunc(renderScene); //Memanggil fungsi untuk menampilkan objek
glutReshapeFunc(resize); //pemanggilan fungsi
glutMouseFunc(mouse); //Melakukan fungsi terhadap keyboard
glutMotionFunc(motion);
glutKeyboardFunc(myKeyboard);
glutTimerFunc(1,timer,0);
glutMainLoop();
}

2. TAMPILAN

3. PENJELASAN
Pada program di atas untuk membangun objek rumah 3D, dengan efek pencahayaan yang
diberikan. Terdapat beberapa pendeklarasian objek penyusun diantaranya : atap, dinding rumah,
pintu, lantai, pagar, dan jendela.
Objek rumah 3D diberikan fungsi rotasi disetiap bagiaan penyusunnya. Fungsi solid merupakan
implementasi dari object 3D yang berpusat pada asal pemodelan system koordinat. Utara dan
kutub selatan bola berada di Z positif dan negative sumbu-masing-masing dan meridian utama
persimpangan sumbu X positif.. Berikut diantaranya bentuk solid yang digunakan program di
atas :
voidglutSolidCube(GLdoublesize); (pembuatan dinding,pintu,lantai,pagar,jendela)
voidglutSolidDodecahedron(void); (pembuatan atap)
Interaksi yang diberikan pada program di atas yaitu interaksi mouse dengan memperlihatkan
efek pencahyaannya dengan klik satu kali /klik kiri serta menjalankan mouse ke penjuru
window maka akan terlihat pencahayaannya dengan pencahayaan sesuai sudut yang telah diatur
void mouse(int button, int state, int x, int y){ // interaksi mouse
a = x-(w/2);
b = (h/2)-y;}
void motion (int x, int y){
a = x-(w/2);
b = (h/2)-y;}

Interaksi keyboard juga diberikan yaitu tombol a untuk memindahkan objek ke atas. Tombol
d untuk memindahkan objek ke samping , dan tombol s untuk memutar objek berlawanan
dengan arah jarum jam dengan masing-masing sudut 10
Dalam program terdapat 3 fungsi pencahayaan yaitu :
GLfloat LightAmbient[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat LightSpecular[] = {0.5f, 10.0f, 20.0f, 10.0f};

Pencahayaan Ambient adalah cahaya yang sudah berserakan begitu banyak disebabkan oleh
lingkungan dan arahnya tidak mungkin ditentukan atau tampaknya datang dari segala penjuru.
Backlightingpada sebuah ruangan memiliki komponen ambient besar, karena sebagian besar
cahaya yang mencapai mata yang memantul dari banyak permukaan. Sebuah lampu sorot kecil
di luar rumah memiliki komponen ambient, sebagian besar cahaya dalam arah yang sama, dan
karena diluar, sangat sedikit cahaya mencapai mata setelah memantul dari benda-benda lain.
Ketika cahaya ambient menyerang permukaan, maka akan tersebar merata di segala penjuru.
Komponen cahaya diffuse adalah komponen yang berasal dari satu arah, jadi akan terang kalau
hal tersebut terjadi tepat diatas sebuah permukaan dibandingkan jika hampir tidak terjadi di atas
permukaan. Setelah mengenai permukaan, akan tersebar merata di segala penjuru, sehingga
tampak sama-sama terang, tak peduli di mana mata berada. Setiap cahaya yang datang dari posisi
atau arah tertentu mungkin memiliki komponen diffuse.
Cahaya specular datang dari arah tertentu, dan cenderung terpental pada permukaan dalam arah
yang diinginkan. sinar laser berkualitas tinggi memantul pada cermin dan menghasilkan hamper
100 persen refleksi specular. Logam atau plastik mengilap memiliki komponen specular tinggi,
dan kapur atau karpet telah hampir tidak ada. Specularity dapat juga dianggap sebagai shininess.

Meskipun sumber cahaya memberikan satu distribusi frekuensi, komponen ambient, diffuse, dan
specular mungkin berbeda. Sebagai contoh, jika memiliki cahaya putih di sebuah ruangan
dengan dinding merah, cahaya yang tersebar cenderung menjadi warna merah, meskipun cahaya
secara langsung objek putih yang mencolok. OpenGL memungkinkan untuk mengatur nilai
merah, hijau, dan biru untuk setiap komponen cahaya secara bebas.
p

Anda mungkin juga menyukai