Disusun Oleh :
Ananda Putri Syaviri
130533608243
PTI Off B 2013
Modul 5
“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>
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
menggunakan tombol ("panah kiri" = rotasi berlawanan arah jarum jam pada sumbu
x, "panah kanan" = rotasi searah jarum jam pada sumbu x, "panah atas" = rotasi
searah jarum jam pada sumbu y, "panah bawah" = rotasi berlawanan arah jarum jam
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 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);
}
Hasil:
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.
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);
glutSwapBuffers();
}
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);
}
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.
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();
}
Hasil
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.
Hasil:
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.
Hasil
Penjelasan
Program diatas menggunakan fungsi wire torus yang membentuk kerangka donat.
Parameter dari wire torus menunjukkan diamater dalam, diameter luar, dan cincin
untuk jumlah ring. Menggunakan fungsi mykeyboard dan specialKeuboard untuk
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.
Hasil
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>
glTranslatef(0,0,z);
glRotatef(sudut,x1,y1,z1);
balok(3,4,3,3);
glutSwapBuffers();
}
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);
}
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.
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 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(); //hidung
glTranslatef(0, 6.5, 4.1);
glRotatef(90, 0, 1, 0);
glRotatef(-90, 1, 0, 0);
glColor3f(0, 0, 0);
glutSolidCone(1.5, 2, 2, 2);
glPopMatrix();
- Hasil
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.
- Gunakan fungsi glutSolid untuk dapat membuat objek menjadi berisi atau membuat
objek dengan full.
- 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
Modul V praktikum Grafika Komputer, Jurusan Teknik Elektro, Fakultas
Teknik,Universitas Negri Malang.