Anda di halaman 1dari 19

LAPORAN PRAKTIKUM GRAFIKA KOMPUTER ModuL 9

Kelompok 3 :
Made Dwi Arya (208533414678) Andi Haris Rachmadini (208533414682) Krisma Magdalena Adi (208533414689) PTI OFF-C

UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PROGRAM STUDI S1 PENDIDIKAN TEKNIK INFORMATIKA APRIL 2011

MODUL 9 Lighting

A. KOMPETENSI DASAR
y Memahami Inisialisasi Lighting y Memahami Object 3D (Solid). y Memahami dasar menampilkan susunan objek 3D dengan Lighting. B. ALOKASI WAKTU 4 js (4x50 menit) C. PETUNJUK y y y y Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan. Pahami Tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar. Kerjakan tugas-tugas dengan baik, sabar, dan jujur. Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

D. DASAR TEORI
1. BentukSolid Fungsi Solid merupakan implementasi dari object 3D yang berpusat pada asal pemodelan sistem koordinat. Utara dan kutub selatan bola berada di Z positif dan negatif sumbu-masing-masing dan meridian utama persimpangan sumbu X positif. Berikut adalah list untuk bangun 3D: a. Kubus Solid
void glutSolidCube(GLdouble size);

b. Fungsi glutSolidSphere membuat bola berpusat pada asal pemodelan sistem koordinat. Utara dan kutub selatan bola berada di Z positif dan negatif sumbu-masing-masing dan meridian utama persimpangan sumbu X positif.
void glutSolidSphere(GLdouble radius,GLint slices, GLint stacks);

c. Kerucut Solid.
void glutSolidCone(GLdouble base, GLdouble height,GLint slices, GLint stacks);

d. Torus Solid.
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,GLint nsides, GLint rings);

e. Dodecahedron Solid

void glutSolidDodecahedron(void);

f. Tetra Hedron solid.


glutSolidTetrahedronvoid (void);

g. Oktahedron solid.
void glutSolidOctahedron(void);

h. Icosahedron solid.
void glutSolidIcosahedron(void);

i. Poci teh solid


void glutSolidTeapot(GLdouble size);

2. Lengkapi pada fungsi init seperti di bawah ini.

E. AKTIFITAS KELAS PRAKTIKUM 1. Buatlah tampilan sebuah solidSphere pada fungsi render. Tampilkan screen shot. 2. Ubahlah fungsi init menjadi sebagai berikut.

3. Tampilkan screenshot dan simpulkan penggunaan lighting ambient untuk apa.

4. Ubahlah bagian yang ditandai kotak menjadi

glMaterialfv(GL_FRONT, GL_DIFFUSE, LightDiffuse);

Sajikan Screenshot dan beri kesimpulan mengenai lighting diffuse. 5. Ubahlah bagian yang ditandai kotak menjadi

glMaterialfv(GL_FRONT, GL_SPECULAR, LightSpecular); glLightfv(GL_LIGHT1, GL_SHININESS, Shine);


Sajikan Screenshot dan beri kesimpulan mengenai lighting specular.

6. Buatlah sebuah program yang menampilkan semua benda solid secara mendatar di koordinat x, dengan warna yang bervariasi untuk tiap benda 3d tersebut. Sajikan screenshot dan program untuk render-nya. SCRIPT:
void cube (void) { glPushMatrix(); glTranslatef(-13,0,0); glutSolidCube(3); glPopMatrix(); glPushMatrix(); glTranslatef(-8,0,0); glutSolidSphere(2,50,25); glPopMatrix(); glPushMatrix(); glTranslatef(-3,0,4); glutSolidCone(1,10,50,100); glPopMatrix(); glPushMatrix();

glTranslatef(1,0,0); glutSolidTorus(1,2,15,100); glPopMatrix(); glPushMatrix(); glTranslatef(6,0,0); glutSolidDodecahedron(); glPopMatrix(); glPushMatrix(); glTranslatef(10,0,0); glutSolidTetrahedron(); glPopMatrix(); glPushMatrix(); glTranslatef(12,0,0); glutSolidOctahedron(); glPopMatrix(); glPushMatrix(); glTranslatef(15,0,0); glutSolidTeapot(1); glPopMatrix(); }

7. Ubah-ubahlah posisi lighting dan parameter lighting yang lain sehingga memberikan tampilan yang berbeda.
glMaterialfv(GL_FRONT, GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT0, GL_POSITION, LightPosition); glMaterialfv(GL_FRONT, GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT0, GL_POSITION, LightPosition); glMaterialfv(GL_FRONT, GL_SPECULAR, LightSpecular); glLightfv(GL_LIGHT1, GL_SHININESS, Shine);

8. Buatlah kesimpulan mengenai Lighting secara keseluruhan.

F. TUGAS ASISTENSI 1. Buatlah program yang menampilkan sebuah rumah dengan atap yang berbeda warna dengan temboknya dan dikelilingi oleh pagar.

#include<stdlib.h> #include<glut.h> int w = 640, h = 480; float j=0, a; void kotak(void) { glutSolidCube(5); } void pintu(void) { glBegin(GL_QUADS); glVertex2f(0,0); glVertex2f(0,10); glVertex2f(20,10); glVertex2f(20,0); glEnd(); } void reshape (int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (60,(GLfloat)w/(GLfloat)h, 1, 100); glMatrixMode(GL_MODELVIEW); } void init() { GLfloat GLfloat GLfloat GLfloat

LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f}; LightAmbient[] = {0.7f, 0.7f, 0.7f, 1.0f}; LightDiffuse[] = {0.7f, 1.0f, 0.7f, 1.0f}; LightSpecular[] = {0.6f, 1.0f, 0.5f, 0.0f};

GLfloat Shine[] = { 50 }; glShadeModel(GL_SMOOTH); glClearColor(0.0f,0.0f,0.0f,0.5f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glMaterialfv(GL_LIGHT0, GL_POSITION, LightPosition); glMaterialfv(GL_BACK_RIGHT, GL_AMBIENT_AND_DIFFUSE,LightDiffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, LightAmbient); //glEnable(GL_LIGHTING); //glEnable(GL_LIGHT0); return; } void mydisplay(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-10); glRotatef(a,0,j,0); glEnable(GL_COLOR_MATERIAL); glPushMatrix(); //genteng glPushMatrix(); glColor3f(1,0,0); glTranslatef(1.8,2.9,0); glRotatef(71,0,0,1); glScalef(0.1,0.8,1.3); kotak(); glPopMatrix(); glPushMatrix(); glTranslatef(-1.8,2.9,0); glRotatef(-71,0,0,1); glScalef(0.1,0.8,1.3); kotak(); glPopMatrix(); //tembok glPushMatrix(); glColor3f(1,1,1); glScalef(1,0.8,1.3); kotak(); glPopMatrix(); //pintu glPushMatrix(); glColor3f(1,1,0); glTranslatef(-0.5,0,3.3); glRotatef(-90,0,0,1); glScalef(0.1,0.1,0); pintu(); glPopMatrix(); //window glPushMatrix(); glColor3f(1,1,0); glTranslatef(-0.8,-0.8,3.3); glRotatef(90,0,0,1); glScalef(0.04,0.08,0); pintu(); glPopMatrix();

//pager glPushMatrix(); glColor3f(0,0,1); glTranslatef(-3.5,-1.5,0); //kiri glPushMatrix(); glScalef(0.07,0.2,1.6); kotak(); glPopMatrix(); glPushMatrix(); //kanan glTranslatef(7,0,0); glScalef(0.07,0.2,1.6); kotak(); glPopMatrix(); glPushMatrix(); //belakang glTranslatef(3.5,0,-4.15); glRotatef(90,0,1,0); glScalef(0.07,0.2,1.47); kotak(); glPopMatrix(); glTranslatef(1.25,0,4.15); //depan glRotatef(90,0,1,0); glScalef(0.07,0.2,0.57); kotak(); glTranslatef(0,0,7.9); kotak(); glPopMatrix(); glPopMatrix(); //a++; //j++; glDisable(GL_COLOR_MATERIAL); glutSwapBuffers(); } void update(int value) { glutPostRedisplay(); glutTimerFunc(50, update, 0); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow("KELOMPOK 10"); init(); glutDisplayFunc(mydisplay); glutReshapeFunc(reshape); glutTimerFunc(50, update, 0); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop(); }

2. Dari program nomor 1, ubahlah program sehingga posisi cahaya akan mengikuti posisi pointer mouse. Sajikan screenshot dari 3 posisi pointer yang berbeda.

#include<stdlib.h> #include<glut.h> int w = 640, h = 480; float j=0, a; void kotak(void) { glutSolidCube(5); } void pintu(void) { glBegin(GL_QUADS); glVertex2f(0,0); glVertex2f(0,10); glVertex2f(20,10); glVertex2f(20,0); glEnd(); } void reshape (int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (60,(GLfloat)w/(GLfloat)h, 1, 100); glMatrixMode(GL_MODELVIEW); } void init() { GLfloat GLfloat GLfloat GLfloat

LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f}; LightAmbient[] = {0.7f, 0.7f, 0.7f, 1.0f}; LightDiffuse[] = {0.7f, 1.0f, 0.7f, 1.0f}; LightSpecular[] = {0.6f, 1.0f, 0.5f, 0.0f};

GLfloat Shine[] = { 50 }; glShadeModel(GL_SMOOTH); glClearColor(0.0f,0.0f,0.0f,0.5f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glMaterialfv(GL_LIGHT0, GL_POSITION, LightPosition); glMaterialfv(GL_BACK_RIGHT, GL_AMBIENT_AND_DIFFUSE,LightDiffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, LightAmbient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); return; } void mydisplay(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-10); glRotatef(a,0,j,0); glEnable(GL_COLOR_MATERIAL); glPushMatrix(); //genteng glPushMatrix(); glColor3f(1,0,0); glTranslatef(1.8,2.9,0); glRotatef(71,0,0,1); glScalef(0.1,0.8,1.3); kotak(); glPopMatrix(); glPushMatrix(); glTranslatef(-1.8,2.9,0); glRotatef(-71,0,0,1); glScalef(0.1,0.8,1.3); kotak(); glPopMatrix(); //tembok glPushMatrix(); glColor3f(1,1,1); glScalef(1,0.8,1.3); kotak(); glPopMatrix(); //pintu glPushMatrix(); glColor3f(1,1,0); glTranslatef(-0.5,0,3.3); glRotatef(-90,0,0,1); glScalef(0.1,0.1,0); pintu(); glPopMatrix(); //window glPushMatrix(); glColor3f(1,1,0); glTranslatef(-0.8,-0.8,3.3); glRotatef(90,0,0,1); glScalef(0.04,0.08,0); pintu(); glPopMatrix(); //pager glPushMatrix(); glColor3f(0,0,1); glTranslatef(-3.5,-1.5,0); //kiri glPushMatrix(); glScalef(0.07,0.2,1.6); kotak();

glPopMatrix(); glPushMatrix(); //kanan glTranslatef(7,0,0); glScalef(0.07,0.2,1.6); kotak(); glPopMatrix(); glPushMatrix(); //belakang glTranslatef(3.5,0,-4.15); glRotatef(90,0,1,0); glScalef(0.07,0.2,1.47); kotak(); glPopMatrix(); glTranslatef(1.25,0,4.15); //depan glRotatef(90,0,1,0); glScalef(0.07,0.2,0.57); kotak(); glTranslatef(0,0,7.9); kotak(); glPopMatrix(); glPopMatrix(); //a++; //j++; glDisable(GL_COLOR_MATERIAL); glutSwapBuffers(); } void update(int value) { glutPostRedisplay(); glutTimerFunc(50, update, 0); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow("KELOMPOK 10"); init(); glutDisplayFunc(mydisplay); glutReshapeFunc(reshape); glutTimerFunc(50, update, 0); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop(); }

3. Lengkapi program di atas sehingga rumah dan sekitarnya dapat diputar untuk melihat sisi lain rumah dan sekitarnya. Sajikan screenshot dari 3 sudut pandang yang berbeda.

#include<stdlib.h> #include<glut.h> int w = 640, h = 480; float j=0, a; void kotak(void) { glutSolidCube(5); } void pintu(void) { glBegin(GL_QUADS); glVertex2f(0,0); glVertex2f(0,10); glVertex2f(20,10); glVertex2f(20,0); glEnd(); } void reshape (int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (60,(GLfloat)w/(GLfloat)h, 1, 100); glMatrixMode(GL_MODELVIEW); } void init() { GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};

GLfloat LightAmbient[] = {0.7f, 0.7f, 0.7f, 1.0f}; GLfloat LightDiffuse[] = {0.7f, 1.0f, 0.7f, 1.0f}; GLfloat LightSpecular[] = {0.6f, 1.0f, 0.5f, 0.0f}; GLfloat Shine[] = { 50 }; glShadeModel(GL_SMOOTH); glClearColor(0.0f,0.0f,0.0f,0.5f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glMaterialfv(GL_LIGHT0, GL_POSITION, LightPosition); glMaterialfv(GL_BACK_RIGHT, GL_AMBIENT_AND_DIFFUSE,LightDiffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, LightAmbient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); return; } void mydisplay(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-10); glRotatef(a,0,j,0); glEnable(GL_COLOR_MATERIAL); glPushMatrix(); //genteng glPushMatrix(); glColor3f(1,0,0); glTranslatef(1.8,2.5,0); glRotatef(71,0,0,1); glScalef(0.1,0.8,1.3); kotak(); glPopMatrix(); glPushMatrix(); glTranslatef(-1.8,2.5,0); glRotatef(-71,0,0,1); glScalef(0.1,0.8,1.3); kotak(); glPopMatrix(); //tembok glPushMatrix(); glColor3f(1,1,1); glScalef(1,0.8,1.3); kotak(); glPopMatrix(); //pintu glPushMatrix(); glColor3f(1,1,0); glTranslatef(-0.5,0,3.3); glRotatef(-90,0,0,1); glScalef(0.1,0.1,0); pintu(); glPopMatrix(); //window glPushMatrix(); glColor3f(1,1,0); glTranslatef(-0.8,-0.8,3.3); glRotatef(90,0,0,1);

glScalef(0.04,0.08,0); pintu(); glPopMatrix(); //pager glPushMatrix(); glColor3f(0,0,1); glTranslatef(-3.5,-1.5,0); //kiri glPushMatrix(); glScalef(0.07,0.2,1.6); kotak(); glPopMatrix(); glPushMatrix(); //kanan glTranslatef(7,0,0); glScalef(0.07,0.2,1.6); kotak(); glPopMatrix(); glPushMatrix(); //belakang glTranslatef(3.5,0,-4.15); glRotatef(90,0,1,0); glScalef(0.07,0.2,1.47); kotak(); glPopMatrix(); glTranslatef(1.25,0,4.15); //depan glRotatef(90,0,1,0); glScalef(0.07,0.2,0.57); kotak(); glTranslatef(0,0,7.9); kotak(); glPopMatrix(); glPopMatrix(); a++; j++; glDisable(GL_COLOR_MATERIAL); glutSwapBuffers(); } void update(int value) { glutPostRedisplay(); glutTimerFunc(50, update, 0); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow("KELOMPOK 10"); init(); glutDisplayFunc(mydisplay); glutReshapeFunc(reshape); glutTimerFunc(50, update, 0); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop(); }

4. Tuliskan program lengkapnya pada fungsi init dan render.

Anda mungkin juga menyukai