TRANSFORMASI Grafika komputer merupakan bidang yang menarik minat banyak orang. Salah sub bagian dari grafika komputer adalah pemodelan objek (object modelling). Dalam pemodelan objek dua dimensi (2D),didapati berbagai objek dapat dimodelkan. Menurut kondisi tertentu, objek yang dimodelkan itu perlu dimodifikasi. Pemodifikasian objek ini dapat dilakukan dengan melakukan berbagai operasi fungsi atau operasi transformasi geometri. Transformasi ini dapat berupa transformasi dasar ataupun gabungan dari berbagai transformasi geometri. Contoh transformasi geometri adalah translasi, penskalaan, putaran (rotasi), balikan, shearing dan gabungan. Tranformasi ini dikenal dengan transfomasi affine. Pada dasarnya, transformasi ini adalah memindahkan objek tanpa merusak bentuk. Satu contoh transformasi adalah transformasi dari jendela (window) ke viewport.disini kita telah melihat citra dalam jendela dunia diskala dan dipindahkan ke jendela viewport. Dalam bagian ini akan dibahas transformasi objek 2D dan 3D yang terdiri dari translasi, skala, putar (rotasi) dan gabungan. Tujuan transfomasi adalah: 1. 2. 3. 4.
Merubah atau menyesuaikan komposisi pemandangan. Memudahkan membuat objek yang simetris. Melihat objek dari sudut pandang yang berbeda. Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, ini biasa dipakai untuk animasi komputer.
Untuk dapat menggunakan transformasi dengan baik maka diperlukan pengetahuan operasi matriks dan vektor. (catatan: untuk keperluan ini, silakan anda mencari rujukan dari bukubuku aljabar linear). Operasi matriks:
Penambahan dan pengurangan Perkalian Determinan Transpos Kebalikan (inverse)
Operasi vektor: Penambahan dan pengurangan Perkalian titik (dot product) Perkalian silang (cross product) A. TRANSLASI 2D Transformasi translasi merupakan suatu operasi yang menyebabkan perpindahan objek 2D dari satu tempat ke tempat lain. Perubahan ini berlaku dalam arah yang sejajar dengan sumbu x dan sumbu y.
Dalam operasi translasi, setiap titik pada suatu entitas yang ditranslasi bergerak dalam jarak yang sama. Pergerakan tersebut dapat berlaku dalam arah sumbu x saja, atau dalam arah sumbu y saja atau keduanya. Translasi: Memindahkan titik/objek dalam arah x, y dan atau z Ini berarti bahwa nilainya ditambah atau dikurangi dengan nilai tertentu Jika titik Q ditranslasikan ke P dengan matriks translasi M maka persamaanya adalah Q = M P. Contoh: 1. Buatlah program untuk menampilkan segiempat yang mempunyai koordinat titik ujung sebelah kiri bawah (100,500) dan titik ujung sebelah kanan atas (200,200). 2. Translasikan segiempat pada bagian (1) dengan nilai dTx = 250 dan dTy = 50. Jawab: //---------------------------------------------------------------#include<windows.h> #include
void Display() { glColor3f(1,0,1);//warna segiempat asli adalah pink glRecti(300,50,500,200); //glPushMatrix(); //----------------------------------//glTranslated(250,50,0); // fungsi translasi OpenGL //----------------------------------glColor3f(1,1,0);//warna segiempat hasil translasi adalah kuning glPushMatrix(); glTranslated(250,50,0); // fungsi translasi OpenGL glRecti(300,50,500,200); glPopMatrix(); glFlush(); } void reshape(int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,800.0,0.0,600.0); } void init() { glClearColor(1.0,0.0,0.0,1.0); glPointSize(5.0); } main(int argc,char** argv) {
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(800,600); glutCreateWindow("Contoh Program Grafika Komputer"); init(); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop(); } //--------------------------------------------------------------Hasil keluaran program:
B. PENSKALAAN Skala adalah nilai koordinat x,y,dan atau z dikalikan dengan bilangan skalar. Contoh: 1. Buatlah program dengan OpenGL untuk menampilkan segiempat yang mempunyai koordinat titik ujung sebelah kiri bawah (50,50) dan titik ujung sebelah kanan atas (100,100). 2. Skalakan segiempat pada bagian (1) dengan nilai sPx=2 dan sPy=3.
Jawab: //--------------------------------------------------------//--------------------------------------------------------------#include<windows.h> #include void Display() { glColor3f(1,0,1);//warna segiempat asli adalah pink glRecti(50,50,100,100); //glPushMatrix(); //----------------------------------//glTranslated(250,50,0); // fungsi translasi OpenGL //----------------------------------glColor3f(1,1,0);//warna segiempat hasil translasi adalah kuning glPushMatrix(); glScaled(2,3,1); glRecti(50,50,100,100); glPopMatrix(); glFlush(); }
void reshape(int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,800.0,0.0,600.0); } void init() { glClearColor(1.0,0.0,0.0,1.0); glPointSize(5.0); } main(int argc,char** argv) { glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(800,600); glutCreateWindow("Contoh Program Grafika Komputer"); init(); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop(); } ------Hasil keluaran program:
C. ROTASI Rotasi adalah koordinat x,y, dan atau z diputar ke sekeliling titik referensi. Pada rotasi ini digunakan aturan right-angles dan rigonometri. Contoh: 1. Buatlah program dengan OpenGL untuk menampilkan segiempat yang mempunyai koordinat titik ujung sebelah kiri bawah (300,50) dan titik ujung sebelah kanan atas (500,200) 2. Putarlah segiempat pada bagian(1) dengan sudut putar 450 terhadap sumbu z. Jawab:
//---------------------------------------------------------------#include<windows.h> #include void Display() { glColor3f(1,0,1);//warna segiempat asli adalah pink glRecti(50,50,100,100); //glPushMatrix(); //----------------------------------//glTranslated(250,50,0); // fungsi translasi OpenGL //----------------------------------glPushMatrix(); glColor3f(1,1,0);//warna segiempat hasil translasi adalah kuning glRotated(45,0,0,1); glRecti(300,50,500,200); glPopMatrix(); glFlush(); } void reshape(int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,800.0,0.0,600.0); } void init() { glClearColor(1.0,0.0,0.0,1.0); glPointSize(5.0); } main(int argc,char** argv) { glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(800,600); glutCreateWindow("Contoh Program Grafika Komputer"); init(); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop(); } TUGAS:
1. Apa yang terjadi jika 1 kotak tersebut semuanya ditranslasikan dengan dPx = -50 dan dPy = 40. Perubahan apa yang perlu anda lakukan untuk merealisasikan? 2. Apa yang terjadi jika 2 garis diskalakan dengan faktor skala sPx= 2 dan sPy = 2. Perubahan apa yang perlu anda lakukan untuk merealisasikan? 3. Di dalam transformasi gabungan mengapa urutan transformasi sangat diperhatikan? 4. Buatlah 5 buah gambar yang sama dengan gambar hasil keluaran contoh (STIPPLING POLIGON) tetapi dengan ukuran yang lebih kecil. Ke-5 gambar harus ditampilkan semuanya. Perubahan apa yang perlu anda lakukan untuk merealisasikan.