Sunday, April 28, 2013

Transformasi Objek

Transformasi adalah adalah memindahkan obek tanpa merusak bentuk, dan tanpa membuat objek baru. Jenis-jenis transformasi yang sering digunakan pada grafika komputer dibagi menjadi 3 yaitu tarnslasi, rotasi, dan skalasi.  Tujuan transformasi adalah :
  •   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


1. Translasi (Translation)
Translasi merupakan bentuk transformasi yang memindahkan posisi suatu objek, baik pada sumbu x, sumbu y, maupun sumbu z.  dalam translasi dua dimensi diperlukaan dua parameter, yaitu pemindahan kearah sumbux dan ke arah sumbu y. Fungsi yang digunakan adalah :

·         glTranslatef (Tx,Ty,Tz)
·         glTranslated (Tx,Ty,Tz)
parameter Tx digunakan untuk menentukan arah dan seberapa jauh suatu benda akan dipindahkan berdasarkan sumbu x. Ty digunakan untuk menentukan arah dan seberapajauh suatu benda akan dipindahkan berdasarkan sumbu y. Sedangkan parameter Tz digunakan untuk menentukan arah dan seberapajauh suatu benda akan dipindahkan berdasarkan sumbu z(berlaku pada model 3D)









Gambar 1. Ilustrasi translasi

2.  Rotasi (Rotation)

Rotasi merupakan bentuk transformasi yang digunakan untuk memutar posisi suatu benda, fungsi yang digunakan untuk melakukan rotasi adalah
·         glRotatef(Ѳ, Rx, Ry, Rz)
·         glRotated(Ѳ, Rx, Ry, Rz)
Parameter yang dibutuhkan pada fungsi tersebut ada 4 macam, yaitu parameter Ѳ untuk besar sudut putaran. Sudut rotasi adalah besaran yang menentukan seberapa jauh sebuah
titik akan diputar. Parameter Rx untuk putaran berdasarkan sumbu x, parameter Ry untuk putaran berdasarkan sumbu y, parameter Rz untuk putaran berdasarkan sumbu z. Jika parameter Ѳ bernilai positif, maka objek akan diputar berlawanan arah jarum jam, sedangkan jika parameter Ѳ bernilai negatif, maka akan diputar searah jarum jam.
Operasi rotasi dapat diuraikan sebagai berikut :
    a. Rotasi dari titik P yang berada di sumbu x, P(x, 0) menjadi P’(x’, y’) dapat digambarkan dengan :
x’ = x .cos θ
y’ = x.sin θ

    b. Rotasi dari titik P yang berada di sumbu y, P(y, 0) menjadi P’(x’, y’) dapat digambarkan dengan :
x’ = -y .cos θ
y’ = y.sin θ

    c. Rotasi dari titik P(x, y) menjadi P’(x’, y’) merupakan kombinasi dari kedua macam transformasi di atas
R = Rx + Ry.
X’ = xp +(x - xp) cos θ – (y - yp) sin θ
Y’ = yp + (x – xp) sin θ + (y – yp) cos θ








3. Skalasi
Skalasi merupakan bentuk tarnsformasi yang dapat mengubah ukkuran (besar-kecil) suatu objek. Penskalaan m adalah perpindahan objek dari titik P ke titik P’, dimana jarak titik P’ adalah m kali titik P atau suatu operasi yang membuat objek berubah ukurannya baik menjadi kecil maupun besar. Fungsi yang digunakan untuk melakukan skalasi ialah :
·         glScalef(Sx, Sy, Sz)
·         glScaled(Sx, Sy, Sz)

Berbeda dengan transformasi geser yang tidak mengubah bentuk objek, transformasi skala akan mengubah bentuk objek sebesat skala Sx dab Sy’ , sehingga : 
(Qx,Qy)= (Px*Sy*Sy)
Transformasi skala dilakukan terhadap titik pusat (0,) karena setiap titil p akan digeser sebesar Sx dari titik pusat dalam sumbu x dan sejauh Sy dalam sumbu Y. Apabila matrik M berisi nilai negative maka akan diperoleh pencerminan terdahap sumbu v dan Y.jika kedua factor skala berisi nilai yang sama, Sx=Sy=s maka akan diperoleh uniform scaling, dimana objek akan diperbesar pada kedua sumbu besar, jika 0<s<1 maka akandiperoleh objek yang diperkecil (demagnification). Jika factor skala tidak sama , maka akan diperoleh penskalaan
defernsial. Jika salah satu dari factor skala sama dengan 1 maka akan diperoleh transfornasi strain.

Contoh source code implementasi, tansformasi dan rotasi :

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

void drawQuads(){
      
       glBegin(GL_QUADS);
       glVertex2f(-45.0,-10.0);  
       glVertex2f (45.0,-10.0);
       glVertex2d (45.0,30.0);
       glVertex2d (-45.0,30.0);
       glEnd ();
}

void drawQuads2(){
       glBegin(GL_QUADS);
       glVertex2f(150.0,180.0);  
       glVertex2f (180.0,180.0);
       glVertex2d (180.0,240.0);
       glVertex2d (150.0,240.0);
       glEnd ();
}
void render(){
       glClear(GL_COLOR_BUFFER_BIT);
       glColor3f(1,0,0);    //merah
       drawQuads ();
       glTranslatef(0,-40,0);
       glColor3f(1,1,1);    //putih
       drawQuads ();
      
       glColor3f(1,0,0);    //merah kanan
       drawQuads2 ();
       glRotatef(180,0,-1,0);
       glColor3f(1,1,1);    //putih kiri
       drawQuads2 ();
 glTranslatef(30,0,0);
       glColor3f(1,0,0);    //merah kiri
       drawQuads2 ();
       glRotatef(180,0,-1,0);
       glColor3f(1,1,1);    //putih kanan
       drawQuads2 ();
      
       glTranslatef(120,-100,0);
       glColor3f(1,0,0);    //merah bawah
       drawQuads ();
       glTranslatef (-90,0,0);
       glColor3f(1,0,0);    //merah bawah
       drawQuads ();
       glTranslatef (-90,0,0);
       glColor3f(1,0,0);    //merah bawah
       drawQuads ();

       glTranslatef(20,-40,0);
       glColor3f(1,1,1);    //putih bawah
       drawQuads ();
      
       glTranslatef(120,0,0);
       glColor3f(1,1,1);    //putih bawah
       drawQuads ();
       glFlush ();
}
void main(int argc,char **argv){
       glutInit(&argc,argv);
       glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE |GLUT_RGBA);
       glutInitWindowPosition(100,200);
       glutInitWindowSize(320,240);
       glutCreateWindow("latihan 5");
       gluOrtho2D(-320,320,-240,240);
       glutDisplayFunc(render);
       glutMainLoop();
}


hasil:






j
Load disqus comments

0 comments