Grafika Komputer Evangs Mailoa
Translasi Skala Rotasi/Putar
Konsep yang terpenting dalam grafika komputer adalah Transformasi 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 di-skala dan dipindahkan ke jendela viewport. Kita akan membuat transformasi sejenis untuk memindahkan objek ke lokasi yang kompleks.
Transformasi 2D dan 3D terdiri dari: Rotation Skala Translasi Shearing
Transformasi memperkenankan untuk:. Komposisi pemandangan 2. Memudahkan membuat objek yang simetris
3. Melihat objek dari sudut pandang yang berbeda 4. Animasi komputer dengan beberapa objek untuk berpindah dari satu tempat ke tempat lain.
OpenGL membuat transformasi mudah. Tetapi ini bukan alasan untuk tidak mempelajari transformasi secara rinci.
Transformasi secara sederhana dapat dikatakan sebagai mengambil titik dan memetakannya ke lokasi lain.
Dalam kasus 2D, ini berarti: Untuk P = (P x, P y, ) T dan = ( x, y, ) T P adalah pada lokasi P = Pxi+Pyj + ξ (sama untuk ) maka, = M (P x, P y, ) T atau = M(P) Dengan M adalah matrik pemetaan P
Latihan: Jika P = (3,4) dan = (5, 7) berapakah M? (5,7,) T = M (3,4,) T Kita ingin menaikkan P x dengan 2 dan P y dengan 3. Berapakah M?? x y 2 3 P P x y
Memindahkan titik/objek dalam arah x, y dan atau z.
Ini berarti bahwa nilainya ditambah atau dikurangi dengan nilai tertentu. dp x x y dp dp x y P P x y P dp y
Contoh: Tentukan matriks translasi untuk memindahkan titik P=(4,6) ke =(,3)? 3 Berubah dalam X 6 3 4 6 P Berubah dalam Y
Contoh: Tentukan matriks translasi untuk memindahkan titik P=(4,6,2) ke =(,3,5)? 3 Berubah dalam X 6 3 4 6 5 3 2 P Berubah dalam Y Berubah dalam Z
Nilai koordinat x, y, dan atau z dikalikan dengan bilangan skalar. x y sp x sp y P P x y P
Contoh: Tentukan matriks skala untuk menskala titik P = (6,2) ke = (3,4) P 3 2 4 2 6 2
Contoh: Tentukan matriks skala untuk menskala titik P = (6,2,9) ke = (3,4,3) P 3 4 3 2 2 3 6 2 9
Koordinat x,y dan atau z diputar ke sekeliling titik referensi. P Ө Ф P Bagaimana kita menghitung rotasi titik P ke titik?
Gunakan right-angles dan trigonometri. Kita tahu bahwa P(x,y) = (R cos(ф), R sin(ф) ) dan (x,y) = (R cos(ө+ф), R sin(ө +Ф) ) y = R sin (Ф) Dari trigonometri: cos(ө+ф) = cos(ө)cos(ф) sin(ө)sin(ф) sin(ө +Ф) = sin(ө)cos(ф) + cos(ө)sin(ф) x = R sin (Ф)
Gunakan right-angles dan trigonometri. x = R cos(ө+ф) = R cos(ө)cos(ф) R sin(ө)sin(ф) y = R sin(ө +Ф) ) = R sin(ө)cos(ф) + R cos(ө)sin(ф) Menggunakan P(x,y) = (R cos(ф), R sin(ф) ) didapatkan x = P x cos(ө) P y sin(ө) y = P x sin(ө) + P y cos(ө)
Matriks rotasi: x y cos( sin( ) ) sin( cos( ) ) P P x y
Ada 3 jenis rotasi Rotasi pada sumbu x, y dan z
Putaran Z sama dengan perputaran dalam 2D sebagai objek putar antara sumbu x dan y x y z cos( ) sin( ) sin( ) cos( ) P P P x y z Sudut rotasi positif dengan aturan tangan kanan.
Putaran X adalah rotasi antara sumbu y dan z. x y z cos( sin( cos( ) ) sin( ) ) P P P x y z
Putaran Y adalah rotasi antara sumbu x dan z. x y z cos( sin( ) ) cos( sin( ) ) P P P x y z
Shearing Shearing berarti bahwa sebuah titik ditarik ke arah tertentu.
Shearing terjadi sepanjang garis. Dalam contoh ini, shear terjadi sepanjang sumbu x. Atau: x = P x + hpy; y = P y ; x y h P P x y
Kombinasi Transformasi Rotasi, skala, translasi dan Shearing dapat dikombinasikan ke dalam satu matriks. Contoh: jika kita ingin untuk mentranslasi sebuah objek, memutarnya dan kemudian menskala, maka matriks transformasi T: sp x sp y cos( sin( ) ) sin( cos( ) ) dp dp x y
Transformasi Affine mempertahankan garis dan bidang. Mempertahankan keliniearan dan kedatarannya Garis tetap sebagai garis Bidang tetap datar
Transformasi Affine mempertahankan garis dan bidang. Jika 2 garis paralel dikenakan transformasi yang sama maka hasil setelah transformasi tetap juga paralel. Demikian juga untuk bidang
Pemrograman OpenGL bekerja dengan matriks 4 dimensi. OpenGL akan mengerjakan transformasi affine untuk kita. Akan menghasilkan segiempat warna hijau: glcolor3f (.,.,.); glrectf (3., 2., 4., 3.);
Pemrograman Sekarang akan ditranslasikan gltranslated( x, y, z) dan warnanya diganti dengan warna biru void display(void) { glcolor3f (.,.,.); glrectf (3., 2., 4., 3.); glcolor3f (.,.,.); glpushmatrix(); gltranslated(5,5,); glrectf (3., 2., 4., 3.); glpopmatrix(); } glflush ();
Pemrograman Atau diputar glrotate(degrees, x, y, z); dan warnanya diganti dengan merah. void display(void) { glcolor3f (.,.,.); glrectf (3., 2., 4., 3.); glcolor3f (.,.,.); glpushmatrix(); glrotatef(3.f,.f,.f,.f); glrectf (3., 2., 4., 3.); glpopmatrix(); } glflush ();
Pemrograman Atau diskala glscaled(x, y, z); dan warnanya diganti dengan kuning void display(void) { glcolor3f (.,.,.); glrectf (3., 2., 4., 3.); glcolor3f (.,.,.); glpushmatrix(); glscalef(.5f,.5f,.f); glrectf (3., 2., 4., 3.); glpopmatrix(); } glflush ();
Pemrograman Atau kombinasi ketiganya void display(void) { glcolor3f (.,.,.); glrectf (3., 2., 4., 3.); glcolor3f (.,.,.); glpushmatrix(); glrotatef(3.f,.f,.f,.f); glscalef(.5f,.5f,.f); gltranslated(5,5,); glrectf (3., 2., 4., 3.); glpopmatrix(); } glflush ();
Pemrograman Dan kita harus mengalikan matriks transformasi dengan urutan terbalik demikian juga dengan OpenGL. Contoh untuk melakukan transformasi dari segiempat dengan ditranslasi, diskala dan kemudian dirotasi maka kodenya adalah : glrotatef(3.f,.f,.f,.f); glscalef(.5f,.5f,.f); gltranslated(5,5,); glrectf (3., 2., 4., 3.);
Saat mau memulainya nampak kompleks, tetapi sebenarnya cukup mudah.
Saluran OpenGL : matriks pandangan model, matriks proyeksi, dan matriks viewport.
Matriks Proyeksi set dengan glortho(left, right, bottom, top, near, far) far near top bottom left right
Matriks Pandangan model Disamping dengan gltranslated, glscaled and glrotated, juga digunakan glulookat(eye.x, eye.y, eye.z, lookat.x, lookat.y, lookat.z, up.x, up.y, up.z); Posisi mata (x, y, z) Arah ke atas
Mau bertanya..?