Anda di halaman 1dari 5

MODUL VII

TRANSFORMASI 3D

I. Tujuan
1. Praktikan mampu mengimplementasikan penggunaan fungsi glTranslatef, glScalef, dan
glRotatef pada objek 3D serta penggunaan push matrix dan pop matrix.

II. Teori
A. Konsep Dasar Transformasi 3D
Transformasi 3D (3 Dimensi) merupakan pengembangan dari transformasi 2D.
Rumus transformasi ditulis dalam perkalian matriks 3x3. Untuk gambar objek 3D yang
ditentukan dengan sumbu koordinat x, y dan z ditulis dalam vector homogenya[x,y,z,1]
sehingga rumus transformasi ditulis dalam perkalian matriks 4x4.
Bentuk- bentuk Transformasi 3D antara lain:
1. Translasi 3D (menggeser)
Operasi yang menyebabkan perpindahan objek tiga dimensi dari satu tempat ke tempat
yang lainnya. Perubahan ini berlaku dalam arah yang sejajar dengan sumbu x, y, z.Untuk
mentranslasikan suatu titik (x,y,z) dengan pergeseran sebesar (tx, ty, tz) menjadi titik
(x‟,y‟,z‟).

Gambar 7.1 Translasi Objek

Sintaks pada program untuk proses translasi adalah glTranslate(1.0f, -1,0f, 2.0f);

1,0f mentranslasi +1 unit/satuan pada sumbu-x

Gambar 7.2 Keterangan Translasi Objek 1


-1,0f mentranslasi -1 unit/satuan pada sumbu-y

Gambar 7.3 Keterangan Translasi Objek 2

2.0f mentranslasi 2 unit/satuan pada sumbu-z

Gambar 7.4 Keterangan Translasi Objek 3

2. Penskalaan 3D (mengubah ukuran)


Transformasi skala merupakan operasi yang menyebabkan ukuran objek berubah.
Perubahan ini berlaku dalam arah yang sejajar dengan sumbu x, y, z. Dalam melakukan
skala pada objek digunakan factor skala (sx,sy,sz). Jika skala berada di antara 0 dan 1,
objek diperkecil sedangkan jika skala lebih besar dari satu, objek diperbesar.Untuk
melakukan scalling suatu titik (x,y,z) menjadi titik (x‟,y‟,z‟).

Gambar 7.5 Skala objek

Sintaks pada program untuk proses penskalaan adalah glScalef();


glScalef(2.0f, 1.0f, 1.0f); // menggandakan panjang objek pada
sumbu-x, sementara pada sumbu-y dan z ukuran panjangnya tetap
glScalef(1.0f, -2.0f, 1.0f); // memutar (flip) objek dan
menggandakan ukuran disumbu-y sementara pada sumbu-x dan z
ukuran panjangnya tetap

3. Rotasi 3D (memutar)
Berbeda dengan rotasi 2 dimensi yang menggunakan titik pusat (0,0) sebagai pusat
perputaran, rotasi 3 dimensi menggunakan sumbu koordinat sebagai pusat perputaran.
Dengan demikian ada 3 macam rotasi yang dapat dilakukan, yaitu: rotasi sumbu x,y dan
z.
Gambar 7.6 Rotasi dan sumbu rotasi

Program Translasi, Skala dan Rotasi 3D


#include <GL/glut.h>
#include <stdlib.h>

static int year = 0, day = 0;

void init(){
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}

void display(void){
glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix();
glColor3f (2.0, 0.0, 0.0);
glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
glutWireSphere(1.0, 20, 10); /* Gambar Matahari */
glPopMatrix();

glColor3f (1.0, 1.0, 0.0);


glPushMatrix();
glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
glTranslatef (2.0, 1.0, 1.0);
glScalef (1.0, 0.0, 1.0);
glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
glutWireSphere(0.5, 20, 10); /* Gambar Merkurius */
glPopMatrix();
glColor3f (1.0, 0.0, 1.0);
glPushMatrix();
glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
glTranslatef (3.0, 2.0, 2.0);
glScalef (1.0, 0.0, 1.0);
glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
glutWireSphere(0.6, 20, 10); /* Gambar Venus */
glPopMatrix();

glColor3f (0.0, 0.0, 1.0);


glPushMatrix();
glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
glTranslatef (4.0, 3.0, 3.0);
glScalef (1.0, 0.0, 1.0);
glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
glutWireSphere(0.8, 20, 10); /* Gambar Bumi */
glPopMatrix();
glutSwapBuffers();
}

void reshape (int w, int h){


glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(50.0, (GLfloat) w/(GLfloat) h, 2.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (10,10,5,0, 0,0,0,1,0) ;
}
//fungsi penggerakan melalui keyboard
void keyboard (unsigned char key, int x, int y) {
switch (key) {
case 'r':
day = (day + 10) % 360;
glutPostRedisplay();
break;
case 'a':
day = (day - 10) % 360;
glutPostRedisplay();
break;
case 's':
year = (year + 5) % 360;
glutPostRedisplay();
break;
case 'd':
year = (year - 5) % 360;
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}
}

int main(){
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (600, 600);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Transformasi 3D");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
}

Gambar 7.7 Translasi, Skala dan Rotasi 3D

III. Tugas
1. Buatlah animasi objek 3D berbentuk rumah/gedung/jalanan yang menerapakan perpaduan
antara translasi, penskalaan dan rotasi!

Anda mungkin juga menyukai