- 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 ();
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
No comments:
Post a Comment