• Tidak ada hasil yang ditemukan

LAPORAN GRAFIKA KOMPUTER OBJEK 3D

N/A
N/A
Protected

Academic year: 2017

Membagikan "LAPORAN GRAFIKA KOMPUTER OBJEK 3D"

Copied!
24
0
0

Teks penuh

(1)

LAPORAN MODUL V

PRAKTIKUM GRAFIKA KOMPUTER

OBJEK 3D

Disusun untuk Memenuhi Matakuliah Praktikum Grafika Komputer

Yang Dibimbing oleh Bapak Heru Wahyu Herwanto

Disusun Oleh :

Ananda Putri Syaviri

130533608243

PTI Off B 2013

UNIVERSITAS NEGERI MALANG

FAKULTAS TEKNIK

JURUSAN TEKNIK ELEKTRO

PRODI PENDIDIKAN TEKNIK INFORMATIKA

APRIL 2015

(2)

“Object 3D”

A. Kompetensi Dasar

Memahami Inisialisasi dunia 3D.

Memahami Object 3D (Wired).

Memahami dasar menampilkan susunan objek 3D.

B. Latihan

1.

Buatlah sebuah fungsi yang dapat membuat persegi. tampilkan objek persegi tersebut

pada layar dan berikan interaksi menggunakan keyboard untuk memindahkan posisi

objek pada KOORDINAT Z (panah bawah untuk mendekat dan panah atas

untukmenjauh). Tampilkan 2 screen shot kondisi ketika objek 2D jauh dan dekat. Dan

tampilkan programnya (display function). Beri keterangan.

Sintaks:

#include<stdlib.h>

#include<glut.h>

float x=0, y=0, z=-10; int w = 500, h = 500;

void drawQuad(int a, int b){ glColor3f(0,0,1); glBegin(GL_QUADS);

glVertex2d(3, -3); glVertex2d(-3, -3); glVertex2d(-3, 3); glVertex2d(3, 3); glEnd();

}

void update(int value){ glutPostRedisplay();

glutTimerFunc(50, update, 0); }

void render(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0,0,0,0);

glLoadIdentity(); glTranslatef(x,y,z); drawQuad(1,1); glutSwapBuffers(); }

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h); glLoadIdentity();

gluPerspective (45, (GLfloat)w / (GLfloat)h, 1.0, 300.0); glMatrixMode (GL_MODELVIEW);

}

void init() {

glClearColor (0.0f, 0.0f, 0.0f, 0.5f); glEnable (GL_DEPTH_TEST); glMatrixMode (GL_PROJECTION); glDepthFunc (GL_LEQUAL);

(3)

}

void mySpecialKeyboard(int key, int x, int y){ switch(key){

case GLUT_KEY_UP: z+=1; break;

case GLUT_KEY_DOWN: z-=1;

break; }

}

void main(int argc, char **argv) { glutInit(&argc, argv);

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100);

glutInitWindowSize(w,h);

glutCreateWindow("OBJEK 3D SYAVIRI"); glutTimerFunc(50, update, 0);

glutSpecialFunc(mySpecialKeyboard); init();

glutDisplayFunc(render); glutReshapeFunc (reshape); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop();

}

Hasil

Penjelasan

Program diatas menggunakan fungsi myspecialKeyboard yang digunakan untuk

mengubah bentuk dari objek yang dibangun pada program ini. Menggunakan tombol

navigasi key up dan key down, key up untuk meresize ukuran objek menjadi lebih

besar, sedangkan key down , merubah objke menjadi lebih kecil. Fungsi untuk

mendeklarasikan agar objke yang dibangun dapat bergerak 3D adalah fungsi init dan

reshape , yang nantinya pengaplikasiannya akan dipanggil pada fungsi utama,

sehingga ketika program dijalankan , objek dapat bergerak.

2.

Buatlah sebuah program yang dapat menganimasikan objek persegitersebut

(4)

pada sumbu y). Sajikan screenshot hasil interaksi yang menunjukkan animasi

rotasi-rotasi tersebut dan tulis program pada fungsi display. Beri keterangan.

Sintaks:

#include<stdlib.h>

#include<glut.h>

int w = 480; int h = 480; int tz ; int x ; int y ; int z ; float sudut;

void segiEmpat() {

glBegin(GL_QUADS);

glVertex2d(0.5, -0.5); glVertex2d(-0.5, -0.5); glVertex2d(-0.5, 0.5); glVertex2d(0.5, 0.5); glEnd();

}

void renderScene(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();

glColor3f(0., 0., 1.); glTranslatef(0,0,tz); glRotatef(sudut,x,y,z); segiEmpat();

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 init() {

glClearColor(0.0,0.0,0.0,1.0); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(45.,(GLdouble)w/(GLdouble)h,1.,300.); glMatrixMode(GL_MODELVIEW);

}

void mySpecialKeyboard (int key, int x, int y) {

switch (key) {

case GLUT_KEY_UP ://deteksi tombol panah atas tz += 3;

(5)

case GLUT_KEY_DOWN ://deteksi tombol panah atas tz -= 3;

break; }

}

void myKeyboard(unsignedchar key, int a, int b) {

if (key == 'x' ) {

sudut += 20; x = 1;

y =0; z =0; }

elseif (key == 'y' ) {

sudut += 20; x = 0;

y =1; z =0; }

elseif (key == 'z' ) {

sudut += 20; x = 0;

y =0; z =1; }

}

void update(int value) {

glutPostRedisplay();

glutTimerFunc(50, update, 0); }

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

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100);

glutInitWindowSize(500,500);

glutCreateWindow("OBJEK 3D SYAVIRI"); glutReshapeFunc(resize);

init();

gluOrtho2D(-250.0, 250.0, -250, 250.0); glutDisplayFunc(renderScene);

glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(50,update,0);

glutMainLoop(); }

(6)

Penjelasan

Program diatas hampir sama seperti program sebelumnya, hanya saja , pergerakan

objke terlihat lebih dinamis, dapat berotasi dan bertranslasi pada sumbu x, y.

Menggunakan specialkeyboard up, down, right, dan left akan menggerakkan objek

berdasarkan sumbu x dan y. Searah dan berlawa nan jarumnya. Untuk pergerakannya

20 derajat tiap kali tombol keyboard x/y/z ditekan.

3.

Latihan 3 - Buatlah sebuah program dengan menggunakan fungsi WireCube dimana

tampilan wirecube dapat diputar (sumbu putar x, y, z) menggunakan tombol keyboard

'a' = rotasi berlawanan arah jarum jam pada sumbu x, 'd' = rotasi searah jarum jam

pada sumbu x, 'w' = rotasi searah jarum jam pada sumbu y, 's' = rotasi berlawanan

arah jarum jam pada sumbu y, 'e' = rotasi searah jarum jam pada sumbu z, 'q' = rotasi

berlawanan arah jarum jam pada sumbu z.

Sintaks:

#include<stdlib.h>

#include<glut.h>

int w=400, h=400, z=-50; int x1=0, y1=0, sudut=0, z1=0;

void renderScene(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1);

(7)

glRotatef(sudut,x1,y1,z1); glColor3f(0,0,1);

glutWireCube(4); 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 myKeyboard(unsignedchar key, int x, int y){ if (key == 'x') {

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

elseif (key == 'y') { y1=1;

x1=0; z1=0; sudut+=-5; }

elseif (key == 'z') { y1=0; x1=0; z1=z; sudut+=5; } }

void mySpecialKeyboard(int key, int x, int y){ switch(key){

case GLUT_KEY_UP : z-=5; break;

case GLUT_KEY_DOWN : z+=5; break;

} }

void init(){

glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0); glMatrixMode(GL_MODELVIEW);

}

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);

(8)

gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(renderScene); glutReshapeFunc(resize);

glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(1,timer,0);

init();

glutMainLoop(); }

Hasil

Penjelasan

Pada program diatas tidak menggunakan fungsi drawQuads, seperti program- program

sbeelumnya, tetapi menggunakan fungsi WireCube untuk membuat sebuah kerangka

kubus 3D, sehingga tidak ada pendeklarasian penggunaan glvertex untuk membentuk

sebuah objek. Menggunakan fungsi mykeyboard untuk memberikan pergerakan pada

objek yang bergerak terhadap sumbu x, y dan z searah maupun berlawanan dengan

arah jarum jam. Menggunakan fungsi myspecialKeyboard juga untuk pergerakan

objke , key up dan key down.

4.

Buatlah sebuah program dengan menggunakan fungsi WireSphere, dimana wire

(9)

keyboard(gunakan special key), ukuran wirespehre dapat diperbesar dengan tombol

panah atas, dan untuk memperkecil dengan tombol panah bawah, dan radius

wiresphere dapat diperbesar dengan tombol panah kanan, dan untuk memperkecil

menggunakan panah kiri.

Sintaks:

#include<stdlib.h>

#include<glut.h>

int w=400, h=400, z=-50; int x1=0, y1=0, sudut=0, z1=0;

void renderScene(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1);

glLoadIdentity(); glTranslatef(0,0,z);

glRotatef(sudut,x1,y1,z1); glColor3f(0,0,1);

// glutWireCube(4);

glutWireSphere(50,50,50); 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 myKeyboard(unsignedchar key, int x, int y){ if (key == 'x') {

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

elseif (key == 'y') { y1=1;

x1=0; z1=0; sudut+=-5; }

elseif (key == 'z') { y1=0;

x1=0; z1=z; sudut+=5; }

}

void mySpecialKeyboard(int key, int x, int y){ switch(key){

case GLUT_KEY_UP : z-=5; break;

case GLUT_KEY_DOWN : z+=5; break;

(10)

void init(){

glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0); glMatrixMode(GL_MODELVIEW);

}

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("OBJEK 3D SYAVIRI"); gluOrtho2D(-w/2,w/2,-h/2,h/2);

glutDisplayFunc(renderScene); glutReshapeFunc(resize);

glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(1,timer,0);

init();

glutMainLoop(); }

(11)

Penjelasan

Sama seperti program sebelumnya, tidak menggunakan fungsi drawQuad, melainkan

menggunakan fungsi wireSphere yang merupakan kerangka 3D objek bola. Untuk

membangun garis garis pada bola, menggunakan parameter pada fungsi wireSphere itu

sendiri. Banyak- sedikitnya atau besar kecilnya objke tergantung pada parameter yang

digunakan.

5.

Latihan 5 - Buatlah sebuah program dengan menggunakan fungsi WireCone interaksi

mengubah tinggi (panah atas, panah bawah) , alas (panah kanan, panah kiri),

potongan(a,d).

Sintaks :

#include<stdlib.h>

#include<glut.h>

int w = 480; int h = 480; int z = -150; int sudut = 45;

int sumbux, sumbuy, sumbuz; void wirecone (void){

(12)

glLineWidth(2);

glutWireCone(40., 80, 40,20); }

void renderScene(){ glClearColor(1,1,1,1);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();

glTranslatef(0,0,z);

glRotatef(sudut,sumbux,sumbuy,sumbuz); wirecone();

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, 1300.0); glMatrixMode(GL_MODELVIEW);

glLoadIdentity(); }

void init(){

glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(45.0, (float) w/(float) h, 1.0, 1300.0); glMatrixMode(GL_MODELVIEW);

}

void myKeyboard(unsignedchar key, int x, int y){ if (key == 'a') z+=2;

elseif (key == 's') z-=2;

elseif (key == 'x') {sudut +=2; sumbux = 1; sumbuy = 0; sumbuz = 0;} elseif (key == 'y') {sudut +=2; sumbux = 0; sumbuy = 1; sumbuz = 0;} elseif (key == 'z') {sudut +=2; sumbux = 0; sumbuy = 0; sumbuz = 1;} }

void update (int value){ glutPostRedisplay();

glutTimerFunc(50, update, 0); }

void main (int argc, char **argv){ glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100);

glutInitWindowSize(480,480);

glutCreateWindow("OBJEK 3D SYAVIRI"); gluOrtho2D(-320.,320.,-320.,320.); glutTimerFunc(50, update, 0); glutDisplayFunc(renderScene); glutKeyboardFunc(myKeyboard); glutReshapeFunc(resize);

init();

glutMainLoop(); }

(13)

Penjelasan

Program diatas menggunakan fungsi wirecone yang membentuk kerangka objek 3D

kerucut. Parameter wirecone menunjukkan alas, tinggi, slice, sedangkan parameter

terakhir langsung di inputkan tanpa deklarasi variabel. Untuk animasi 3D pada

program ini , sama seperti program- program sebelumnya, scalef, translate, rotatef.

Untuk scalef maka kerucut diatas akan semakin mengecil/membesar tergantung

keyboard yang digunakan, sesuai pendeklarasian pada script. Untuk pendeklarasian

pergerakan objke dideklarasikan pada fungsi myKeyboard, jika menggunakan

keyboard tertentu sesuai yang dirumuskan, maka akan mengubah objek.

6.

Buatlah sebuah program dengan menggunakan fungsi WireTorus, dengan interaksi

(14)

Sintaks :

#include<stdlib.h>

#include<glut.h>

float x=0, y=0, z=-10; int w = 320, h = 320, i, j, k, l;

int dlm = 2, lr=4, sisi=50, cincin=50; void objek(void){

glColor3f(0,0,1);

glutWireTorus(1, 3, 50, 50); }

void update(int value){ glutPostRedisplay();

glutTimerFunc(100, update, 0); }

void myDisplay(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1); glLoadIdentity(); glTranslatef(x,y,z); glRotatef(i,j,k,0); objek(); glutSwapBuffers(); }

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode (GL_PROJECTION);

glLoadIdentity();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0); glMatrixMode (GL_MODELVIEW);

}

void init() {

glShadeModel (GL_SMOOTH); glClearColor (0.0f, 0.0f, 0.0f, 0.5f); glClearDepth (1.0f);

glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);

glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); return;

}

void myKeyboard(unsignedchar key, int x, int y) {

if(key == 'a') {

i+=10; j=1; k=0; }

elseif(key == 'b') {

i+=10; j=0; k=1; }

elseif(key == 'c') {

i+=10; j=1; k=1; }

}

void mySpecialKeyboard(int key, int x, int y){ switch(key){

case GLUT_KEY_UP: dlm+=1;

break;

(15)

case GLUT_KEY_LEFT: lr-=1;

break;

case GLUT_KEY_RIGHT: lr-=-1;

break; }

}

void main(int argc, char **argv) { glutInit(&argc, argv);

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100);

glutInitWindowSize(w,h);

glutCreateWindow("OBJEK 3D SYAVIRI"); glutTimerFunc(50, update, 0);

glutKeyboardFunc(myKeyboard); init();

glutDisplayFunc(myDisplay); glutReshapeFunc (reshape); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop();

}

Hasil

Penjelasan

(16)

peregrakan objek. Untuk penggunaan parameter perlu diperhatika karena semakin

sedikit ring maka bentuk tidak akan terlihat bulat/ menjadi bulat dan semakin kecil

diameter dalamnya maka bentuknya tidak akan terlihat jelas.

7.

Buatlah sebuah program dengan menggunakan fungsi WireTeapot, dengan interaksi

rotasi pada 3 sumbu (searah dan berlawanan dengan arah jarum jam) dan mengubah

ukurannya dengan tombol panah atas dan panah bawah.

Sintaks :

#include<stdlib.h>

#include<glut.h>

#include<stdio.h>

float w=480, h=480; float n=-10;

int sumbu=30;

int xx=0, yy=0, zz=0, s=2; void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,n); glRotatef(sumbu, xx,yy,zz); glColor3f(0,0,1); glutWireTeapot(s); 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 init() { glClearColor(1.0,1.0,1.0,1.0); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.,(GLdouble)w/(GLdouble)h,1.,300.); glMatrixMode(GL_MODELVIEW); }

void myKeyboard(unsignedchar key, int x, int y) {

if (key=='x') { sumbu+=10; xx=1; yy=0; zz=0; }

elseif(key=='y') { sumbu+=10; xx=0; yy=1; zz=0; }

(17)

{

sumbu+=10; xx=0;

yy=0; zz=1; }

}

void Spesial(int key, int x, int y) {

switch(key) {

case GLUT_KEY_UP: s++;

break;

case GLUT_KEY_DOWN: s--;

break; }

}

void timer(int value) {

glutPostRedisplay();

glutTimerFunc(500,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("OBJEK 3D SYAVIRI"); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(display); glutReshapeFunc(resize); init();

glutTimerFunc(50,timer,0); glutKeyboardFunc(myKeyboard); glutSpecialFunc(Spesial);

glutMainLoop(); }

(18)

Penjelasan

Program diatas menggunakan fungsi WireTeapot yang membentuk kerangka teko.

Untuk pergerakan objek menggunakan fungsi myKeyboard dan special, sehingga

objek akan berotasi, bertranslasi atau membesar/mengecil sesuai tombol yang ditekan.

Pergerakannya mengarah pada sumbu x dan y, kemudian arah putaran searah dan

berlawanan arah jarum jam.

C. Tugas Asistensi

1.

Buatlah Fungsi untuk membuat balok 3D, dengan parameter input fungsinya berupa

panjang, lebar, dan tinggi yang dapat di ubah. Sajikan source code dan screenshotnya.

Sintaks :

#include<stdlib.h>

#include<glut.h>

int w=640, h=640, z=-30;

int x1=0, y1=0, sudut=0, z1=0, skalaX=0, skalaY=0;

void balok (int a, int panjang, int lebar, int tinggi){ glPushMatrix();

glColor3f(0,1,0); //hijau

glScalef(panjang,tinggi,lebar); glutWireCube(a);

glPopMatrix(); }

void renderScene(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1);

glLoadIdentity();

glTranslatef(0,0,z);

glRotatef(sudut,x1,y1,z1);

balok(3,4,3,3);

glutSwapBuffers(); }

void resize(int w1,int h1){ glViewport(0,0,w1,h1);

glMatrixMode(GL_PROJECTION); glLoadIdentity();

(19)

glMatrixMode(GL_MODELVIEW); glLoadIdentity();

}

void myKeyboard(unsignedchar key, int x, int y){ if (key =='q') z-=3; //zoom out

elseif (key == 'a') z+=3; //zoom in elseif (key == 'z') { //counter clockwise x1=0;

y1=0; z1=1; sudut+=30; }

elseif (key == 'w') {//clockwise y1=0; x1=0; z1=1; sudut-=30; } }

void mySpecialKeyboard(int key, int x, int y){ switch(key){

case GLUT_KEY_UP: x1=1;

y1=0; z1=0; sudut-=30; break;

case GLUT_KEY_DOWN: x1=1;

y1=0; z1=0; sudut+=30; break;

case GLUT_KEY_RIGHT: x1=0;

y1=1; z1=0; sudut+=30; break;

case GLUT_KEY_LEFT: x1=0; y1=1; z1=0; sudut-=30; break; } }

void init(){

glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0); glMatrixMode(GL_MODELVIEW);

}

void timer(int value){ glutPostRedisplay(); glutTimerFunc(50,timer,0); }

(20)

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(320,240);

glutInitWindowSize(w,h);

glutCreateWindow("ASISTENSI 1 SYAVIRI"); gluOrtho2D(-w/2,w/2,-h/2,h/2);

glutDisplayFunc(renderScene); glutReshapeFunc(resize);

glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(1,timer,0);

init();

glutMainLoop(); }

Hasil

Penjelasan

Untuk membuat program diatas, pendeklarasian pembentukan objek dan penggunaan

animasi dideklarasikan pada fungsi renderScene. Program diatas menggunakan fungsi

balok dengan parameter panjang lebar tinggi dan ketebalan garis. Terdapat

pendeklarasian fungsi translate dan rotatef.

2. Buatlah Danbo 3 dimensi dengan interaksi memutar di 3 sumbu(searah dan

berlawanan dengan arah jarum jam). Sajikan source code dan screenshotnya.

Sintaks:

#include<Windows.h>

#include<iostream>

#include<glut.h>

#include<math.h>

int a=640, b=320, c=-30; int a1=0, b1=0, sud=0, c1=0;

void myKeyboard(unsignedchar key, int x, int y) { if (key =='a') c+=3;

elseif (key == 'b') c-=3; elseif (key == 'c') {

a1=0;b1=0;c1=1; sud+=15;

}

elseif (key == 'd') { a1=1;b1=0;c1=0; sud+=15;

(21)

elseif (key == 'e') { a1=1;b1=1;c1=0; sud+=15;

} }

void init() {

glClearColor(1,1,1,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(30., (GLdouble)a/(GLdouble)b, 1., 300.); glMatrixMode(GL_MODELVIEW);

}

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 Balok(double p, double l, double t) { glScalef(p, t, l);

glutSolidCube(1); }

void renderScene(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();

glClearColor(0,0,1,0); //biru glTranslatef(0, 0, c);

glRotatef(sud, a1, b1, c1);

glPushMatrix(); //badan glColor3f(1, 0, 1); Balok(10, 6, 9); glPopMatrix();

glPushMatrix(); //kepala glTranslatef(0, 9.5, 0); glColor3f(0, 0.5, 1); Balok(15, 8, 10); glPopMatrix();

glPushMatrix(); //mata kiri glTranslatef(-2.2, 9.6, 4.1); glRotatef(90, 0, 1, 0); glColor3f(0, 0, 0);

glutSolidSphere(1, 2, 30); glPopMatrix();

glPushMatrix(); //mata kanan glTranslatef(2.2, 9.6, 4.1); glRotatef(90, 0, 1, 0); glColor3f(0, 0, 0);

glutSolidSphere(1, 2, 30); glPopMatrix();

(22)

glRotatef(-90, 1, 0, 0); glColor3f(0, 0, 0);

glutSolidCone(1.5, 2, 2, 2); glPopMatrix();

glPushMatrix(); //tangan kiri glTranslatef(-6.5, -0.5, 2.5); glRotatef(-45, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 10); glPopMatrix();

glPushMatrix(); //tangan kanan glTranslatef(6.5, -0.5, -2.5); glRotatef(45, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 10); glPopMatrix();

glPushMatrix(); //kaki kiri glTranslatef(-2, -4, -0.5); glRotatef(10, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 8); glPopMatrix();

glPushMatrix(); //kaki kiri glTranslatef(2, -4, 0.5); glRotatef(-10, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 8); glPopMatrix(); glutSwapBuffers(); }

void timer(int value) { glutPostRedisplay(); glutTimerFunc(50,timer,0); }

void main(int argc, char **argv) { glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(320,240);

glutInitWindowSize(a,b);

glutCreateWindow("ASISTENSI 2 SYAVIRI"); gluOrtho2D(-a/2, a/2, -b/2, b/2);

glutDisplayFunc(renderScene); glutTimerFunc(50, timer, 0); glutKeyboardFunc(myKeyboard); glutReshapeFunc(resize);

init();

glutMainLoop(); }

(23)

Penjelasan

Program diatas menggunakan fungsi balok yang didalamnya terdapat pendeklarasian

penggunakan scalef dan solidcube yang didalamnya menggunakan parameter 1, yang

dimaksudkan, nilai parameter pada setiap balok akan berbeda kesolidannya tergantung

dari parameter yang membangun balok itu sendiri. Untuk membuat setiap anggota

tubuh, menggunakan fungsi balok dengan parameter berbeda sesuai keinginan dan

kebutuhan dari bentuk objek agar terlihat baik.

D. Kesimpulan

-

Objek 3D merupakan perputaran dari 3 sumbu.

- Fungsi wire Cube digunakan untuk membuat kerangka balok secara otomatis. Fungsi

wiresphere untuk membuat kerangka bola. Fungsi wire teapot untuk membuat

kerangka teko. Fungsi wire torus untuk membuat kerangka donat. Fungsi wire cone

utnuk membuat kerangka kerucut.

(24)

- Untuk pergerakan objek menggunakan fungsi rotate, dapat diatur jika ingin membuat

objek berputar searah atau berlawanan jarum jam. Untuk putaran searah jarum jam

maka maka deklarasikan sudutnya dengan menggunakan operator (+) atau increment,

sedangkan jika ingin berlawanan maka menggunakan operator (-) atau decrement.

- Untuk dapat memudahkan dalam penulisan parameter, maka dapat menggunakan

pedneklarasian variable, sehingga tidak perlu menuliskan secara berulang, cukup

menuliskan variable yang digunakan, maka nantinya program akan memanggil nilai

dari variable tersebut.

E. Daftar Pustaka

Referensi

Dokumen terkait

Disini penulis mencoba menggunakan media pembelajaran yaitu program Cabri 3D kaitannya dengan upaya mengatasi kesulitan belajar siswa pada pokok bahasan volume kubus dan

Pembuatan tampilan aplikasi Passenger Information Center ini menggunakan program bernama flutter yaitu sebuah program kerangka kerja atau framework untuk membuat sebuah

Berbeda dengan metode Newton Raphson, pada metode secant tidak diperlukan turunan pertama dari fungsi non liniernya, tetapi diperlukan dua buah nilai awal.. Grafik

Pemecahan masalah dilakukan dengan menggunakan bantuan software 3D untuk membuat gambar sebuah ruangan yang terdistorsi, Lalu dua orang calon komikus profesional akan

Tujuan pengembangan aplikasi pengenalan lingkungan menggunakan engine Unity 3D adalah membuat sebuah rancangan awal game yang bertemakan lingkungan sekitar dan game

dengan menggunakan Unity 3D ini tidak hanya mudah dalam menggunakan atau mengerjakan suatu pekerjaaan, tetapi aplikasi Unity 3D ini juga dapat bekerja dengan aplikasi lainnya

Berdasarkan latar belakang diatas peneliti ingin membuat film animasi 3d yang berjudul “IBU” yang dibuat menggunakan software blender yang mana film ini memiliki pesan tersirat yang

Menggunakan sebuah metode selain triangulasi yang bisa membuat titik- titik awan atau 3D Point Cloud menjadi lebih akurat dan terbaca dengan bagus.. Membuat fitur untuk meregistrasi