Anda di halaman 1dari 19

LAPORAN PRAKTIKUM VII

GRAFIKA KOMPUTER
LIGHTING DAN MATERIAL

Disusun untuk memenuhi Matakuliah Praktikum Grafika Komputer

Dibimbing oleh Ahmad Mursyidun Nidhom, S.Pd., M.Pd.

Disusun oleh :

Xaphyra Aura Shava Aulia 190533646844

S1 PTI ’19 OFF C

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
NOVEMBER 2020
MODUL 7
LIGHTING DAN MATERIAL
A. TUJUAN
 Memahami Inisialisasi Lighting dan Material
 Memahami Object 3D (Solid)

 Memahami dasar menampilkan susunan objek 3D dengan Lighting dan Material

B. TUGAS ASISTENSI
1. Buatlah program yang menampilkan sebuah rumah dengan atap yang berbeda warna
dengan temboknya dan dikelilingi oleh pagar.
Nama Program : Rumah 3D
Compiler : Microsoft Visual C++ 2008 Express Edition
Source Code :
#include <glut.h>

int w=800, h=640, z=-10;


int x1=0, y1=0, sudut=0, z1=0;
float skalaX=1, skalaY=1, skalaZ=1;
int cx, cy;

void mouse(int tombol, int state, int x, int y){


cx = x-(w/2);
cy = (h/2)-y;
}

void motion (int x, int y){


cx = x-(w/2);
cy = (h/2)-y;
}
void myKeyboard(unsigned char key, int x, int y){
if (key =='a') z+=5;
else if (key == 'd') z-=5;
else if (key == 'q') skalaX+=0.5;
else if (key == 'w') skalaX-=0.5;
else if (key == 'e') skalaY+=0.5;
else if (key == 'r') skalaY-=0.5;
else if (key == 't') skalaZ+=0.5;
else if (key == 'u') skalaZ-=0.5;
else if (key == 'x') {
x1=1;
y1=0;
z1=0;
sudut+=10;
}
else if (key == 'y') {
y1=1;
x1=0;
z1=0;
sudut+=-10;
}
}
else if (key == 'z') {
y1=0;
x1=0;
z1=1;
sudut+=-10;
}
}
void init(){
GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
GLfloat LightAmbient[] = {0.0f, 1.0f, 0.0f, 1.0f};
GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat LightSpecular[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat Shine[] = { 80 };

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_FRONT, GL_SPECULAR, LightSpecular);


glMaterialfv(GL_FRONT, GL_SHININESS, Shine);
//glEnable(GL_LIGHTING);
//glEnable(GL_LIGHT0);
return;
}
void pagar(){
glPushMatrix(); //pagar
glEnable(GL_COLOR_MATERIAL);
glTranslatef(3,-1,1);
glColor3f(2.0f, 0.5f, 1.0f);

glPushMatrix();
glColor3f(0.5f, 1.0f, 1.0f);
glTranslatef(-1,0.5,0);
glScalef(5.4,0.2,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glColor3f(2.0f, 0.5f, 1.0f);
glTranslatef(-1,-0.2,0);
glScalef(5.4,0.8,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glScalef(0.5,1.5,1);
glTranslatef(3,0,0);
glColor3f(0.0f, 0.5f, 0.5f);
glutSolidCube(1);
glPopMatrix();

glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
}
void renderScene(void){
GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
LightPosition[0] = cx;
LightPosition[1] = cy;
LightPosition[1] = cy;

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);


glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glScalef(skalaX, skalaY, skalaZ);

glPushMatrix(); //tembok
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0.8);
glRotatef(50,0,1,0);
glutSolidCube(3);
glDisable(GL_COLOR_MATERIAL);

glPushMatrix(); //pagar
glRotatef(-180, 0, 1, 0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix(); //pintu
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(-0.6,-1,1.46);
glScalef(7,10,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix(); //jendela
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.5,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.9,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.9,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.5,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPopMatrix();

glPushMatrix(); //atap
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.8,0,0);
glRotatef(5,0,1,0);
glTranslatef(0,1.5,0);
glScalef(3,1.3,3);
glutSolidOctahedron();
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
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,300.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void timer(int value){
glutPostRedisplay();
glutTimerFunc(50,timer,0);
}
void main (int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(w,h);
glutCreateWindow("Xaphyra Aura Shava : Rumah 3D");
gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(renderScene);
glutReshapeFunc(resize);
glutKeyboardFunc(myKeyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutTimerFunc(1,timer,0);
init();
glutMainLoop();
}
Output :

TAMPAK DEPAN

TAMPAK BELAKANG
Penjelasan :
Pada program ini menggunakan fungsi kubus solid dengan glutSolidCube (GLdouble
size); untuk membuat kerangka kubus yang sudah disediakan oleh glut. Dan juga
menggunakan fungsi glutSolidOctahedron(void); yang juga sudah disediakan oleh
glut. Kemudian memanggil fungsi renderScene ditambahkan fungsi posisi
pencahayaan dan juga rotasi yang menggunakan parameter. Dan fungsi init
memanggil fungsi pencahayaan dimana efek pencahayaan bersifat menyeluruh dan
menyebabkan semua obyek memiliki warna serupa. Agar warna tiap obyek 3d
berbeda dengan efek pencahayaan yang aktif. Fungsi di atas dapat diaktifkan setelah
glEnable(GL_COLOR_MATERIAL). Parameter face adalah variabel untuk
menentukan bagaimana material warna obyek 3D ditampilkan, pilihannya antara lain
GL_FRONT Sedangkan parameter mode adalah variabel untuk memilih material
warna jenis apa yang diaktifkan pilihannya pada fungsi init. Terdapat fungsi
myKeyboard digunakan untuk menangkap interaksi dari keyboard. Dan juga terdapat
fungsi mouse untuk menangkap interaksi pada mouse.
2. Dari program nomor 1, ubahlah program sehingga posisi cahaya akan mengikuti posisi
pointer mouse. Sajikan screenshot dari 3 posisi pointer yang berbeda.
Nama Program : Rumah 3D
Compiler : Microsoft Visual C++ 2008 Express Edition
Source Code :
#include <glut.h>

int w=800, h=640, z=-10;


int x1=0, y1=0, sudut=0, z1=0;
float skalaX=1, skalaY=1, skalaZ=1;
int cx, cy;

void mouse(int tombol, int state, int x, int y){


cx = x-(w/2);
cy = (h/2)-y;
}

void motion (int x, int y){


cx = x-(w/2);
cy = (h/2)-y;
}
void myKeyboard(unsigned char key, int x, int y){
if (key =='a') z+=5;
else if (key == 'd') z-=5;
else if (key == 'q') skalaX+=0.5;
else if (key == 'w') skalaX-=0.5;
else if (key == 'e') skalaY+=0.5;
else if (key == 'r') skalaY-=0.5;
else if (key == 't') skalaZ+=0.5;
else if (key == 'u') skalaZ-=0.5;
else if (key == 'x') {
x1=1;
y1=0;
z1=0;
sudut+=10;
}
else if (key == 'y') {
y1=1;
x1=0;
z1=0;
sudut+=-10;
}
else if (key == 'z') {
y1=0;
x1=0;
z1=1;
sudut+=-10;
}
}
void init(){
GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
GLfloat LightAmbient[] = {0.0f, 1.0f, 0.0f, 1.0f};
GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat LightSpecular[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat Shine[] = { 80 };
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_FRONT, GL_SPECULAR, LightSpecular);


glMaterialfv(GL_FRONT, GL_SHININESS, Shine);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
return;
}
void pagar(){
glPushMatrix(); //pagar
glEnable(GL_COLOR_MATERIAL);
glTranslatef(3,-1,1);
glColor3f(2.0f, 0.5f, 1.0f);

glPushMatrix();
glColor3f(0.5f, 1.0f, 1.0f);
glTranslatef(-1,0.5,0);
glScalef(5.4,0.2,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glColor3f(2.0f, 0.5f, 1.0f);
glTranslatef(-1,-0.2,0);
glScalef(5.4,0.8,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glScalef(0.5,1.5,1);
glTranslatef(3,0,0);
glColor3f(0.0f, 0.5f, 0.5f);
glutSolidCube(1);
glPopMatrix();

glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
}
void renderScene(void){
GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
LightPosition[0] = cx;
LightPosition[1] = cy;

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);


glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glScalef(skalaX, skalaY, skalaZ);

glPushMatrix(); //tembok
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0.8);
glRotatef(50,0,1,0);
glutSolidCube(3);
glDisable(GL_COLOR_MATERIAL);
glPushMatrix(); //pagar
glRotatef(-180, 0, 1, 0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix(); //pintu
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(-0.6,-1,1.46);
glScalef(7,10,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix(); //jendela
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.5,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.9,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.9,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.5,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPopMatrix();

glPushMatrix(); //atap
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.8,0,0);
glRotatef(5,0,1,0);
glTranslatef(0,1.5,0);
glScalef(3,1.3,3);
glutSolidOctahedron();
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
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,300.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void timer(int value){
glutPostRedisplay();
glutTimerFunc(50,timer,0);
}
void main (int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(w,h);
glutCreateWindow("Xaphyra Aura Shava : Rumah 3D");
gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(renderScene);
glutReshapeFunc(resize);
glutKeyboardFunc(myKeyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutTimerFunc(1,timer,0);
init();
glutMainLoop();
}
Output :
Penjelasan :
Pada program ini menggunakan fungsi kubus solid dengan glutSolidCube (GLdouble
size); untuk membuat kerangka kubus yang sudah disediakan oleh glut. Dan juga
menggunakan fungsi glutSolidOctahedron(void); yang juga sudah disediakan oleh
glut. Kemudian memanggil fungsi renderScene ditambahkan fungsi posisi
pencahayaan dan juga rotasi yang menggunakan parameter. Dan fungsi init
memanggil fungsi pencahayaan dimana efek pencahayaan bersifat menyeluruh dan
menyebabkan semua obyek memiliki warna serupa. Agar warna tiap obyek 3d
berbeda dengan efek pencahayaan yang aktif. Fungsi di atas dapat diaktifkan setelah
glEnable(GL_COLOR_MATERIAL). Parameter face adalah variabel untuk
menentukan bagaimana material warna obyek 3D ditampilkan, pilihannya antara lain
GL_FRONT Sedangkan parameter mode adalah variabel untuk memilih material
warna jenis apa yang diaktifkan pilihannya pada fungsi init. Untuk mengubah posisi
cahaya sehingga mengikuti posisi pointer mouse yaitu dengan
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); dan mengarahkan mouse pada
bidang, sehingga posisi cahaya berubah. Terdapat fungsi myKeyboard digunakan
untuk menangkap interaksi dari keyboard. Dan juga terdapat fungsi mouse untuk
menangkap interaksi pada mouse.
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. Tuliskan
program lengkapnya pada fungsi init dan render.
Nama Program : Rumah 3D
Compiler : Microsoft Visual C++ 2008 Express Edition
Source Code :
#include <glut.h>

int w=800, h=640, z=-10;


int x1=0, y1=0, sudut=0, z1=0;
float skalaX=1, skalaY=1, skalaZ=1;
int cx, cy;

void mouse(int tombol, int state, int x, int y){


cx = x-(w/2);
cy = (h/2)-y;
}

void motion (int x, int y){


cx = x-(w/2);
cy = (h/2)-y;
}
void myKeyboard(unsigned char key, int x, int y){
if (key =='a') z+=5;
else if (key == 'd') z-=5;
else if (key == 'q') skalaX+=0.5;
else if (key == 'w') skalaX-=0.5;
else if (key == 'e') skalaY+=0.5;
else if (key == 'r') skalaY-=0.5;
else if (key == 't') skalaZ+=0.5;
else if (key == 'u') skalaZ-=0.5;
else if (key == 'x') {
x1=1;
y1=0;
z1=0;
sudut+=10;
}
else if (key == 'y') {
y1=1;
x1=0;
z1=0;
sudut+=-10;
}
else if (key == 'z') {
y1=0;
x1=0;
z1=1;
sudut+=-10;
}
}
void init(){
GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
GLfloat LightAmbient[] = {0.0f, 1.0f, 0.0f, 1.0f};
GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat LightSpecular[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat Shine[] = { 80 };
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_FRONT, GL_SPECULAR, LightSpecular);


glMaterialfv(GL_FRONT, GL_SHININESS, Shine);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
return;
}
void pagar(){
glPushMatrix(); //pagar
glEnable(GL_COLOR_MATERIAL);
glTranslatef(3,-1,1);
glColor3f(2.0f, 0.5f, 1.0f);

glPushMatrix();
glColor3f(0.5f, 1.0f, 1.0f);
glTranslatef(-1,0.5,0);
glScalef(5.4,0.2,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glColor3f(2.0f, 0.5f, 1.0f);
glTranslatef(-1,-0.2,0);
glScalef(5.4,0.8,0.1);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glScalef(0.5,1.5,1);
glTranslatef(3,0,0);
glColor3f(0.0f, 0.5f, 0.5f);
glutSolidCube(1);
glPopMatrix();

glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
}
void renderScene(void){
GLfloat LightPosition[] = {10.0f, 10.0f, 20.0f, 0.0f};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
LightPosition[0] = cx;
LightPosition[1] = cy;

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);


glLoadIdentity();
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
glScalef(skalaX, skalaY, skalaZ);

glPushMatrix(); //tembok
glEnable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0.8);
glRotatef(50,0,1,0);
glutSolidCube(3);
glDisable(GL_COLOR_MATERIAL);

glPushMatrix(); //pagar
glRotatef(-180, 0, 1, 0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glTranslatef(-2,0,-3.5);
pagar();
glPopMatrix();

glPushMatrix();
glRotatef(-90,0,1,0);
glTranslatef(-2,0,1.5);
pagar();
glPopMatrix();

glPushMatrix(); //pintu
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(-0.6,-1,1.46);
glScalef(7,10,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix(); //jendela
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.5,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.9,0.1,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.9,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();

glPushMatrix();
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.0f, 0.5f, 1.0f);
glTranslatef(0.5,-0.3,1.46);
glScalef(3,3,1);
glutSolidCube(0.1);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glPopMatrix();

glPushMatrix(); //atap
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.8,0,0);
glRotatef(5,0,1,0);
glTranslatef(0,1.5,0);
glScalef(3,1.3,3);
glutSolidOctahedron();
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
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,300.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void timer(int value){
glutPostRedisplay();
glutTimerFunc(50,timer,0);
}
void main (int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(w,h);
glutCreateWindow("Xaphyra Aura Shava : Rumah 3D");
gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(renderScene);
glutReshapeFunc(resize);
glutKeyboardFunc(myKeyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutTimerFunc(1,timer,0);
init();
glutMainLoop();
}
Output :

Penjelasan :
Pada program ini menggunakan fungsi kubus solid dengan glutSolidCube (GLdouble
size); untuk membuat kerangka kubus yang sudah disediakan oleh glut. Dan juga
menggunakan fungsi glutSolidOctahedron(void); yang juga sudah disediakan oleh
glut. Kemudian memanggil fungsi renderScene ditambahkan fungsi posisi
pencahayaan dan juga rotasi yang menggunakan parameter. Dan fungsi init
memanggil fungsi pencahayaan dimana efek pencahayaan bersifat menyeluruh dan
menyebabkan semua obyek memiliki warna serupa. Agar warna tiap obyek 3d
berbeda dengan efek pencahayaan yang aktif. Fungsi di atas dapat diaktifkan setelah
glEnable(GL_COLOR_MATERIAL). Parameter face adalah variabel untuk
menentukan bagaimana material warna obyek 3D ditampilkan, pilihannya antara lain
GL_FRONT Sedangkan parameter mode adalah variabel untuk memilih material
warna jenis apa yang diaktifkan pilihannya pada fungsi init. Untuk mengubah posisi
cahaya sehingga mengikuti posisi pointer mouse yaitu dengan
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); dan mengarahkan mouse pada
bidang, sehingga posisi cahaya berubah. Terdapat fungsi myKeyboard digunakan
untuk menangkap interaksi dari keyboard. Dan juga terdapat fungsi mouse untuk
menangkap interaksi pada mouse.

C. DAFTAR PUSTAKA
Universitas Negeri Malang, 2016. “Modul 7 (Lighting dan Material)”. Malang: Jurusan
Teknik Elektro FT Universitas Negeri Malang

Anda mungkin juga menyukai