You are on page 1of 38

# LAPORAN PRAKTIKUM 6

GRAFIKA KOMPUTER
OBJECTS 3 DIMENSI

Disusun Oleh:
RIZALINA NUR AFIFAH
160533611512
PTI Offering C

## UNIVERSITAS NEGERI MALANG

FAKULTAS TEKNIK
JURUSAN ELEKTRO
PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA
MARET 2018
TUGAS 1 (membuat kesimpulan dari masing-masing fungsi wire mulai dari glutWireCone,
glutWireCube, glutWireTorus, glutWireDodecahedron, glutWireTeapot,
glutWireOctahedron, glutWireTetrahedron, dan glutWireIcosahedron.)

A. GlutWireCone
SCRIPT
#include <stdlib.h>
#include <glut.h>

## int w = 480, h = 480, z = 0;

int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
//glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}

HASIL

## Tampilan setelah di running

Tampilan setelah obyek diperkecil dengan
keyboard “d”

## Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan

menggunakan keyboard “s” keyboard “y”

B. GlutWireCube
SCRIPT
#include <stdlib.h>
#include <glut.h>

## int w = 480, h = 480, z = 0;

int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
//glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}
void myKeyboard(unsigned char key, int m, int n) {
if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}
HASIL

keyboard “d”

## Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan

menggunakan keyboard “s” keyboard “y”

C. glutWireSphere
SCRIPT
#include <stdlib.h>
#include <glut.h>
int w = 480, h = 480, z = 0;
int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
//glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}

HASIL

## Tampilan setelah di running Tampilan setelah obyek diperkecil dengan

keyboard “d”
Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan
menggunakan keyboard “s” keyboard “y”

D. glutWireTorus
SCRIPT
#include <stdlib.h>
#include <glut.h>

## int w = 480, h = 480, z = 0;

int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
//glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}
HASIL

keyboard “d”

## Tampilan setelah obyek diputar

Tampilan setelah obyek diperbesar menggunakan keyboard “y”
menggunakan keyboard “s”

E. glutWireDodecahedron
SCRIPT
#include <stdlib.h>
#include <glut.h>
int w = 480, h = 480, z = 0;
int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
glutWireDodecahedron();
//glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}

HASIL

## Tampilan setelah di running Tampilan setelah obyek diperkecil dengan

keyboard “d”
Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan
menggunakan keyboard “s” keyboard “y”

F. glutWireTeapot
SCRIPT
#include <stdlib.h>
#include <glut.h>

## int w = 480, h = 480, z = 0;

int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}
HASIL

## Tampilan setelah di running

Tampilan setelah obyek diperkecil dengan
keyboard “d”

## Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan

menggunakan keyboard “s” keyboard “y”

G. glutWireOctahedron
SCRIPT
#include <stdlib.h>
#include <glut.h>
int w = 480, h = 480, z = 0;
int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
//glutWireTeapot(9);
glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}

HASIL

## Tampilan setelah di running Tampilan setelah obyek diperkecil dengan

keyboard “d”
Tampilan setelah obyek diperbesar
Tampilan setelah obyek diputar menggunakan
menggunakan keyboard “s”
keyboard “y”

H. glutWireTetrahedron
SCRIPT
#include <stdlib.h>
#include <glut.h>

## int w = 480, h = 480, z = 0;

int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
glutWireDodecahedron();
//glutWireTeapot(9);
glutWireOctahedron();
//glutWireTetrahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}
HASIL

keyboard “d”

## Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan

menggunakan keyboard “s” keyboard “y”

I. glutWireIcosahedron
SCRIPT
#include <stdlib.h>
#include <glut.h>
int w = 480, h = 480, z = 0;
int a = 0, b = 0, sdt = 0, c = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glTranslatef(0, 0, z);
glRotatef(sdt, a, b, c);
glColor3f(0, 0, 1.5);
//glutWireCone(6, 9, 30, 30);
//glutWireCube(5);
//glutWireSphere(7, 25, 15);
//glutWireTorus(6, 8, 25, 45);
//glutWireDodecahedron();
//glutWireTeapot(9);
//glutWireOctahedron();
//glutWireTetrahedron();
glutWireIcosahedron();
glutSwapBuffers();
}

## void myKeyboard(unsigned char key, int m, int n) {

if (key == 's') z += 10;
else if (key == 'd') z -= 10;
else if (key == 'y') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'm') {
a = 1;
b = 0;
c = 0;
sdt += 20;
}
else if (key == 'n') {
a = 0;
b = 0;
c = 1;
sdt += -20;
}
}
void resize(int w1, int h1) {
glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("ASISTENSI 1 RIZALINA");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}

HASIL

## Tampilan setelah di running Tampilan setelah obyek diperkecil dengan

keyboard “d”
Tampilan setelah obyek diperbesar Tampilan setelah obyek diputar menggunakan
menggunakan keyboard “s” keyboard “y”

ANALISIS
Program di atas merupakan suatu fungsi yang menggunakan fungsi glutWireCone,
glutWireCube,glutWireSphere, glutWireTorus, glutWireDodecahedron, glutWireTeapot,
glutWireOctahedron, glutWireTetrahedron, dan glutWireIcosahedron. Kemudian untuk
menjalankan suatu objek yang telah tersebut menggunakan fungsi myKryboard.
#include <stdlib.h>  digunakan untuk membersihkan layar, dimana header ini memiliki fungsi
yang sama dengan <windows.h>

#include <glut.h> digunakan unttuk membuat library atau grafik dari sebuah program.
Kemudian terdapat proses pendeklarasian variabel w=480, h 480, z=0 yang mana kesemua
variabel tersebut dideklarasikan menggunaka tipe data integer(tipe data yang digunakan untuk
menyatakan / menyimpan bilangan bulat). Dan juga terdapat pendeklarasian variabel a=0, b=0,
c=0, sdt=0, yang mana kesemua variabel tersebut juga dideklarasikan menggunakan tipe data
integer.
1. fungsi void renderScene(void) {  yang mana fungsi ini digunakan utnuk membuat
suatu obyek dan nantinya akan dipangil oleh glutDisplay (renderScene) untuk melksanakan
proses eksekusi. Kemudian pada fungsi ini juga terdapat suatu perintah yang digunakan
untuk mengatur warna background yaitu menggunakan suatu perintah glClearColor(1,
1, 1, 1); yang nantinya hasil background window yang akan keluar adalah berwarna
putih. Selain itu pada fungsi ini juga terdapat suatu perintah yang digunakan untuk
memindahkan suatu objek dengan menggunakan perintah glTranslatef(0, 0, z); dan
digunakan untuk memutar suatu objek tersebut menggunakan perintah glRotatef(sdt,
a, b, c);. Yang artinya titik pusat dari suatu obyek berada pada titik 0,0 dan juga pada
titik yang dideklarasikan oleh variabel z yaitu nol(0). Kemudian untuk proses perputaran
programini menggunakan fungsi MyKeyboard untuk meutar atau menjalankan suatu objek.
Sedangkan warna yang dipilih untuk obyek ini adalah warna biru, hall ini dikarenakan
perintah yang terdapat ada suatu program tersebut adalah glColor3f(0, 0, 1.5); yang
mana sesuai dengan konsepnya bahwa system pewarnaan ini menggunakan RGB, jadi jika
pada posisi ketiga yang bernilai 1,5 itu artinya warna biru yang akan muncul dan jika nilai
pada posisi tuga tersebut semakin tinggi maka warna biru yang dihasilkan akan semakin
gelap. Kemudain juga terdapat beberapa perintah yang digunakan untuk membuat suatu
obyek 3D, dimana perintah tersebut diantaranya :
 glutWireCone(6, 9, 30, 30); merupakan suatu perintah yang digunakan untuk
membuat obyek menyerupai kerucut tetapi bentuk gambarnya mirip dengan jarring-
jaring dan dalam bentuk 3Dimensi. Kemudian ukuran dari obyek ini adalah GLdouble
base=6, GLdouble height=9,GLint slices=30,GLint stacks=30, yang mana

##  glutWireCube(5);  merupakan suatu perintah yang digunakn untuk

menambahkan suatu obyek dengan bentuk, dimana ukuran panjang sisi pada oyek ini
adalah 5, dan akan menampilkan keluaran sebagai berikut:
 glutWireSphere(7, 25, 15);  merupakan suatu perintah yang digunakan untuk
membuat boa yang berpusat dalam pemodelan sisem koordinat, berbentuk seperti
jarring-jaring, dan berupa obyek 3D. kemudian untuk ukuranny adalah sebagai
berikut GLdouble radius=7,GLint slices=25, GLint stacks=15, dimana keluarannya

##  glutWireTorus(6, 8, 25, 45);  merupakan suatu perintah yang digunakan

untuk membuat suatu obyek dimana rander ditentukan melalui 12 sisi . Berpusat pada
rings=45, Dimana keluaranny adalah sebagai berikut:
 glutWireDodecahedron();  merupakan suatu perintah yang digunakan untuk
Berpusat di sekitar asal dan dengan radius sama dengan akar kuadrat dari 3, dimana
kelaran dari obyek ini adalah sebagai berikut:

##  glutWireTeapot(9);  merupakan suatu erintah yang digunakan untuk membuat

suatu obyek denggan bentuk teapot, kemudian untuk ukuran dari suatu obyek ini

##  glutWireOctahedron();  merupakan suatu [erintah yang dgunakan untuk

membuat obyek dengan renders padat atau wireframe 8-sisi biasa padat. Berpusat di
beirkut:
 glutWireTetrahedron();  merupakan suatu perintah yang digunakan untuk
Berpusat di sekitar asal dan dengan radius sama dengan akar kuadrat dari 3. Dimana

##  glutWireIcosahedron();  merupakan suatu perintah yang digunakan untuk

membuat suatu obyek dengan 20 buah sisi poligon yang berbentuk segitiga. Seluruh
segitiga yang ada merupakan segitiga yang kongruen. Dimana keluarannya daah
sebagai berikut:

## 2. fungsi void myKeyboard(unsigned char key, int m, int n) {  merupakan suatu

perintah yang digunakan untuk menjalankan suatu obyek baik memindahkan, memutar dll.
Dimana dalam fungsi ini terdapat suatu parameter yang didalamnya mendeklarasikan suatu
variabel m, n yang dideklarasikan menggunakan tipe data integer, dan mendeklarasikan
variabel key dengan menggunakan tipe data char, artinya data yang diinput dari keybiar
harus berupa kata. Kemudian pada fungsi ini juga terdapat suatu pengkondisian if else if
dimana pada pengkondisian yang pertama terdapat suatu kondisi if (key == 's') z +=
10; yang artinya jika keyboard ‘s’ yang dipilih maka akan menjalankan proses berupa
penambahan ukursn suatu obyek yang ditambah dengan 10, kemudian terdapat kondisi
yang kedua yaitu else if dmana pad akondisi ini dijelaskan jika memilih / menekan
keyboard ‘d’ maka akan menjalankan suatu perintah berupa mngecilkan suatu obyek
sebanyak 10. Kemudian juga terdapat pilihan else if yang lain yang mana untuk melakukan
pemutaran suatu obyek maka dapat menekan / memilih keyboard ‘y’, ‘m’, ‘n’ dimana
perputarannya akan berjalan sejauh 20.
3. void resize(int w1, int h1) {  Merupakan sebuah method yang dipergunakan
untuk mendefinisikan fungsi callback reshape. Callback Reshape berfungsi agar gambar
tetap berada pada proporsi yang tepat dengan kata lain apabila window / frame di drag ke
kanan, kiri, atas, atau bawah posisi gambar tidak mengalami perubahan. Sintaks yang
digunakan untuk membuat fungsi callback reshape adalah glviewport() untuk menetapkan
viewport. Untuk memanggil fungsi reshape,menggunakan fungsi
glutReshapeFunc(resize). Dimana pada program ini terdapat suatu parameter yang
mendeklarasikan w1, h1, yang mana nilai dari w1 adalah 45 dan w2 adalah 1, 250.
4. void init() {  merupakan suatu fungsi yang digunakan untuk menentukan warna
5. void timer(int value) {  merupakan suatu fungsi yang digunakan untuk mengontrol
pergerakan dari suatu obyek, yang mana waktu yang dibutuhkan dalam melakukan
pergerakana tersebut adalah 20 milidetik, selai itu fungsi ini digunakan untuk mengatur
kecepatan animasi objek pada program dengan mengatur time delay.

void main(int argc, char **argv) {  merupakan suatu fungsi utama yang
digunakan untuk mengeksekusi suatu program, dimana dalam melakukan
yaitu :
glutDisplayFunc(renderScene);  suatu fungsi yang digunakan untuk memanggil
method renderScene untuk dieksekusi.
glutKeyboardFunc(myKeyboard);  suatu perintah yang dgunakan untuk memanggil
suatu method untuk dieksekusi, dimana method / fungsi yang dipanggil adalah fungsi
MyKeyboard.
glutReshapeFunc(resize);  suatu perintah yang digunakan untuk memanggil
fungsi resize untuk dieksekusi.
init();  suatu perintah yang digunakan untuk memanggil fungsi init untuk
melakukan eksekusi.
glutTimerFunc(1, timer, 0);  merupakan suatu perintah yang digunakan untuk
memanggil fungsi timer yang kemudian akan dieksekusi.
Kemudian pada fungsi ini juga terdapat perintah-perintah lain, yaitu perintah yang
digunakan untuk mengatur pososo window, perintah untuk menentukan ukuran window,
dan juga perintah yang digunakan untuk mengatur nama window.
TUGAS 3 (Membuat Manusia Salju 3 dimensi (menggunakan wire).
Script
#include <stdlib.h>
#include <glut.h>

## int w = 480, h = 480, z = 0;

int a = 0, b = 0, sudut = 0, c = 0;
int skala_x = 0, skala_y = 0;

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(0, 0, z);
glRotatef(sudut, a, b, c);
//membuat topi
glPushMatrix();
glTranslatef(0, 5, 0);
glRotatef(-90, 1, 0, 0);
glColor3f(0, 0, 1);
glutWireCone(2, 4, 200, 50);
glPopMatrix();
//membuat kepala atas
glPushMatrix();
glTranslatef(0, -5, 0);
glColor3f(1, 1, 1);
glutWireSphere(4, 200, 50);
glPopMatrix();
//membuat mata kanan
glPushMatrix();
glTranslatef(1, 4.5, 2);
glColor3f(0, 0, 0);
glutWireSphere(0.1, 200, 50);
glPopMatrix();
//membuat mata kiri
glPushMatrix();
glTranslatef(-1, 4.5, 2);
glColor3f(0, 0, 0);
glutWireSphere(0.1, 200, 50);
glPopMatrix();
//membuat hidung
glPushMatrix();
glTranslatef(0, 4, 0);
glColor3f(1, 0, 0);
glutWireCone(1, 3, 200, 50);
glPopMatrix();
glPushMatrix();
glTranslatef(0, 0, 0);
glColor3f(1, 1, 1);
glutWireSphere(3, 200, 50);
glPopMatrix();
glPushMatrix();
glTranslatef(0, 4, 0);
glColor3f(1, 1, 1);
glutWireSphere(2, 200, 50);
glPopMatrix();

glutSwapBuffers();
}
void myKeyboard(unsigned char keyboard, int p, int q) {
if (keyboard == 'l') z += 10;
else if (keyboard == 'k') z -= 10;
else if (keyboard == 'y') {
a = 5;
b = 0;
c = 0;
sudut += 20;
}
else if (keyboard == 'x') {
a = 5;
b = 10;
c = 15;
sudut += -20;
}
else if (keyboard == 'z') {
a = 5;
b = 2;
c = 0;
sudut += -20;
}
}
void mySpecialKeyboard(int key, int x, int y) {
switch (key) {
case GLUT_KEY_UP:
z += 15;
break;
case GLUT_KEY_DOWN:
z -= 15;
break;
}
}

## void resize(int w1, int h1) {

glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
gluPerspective(50.0, (float)w1 / (float)h1, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void init() {
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(50.0, (GLdouble)w / (GLdouble)h, 1.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
void timer(int value) {
glutPostRedisplay();
glutTimerFunc(20, 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("BONEKA SALJU");
gluOrtho2D(-w / 4, w / 4, -h / 4, h / 4);
glutDisplayFunc(renderScene);
glutKeyboardFunc(myKeyboard);
glutSpecialFunc(mySpecialKeyboard);
glutReshapeFunc(resize);
init();
glutTimerFunc(1, timer, 0);
glutMainLoop();
}

Hasil

## Tampilan utama setelah di running Tampilan ketika obyek diperkecil dengan

memilih keyboard ‘k’
Tampilan ketika obyek diperbesar dengan Tampilan ketika menekan / memilih keyboard
memilih keyboard ‘l’ ‘y’

## Tampilan ketika memilih/menekan keyboard Tampilan ketika memilih / menekan keyboard

‘x’ ‘z’

Penjelasan
Pada praktikum ini merupakan suatu penerapan obyek 3D untuk membuat sebuah boneka salju.
Dimana dalam pembuatan boneka ini menggunakan header file yang sama dengan tugas
sebelumnya (tugas asistensi 1) yaitu menggunakan #include <stdlib.h> dan #include <glut.h>.
kemudian dalam pembuatan obyek ini menggunakan 6 method yaitu renderScene, myKeyboard,
resize, init, timer, dan menggunakan fungsi utama main.
Dimana untuk pendeklarasian obyek boneka salju dideklarasikan menggunakan fungsi
renderScene. Yang mana dalam obyek tersebut terdapat beberapa perintah yang harus digunakan
yaitu membuat topi, 2 mata, hidung, kepala, badan bagian atas, dan badan bagian bawh. Kemudian
untuk membuat topi ini menggunakan perintah glutWireCone(2, 4, 200, 50); dimana perintah ini
digunakan untuk membuat obyek dalam bentuk kerucut. Kemudian untuk membuat 2 mata
menggunakan perintah glutWireSphere tetapi terdapat perbedaan antara penggunaan koorditas
antara mata kanan dan mata kiri, untuk mata kanan menggunakan perpindahan ke arah negative
yaitu menggunakan perintah glTranslatef(-1, 4.5, 2); sedangkan untuk mata kanan menggunakan
perintah (perpindahan kearah positif) yaitu menggunakan perintah glTranslatef(1, 4.5, 2);. Dalam
pembuatan hidung menggunakan perintah yang sama dengan membuat topi yaitu membuat suatu
obyek yang menyerupai kerucut dengan menggunakan perintah glutWireCone(1, 3, 200, 50);,
perintah glutWireSphere hanya saja pada badan bagian atas memiliki titik koordinat x lebih tinggi
atau patokan untuk perpindahan badan bagian bawah, hal ini dikarenakan badan baagian atas
dijadika sebagai titik pusat dari obyek tersebut. Untuk pemilihan warna kepala, badan bagian atas,
badan bagian bawah memiliki warna yang sama yaitu dengan mengggunakan perintah
glColor3f(1, 1, 1);, sedangkan untuk warna topi menggunakan warna biru dengan perintahnya
yaitu glColor3f(0, 0, 1); dan untuk kedua mata menggunakan warna hitam dengan perintahnya
adalah glColor3f(0, 0, 0); dan untuk hidung menggunakan warna merah dengan perintahnya adalah
glColor3f(1, 0, 0);. Proses pewarnaan ini sudah sesuai dengan konsep pewarnaan dasar yang
digunakan pada suatu program yaitu menggunakan konsep dasar RGB(Red, Green, Blue). Jadi
jika pada R itu nilainya 1 maka warna yang akan muncul adalah warna merah, emudian jika warna
yang ada pada B itu bernilai 1 adalah warna biu, tetapi jika ketuga bagian tersebut bernilai 0 maka
obyek akan berwarna hitam, dan jika ketiga bagian tersebut bernilai 1 maka obyek akan berwarna
putih.
Kemudian terdapat fungsi myKeyboard , dimana fungsi ini digunakan untuk menjalankan
/pergerakan suatu obyek yang terdapat pada window. Dimana pergerakan suatu obyek ini diatur
menggunakan fungsi myKeyboard. Dimana pada fungsi myKeyboard terdapat suatu
pengkondisian yang mana suatu obyek akan membesar sebesar +10 jika ditekan ‘l’ pada keyboard,
kemudian terdapat suatu pengkondisian else if yang mana suatu obyek akan mengecil sebesar -10
jika ditekan keyboard ‘k’, suatu obyek dapat berputar dengan titik pusat a=5, b=10, c=15 dengan
sudutnya 20 jika ditekan keyboard x, dan terdapat pilihan yang terakhir jika ingin memutar suaty
obyek dengan titik a=5, b=10, c=15, sudutnya =20 maka dapat memilih tombol ‘z’ pada keyboard
void resize(int w1, int h1) {  Merupakan sebuah method yang dipergunakan untuk
mendefinisikan fungsi callback reshape. Callback Reshape berfungsi agar gambar tetap
berada pada proporsi yang tepat dengan kata lain apabila window / frame di drag ke kanan, kiri,
atas, atau bawah posisi gambar tidak mengalami perubahan. Sintaks yang digunakan untuk
membuat fungsi callback reshape adalah glviewport() untuk menetapkan viewport. Untuk
memanggil fungsi reshape,menggunakan fungsi glutReshapeFunc(resize). Dimana pada program
ini terdapat suatu parameter yang mendeklarasikan w1, h1, yang mana nilai dari w1 adalah 50 dan
void init() {  merupakan suatu fungsi yang digunakan untuk menentukan warna background,
void timer(int value) {  merupakan suatu fungsi yang digunakan untuk mengontrol
pergerakan dari suatu obyek, yang mana waktu yang dibutuhkan dalam melakukan pergerakana
tersebut adalah 20 milidetik, selai itu fungsi ini digunakan untuk mengatur kecepatan animasi
objek pada program dengan mengatur time delay.
void main(int argc, char **argv) {  merupakan suatu fungsi utama yang digunakan
untuk mengeksekusi suatu program, dimana dalam melakukan pengeksekusian ini harus
glutDisplayFunc(renderScene);  suatu fungsi yang digunakan untuk memanggil method
renderScene untuk dieksekusi.
glutKeyboardFunc(myKeyboard);  suatu perintah yang dgunakan untuk memanggil suatu
method untuk dieksekusi, dimana method / fungsi yang dipanggil adalah fungsi MyKeyboard.
glutReshapeFunc(resize);  suatu perintah yang digunakan untuk memanggil fungsi resize
untuk dieksekusi.
init();  suatu perintah yang digunakan untuk memanggil fungsi init untuk melakukan
eksekusi.
glutTimerFunc(1, timer, 0);  merupakan suatu perintah yang digunakan untuk memanggil
fungsi timer yang kemudian akan dieksekusi.
Kemudian pada fungsi ini juga terdapat perintah-perintah lain, yaitu perintah yang digunakan
untuk mengatur pososo window, perintah untuk menentukan ukuran window, dan juga perintah
yang digunakan untuk mengatur nama window.
DAFTAR RUJUKAN
_____. 2010. Basic Of Open GL 3D Peoject Tutorial. (Online),
https://vicknite.wordpress.com/2010/05/25/basic-of-opengl-3d-project-tutorial/, diakses