Materi7 Grafik
Materi7 Grafik
sesudah
sesudah
x
z sebelum
sebelum
x
Qx Px
Q y T Py atau ringkasnya Q = T(P)
Q P
z z
Transformasi Affine mempunyai bentuk seperti berikut ini.
Q x m11 Px m12 Py m13
Q y m21 Px m22 Py m23
1 1
dalam bentuk persamaan matriks persamaan di atas dapat diubah
menjadi
Qx m11 m12 m13 Px
Q y m21 m22 m23 Py
1 0 0 1 1
Contoh :
Qx 1 0 m13 Px
Qy 0 1 m 23 Py atau lebih ringkasnya
1 0 0 1 1
Q x Px m 13
Q y Py m 23
1 1
( Qx, Qy ) = ( Sx Px , Sy Py )
Sx 0 0
0 Sy 0
0 0 1
Qx = Px cos() Py sin(),
Qy = Px sin() Py cos(),
Qx = Px + hPy
Qy = Py
Dimana h menyatakan besarnya perubahan P pada sumbu y. Matrik
transformasinya adalah sebagai berikut.
1 h 0
0 1 0
0 0 1
Bentuk tranformasinya secara grafis dapat diihat pada gambar berikut ini.
P = Px i + Py j + Pz k + atau
Qx Px
Qy Py
Q M Pz
dengan M nya adalah
z
1 1
1 0 0 m14
0 1 0 m24
0 0 1 m
34
0 0 0 1
dimana (m14, m24, m34) adalah besarnya translasi yang diinginkan.
Untuk penskalaan matrik transformasinya adalah sebagai berikut.
S x 0 0 0
0 S y 0 0
0 0 S z 0
0 0 0 1
dimana (Sx, Sy, Sz) adalah besarnya skala yang diinginkan.
Untuk shearing matriks transformasinya adalah sebagai berikut.
1 0 0 0
f 1 0 0
0 0 1 0
0 0 0 1
Kalau matrik transformasi dikalikan dengan titik P akan menghasilkan Q =
(Px, fPx + Py , Pz). Jadi komponen Px, dan Pz tetap, sedangkan komponen
Py berubah secara proporsional, dimana f adalah konstanta yang kita
inginkan.
Untuk rotasi ada 3 macam transformasi, yaitu rotasi terhadap sumbu x,
sumbu y, dan sumbu z.
c 0 s 0
0 1 0 0
Rotasi dengan sumbu y, matrik rotasinya adalah s 0 c 0
1
0 0 0
c s 0 0
s c 0 0
Rotasi dengan sumbu z, matrik rotasinya adalah 0 0 1 0
0 0 0 1
Dimana c adalah cos() dan s adalah sin(), untuk yang diinginkan.
Contoh:
Gambar berikut ini menunjukkan a. Gambar gudang dengan posisi awal,
dan rotasi dari titik pusat sebesar b. -70o terhadap sumbu x, c. 30o
terhadap sumbu y, dan d. rotasi -90o terhadap sumbu z.
Berikut ini disajikan proses melihat dan menampilkan obyek dalam bentuk
3D. Pada gambar 7.7 ditunjukkan obyek 3D yang sebagian berada di luar
ruang pandang. Pada penampilannya terdapat proses clipping, yaitu
membuang bagian obyek yang berada di luar ruang pandang.
gluLookAt( eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.z);
Kamera biasanya diatur melihat ke bawah ke obyek dari posisi yang paling
dekat. Gambar 7.9. menunjukkan kamera dengan posisi-posisi
eye=(4,4,4), melihat titik pusat dengan look=(0,1,0). Arah atas diatur
dengan up=(0,1,0). Misalnya juga diinginkan ruang pandangnya selebar
6.4 dan setinggi 4.8 (atau aspect ratio nya 640/480). Dan misalnya ingin
diatur pula near = 1 dan far = 50. Maka kodenya haruslah dibuat seperti
berikut ini.
glPushMatrix();
glTranslated(0.5, 0.5, 0.5); // big cube at (0.5, 0.5, 0.5)
glutWireCube(1.0);
glPopMatrix();
glPushMatrix();
glTranslated(1.0,1.0,0); // sphere at (1,1,0)
glutWireSphere(0.25, 10, 8);
glPopMatrix();
glPushMatrix();
glTranslated(1.0,0,1.0); // cone at (1,0,1)
glutWireCone(0.2, 0.5, 10, 8);
glPopMatrix();
glPushMatrix();
glTranslated(1,1,1);
glutWireTeapot(0.2); // teapot at (1,1,1)
glPopMatrix();
glPushMatrix();
glTranslated(0, 1.0 ,0); // torus at (0,1,0)
glRotated(90.0, 1,0,0);
glutWireTorus(0.1, 0.3, 10,10);
glPopMatrix();
glPushMatrix();
glTranslated(1.0, 0 ,0); // dodecahedron at (1,0,0)
glScaled(0.15, 0.15, 0.15);
glutWireDodecahedron();
glPopMatrix();
glPushMatrix();
glTranslated(0, 1.0 ,1.0); // small cube at (0,1,1)
glutWireCube(0.25);
glPopMatrix();
glPushMatrix();
glTranslated(0, 0 ,1.0); // cylinder at (0,0,1)
GLUquadricObj * qobj;
qobj = gluNewQuadric();
gluQuadricDrawStyle(qobj,GLU_LINE);
gluCylinder(qobj, 0.2, 0.2, 0.4, 8,8);
glPopMatrix();
glFlush();
}
//<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
11 dari 12 Disusun oleh : Eko Sediyono
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize(640,480);
glutInitWindowPosition(100, 100);
glutCreateWindow("Transformation testbed - wireframes");
glutDisplayFunc(displayWire);
glClearColor(1.0f, 1.0f, 1.0f,0.0f); // background is white
glViewport(0, 0, 640, 480);
glutMainLoop();
}
Tugas :