3D Viewing & Projection
Konsep 3D Untuk mendapatkan tampilan 3D yang dimodelkan dalam koordinat dunia, pertama harus menentukan koordinat referensi untuk “kamera” Koordinat referensi ini mendefinisikan posisi dan orientasi utk bidang datar kamera, yang digunakan untuk menampilkan objek
Konsep 3D Deskripsi objek dikirim ke koordinat referensi kamera dan diproyeksikan ke display plane (bidang datar untuk tampilan) Titik-titik di dunia nyata dipetakan ke dalam ruang 2 dimensi objek Display plane y kamera x z
Konsep 3D Cahaya menyebabkan suatu objek dapat terlihat Warna objek ditentukan dari properti objek tersebut
Daftar Istilah Bidang proyeksi/projection plane = bidang pandang/view plane, didefinisikan dengan view reference point (VRP) pada koordinat dunia dan view plane normal (VPN) VPN merupakan arah pandang, dan arah atas yang tegak lurus dengannya merupakan Vektor Up (VUP), dan yang ketiga adalah vektor yang tegak lurus dengan VPN dan VUP Viewing reference coordinate (VRC) didefinisikan pada bidang pandang dengan VRP sebagai origin Pusat proyeksi / center of projection (COP)
kamera objek Bidang pandang y x y z z x Koordinat Dunia Pusat proyeksi Proyektor Koordinat Viewing
Tranformasi Koordinat Dunia Ke Koordinat Kamera y x z y x z Pref = koordinat view reference point di koordinat dunia Peye = letak kamera di sistem koordinat kamera
Tranformasi Koordinat Dunia Ke Koordinat Kamera Kamera mengarah ke sumbu z negatif y Sistem Koordinat Kamera harus disusun dahulu x z y x -z z Pref = koordinat view reference point di koordinat dunia Pcam / Peye = letak kamera di sistem koordinat kamera
Menyusun Sistem Koordinat Kamera v u Y / Vup X Z - Z Pref Pcam
Menyusun Sistem Koordinat Kamera Perhatikan arah kamera ke sumbu z negatif, berarti vektor untuk sumbu z negatif tersebut dihitung dengan cara Pref – Pcam. Maka arah sumbu z positif adalah Pcam – Pref. Asosiasikan sumbu z tersebut dengan vektor n. Vektor n ini harus normal maka dapat dihitung dengan cara : n = Pcam – Pref / |Pcam – Pref |.
Menyusun Sistem Koordinat Kamera Setelah vektor n terbentuk, ada dua vektor lagi yang perlu dibentuk, yaitu u dan v. Asosiasikan u dengan x dan v dengan y. Yang perlu diperhatikan adalah ketiga vektor tersebut harus Orthonormal (saling tegak lurus dan normal). Pertama, kita menentukan vektor pandang atas / Vup sebagai vektor v. Dimana vektor pandang ini sebagai sumbu y, maka bisa ditentukan nilainya adalah (0,1,0). Tapi ini belum tentu Orthonormal dengan n, maka solusinya tentukan dulu vektor u, dimana vektor u harus tegak lurus dengan Vup dan n. Maka dapat dihitung u = Vup x n / |Vup x n| (ingat aturan tangan kanan dan cross product)
Menyusun Sistem Koordinat Kamera Setelah n dan u ditemukan, maka yang terakhir kita dapat menentukan vektor v. Vektor v tegak lurus dengan vektor u dan n maka v = n x u. (ingat aturan tangan kanan dan cross product). Maka setelah u,v,n terbentuk, sistem koordinat kamera sudah dapat didefinisikan.
Menyusun Sistem Koordinat Kamera v = n x u n v u
Tranformasi Koordinat Dunia Ke Koordinat Kamera Translasi ke origin y x z y x -z u v n z Pref = koordinat view reference point di koordinat dunia Peye = letak kamera di sistem koordinat kamera
Translasi Ke Origin Setelah sistem koordinat kamera terbentuk, maka harus dipindah dan disesuaikan ke origin dari koordinat kamera Untuk mengembalikan ke posisi origin maka dilakukan matriks inverse translasi dari koordinat kamera. 1 0 0 −𝑡𝑥 0 1 0 −𝑡𝑦 0 0 0 0 1 0 −𝑡𝑧 1 = 1 0 0 −𝑃𝑐𝑎𝑚𝑥 0 1 0 −𝑃𝑐𝑎𝑚𝑦 0 0 0 0 1 0 −𝑃𝑐𝑎𝑚𝑧 1
Tranformasi Koordinat Dunia Ke Koordinat Kamera Rotasi untuk menyesuaikan y x y z y x -z x z z Pref = koordinat view reference point di koordinat dunia Peye = letak kamera di sistem koordinat kamera
Rotasi Untuk Menyesuaikan Untuk menyesuaikan ke sistem koordinat maka dapat juga dikatakan bahwa titik yang yang akan dipindah ke koordinat kamera diproyeksikan ke sistem koordinat kamera (u,v,n). Maka : 𝑢 𝑣 𝑛 . P = 𝑢𝑥 𝑢𝑦 𝑢𝑧 0 𝑣𝑥 𝑣𝑦 𝑣𝑧 0 𝑛𝑥 𝑛𝑦 𝑛𝑧 0 0 0 0 1 . 𝑥 𝑦 𝑧
Matriks Transformasi Ke Koordinat Kamera Berdasarkan penjelasan sebelumnya maka urutan transformasinya adalah translasi kemudian rotasi. Tidak berlaku sebaliknya. Maka bisa didefinisikan matriks gabungan untuk transformasi ke koordinat kamera adalah M = R.T M adalah matriks transformasi ke koordinat kamera R adalah matriks rotasi dan T adalah matriks translasi Jadi untuk mendapatkan posisi titik di koordinat kamera rumusnya adalah : Koord_cam = M.Koord_dunia
Contoh Soal Sebuah titik Pref (0,1,4) dilihat dari kamera yang posisinya di Pcam(4,4,4) dengan vektor arah pandang atas Vup(0,1,0). Tentukan posisi titik tersebut terhadap bidang pandang kamera.
Jawaban Ingat, ada dua langkah : Susun sistem koordinat kamera Pindah ke origin dari kamera
Langkah 1 : susun koordinat kamera v = n x u = ( 4 5 , 3 5 ,0) x (0,0,-1) = (− 3 5 , 4 5 ,0)
Langkah 2 : pindah ke origin kamera Koord_cam = M.koord_dunia = R.T.koord_dunia M = 𝑢𝑥 𝑢𝑦 𝑢𝑧 0 𝑣𝑥 𝑣𝑦 𝑣𝑧 0 𝑛𝑥 𝑛𝑦 𝑛𝑧 0 0 0 0 1 . 1 0 0 −𝑃𝑐𝑎𝑚𝑥 0 1 0 −𝑃𝑐𝑎𝑚𝑦 0 0 0 0 1 0 −𝑃𝑐𝑎𝑚𝑧 1 = 0 0 −1 0 − 3 5 4 5 0 0 4 5 3 5 0 0 0 0 0 1 . 1 0 0 −4 0 1 0 −4 0 0 0 0 1 0 −4 1 = 0 0 −1 4 − 3 5 4 5 0 − 4 5 4 5 3 5 0 − 28 5 0 0 0 1
Koord_cam = M.koord_dunia Jadi posisi titik di koordinat dunia adalah di (0,0,-5)
Proyeksi Koordinat dunia -> koordinat kamera -> proyeksi objek 3 dimensi ke bidang pandang 2 dimensi 2 metode : proyeksi paralel dan proyeksi proyeksi perspektif Objek yang diproyeksikan ditentukan dengan menghitung perpotongan garis proyeksi dengan bidang pandang
Proyeksi Paralel Posisi koordinat ditransformasi ke bidang pandang sejalan dengan garis sejajar/paralel
Proyeksi Perspektif
Proyeksi Perspektif Posisi objek ditransformasikan ke bidang pandang sejalan dengan garis-garis yang bertemu di sebuah titik, yang disebut projection reference point (prp)
Viewing Frustrum Viewing frustrum Field of view (fovy) Width (w) Height (h) Projection Reference Point (prp) / Posisi kamera (Peye) near far Aspect ratio = width / height
Proyeksi Perspektif (x,y,z) (x’,y’,z’) = (x’,y’,d) (0,0,0) θ d View plane
Proyeksi Perspektif (x,y,z) (x’,y’,z’) = (x’,y’,d) (0,0,0) 1 θ d View plane Θ = fovy / 2 d = cot Θ x‘ / d = x / z -> x’ = d.x / z y‘ / d = y / z -> y’ = d.y / z
Ingat : Trigonometri Jadi : cot Θ = b / a = 1 / tan Θ = cos Θ / sin Θ
Matriks (tanpa aspect ratio) x‘ / d = x / z -> x’ = d.x / z y‘ / d = y / z -> y’ = d.y / z Matriks = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 −1/𝑑 0 . 𝑥 𝑦 𝑧 ℎ = 𝑥 𝑦 𝑧 −𝑧/𝑑 Catatan : d negatif karena arah pandang ke z negatif Ingat koordinat homogen : (x/h, y/h, z/h, h), maka : 𝑥 −𝑧/𝑑 𝑦 −𝑧/𝑑 𝑧 −𝑧/𝑑 1 = − 𝑑.𝑥 𝑧 − 𝑑.𝑦 𝑧 −𝑑 1
Matriks (dengan aspect ratio) Matriks = 1 𝑎𝑠𝑝𝑒𝑐𝑡_𝑟𝑎𝑡𝑖𝑜 0 0 0 0 1 0 0 0 0 1 0 0 0 −1/𝑑 0 . d = 𝑑 𝑎𝑠𝑝𝑒𝑐𝑡_𝑟𝑎𝑡𝑖𝑜 0 0 0 0 𝑑 0 0 0 0 𝑑 0 0 0 −1 0 Catatan : d negatif karena arah pandang ke z negatif Ingat koordinat homogen : (x/h, y/h, z/h, h), maka :
Matriks (dengan memperhatikan near dan far) 𝑑 𝑎𝑠𝑝𝑒𝑐𝑡_𝑟𝑎𝑡𝑖𝑜 0 0 0 0 𝑑 0 0 0 0 𝑑 0 0 0 −1 0 -> 𝑑 𝑎𝑠𝑝𝑒𝑐𝑡_𝑟𝑎𝑡𝑖𝑜 0 0 0 0 𝑑 0 0 0 0 𝐴 𝐵 0 0 −1 0 𝐴 𝐵 −1 0 . 𝑧 1 = 𝐴𝑧+𝐵 −𝑧 , ingat koordinat homogen, maka Az+B/-z = -A – (B/z) z = -Near -> -n = -1 -> -A- (B/ -n) = -1 -> -A+(B/n) = -1 z = -Far -> -f = +1 -> -A – (B / -f) = +1 -> -A+(B/f) = +1 A dan B dipilih untuk memetakan near dan far ke -1 dan +1 (unit cube)
Matriks (dengan memperhatikan near dan far) Dengan menggunakan simultaneous equation pada : -A+(B/n) = -1 dan -A+(B/f) = +1 Maka didapat bahwa : A = - (𝑓+𝑛) (𝑓−𝑛) B = −2𝑓𝑛 (𝑓−𝑛) Substitusikan A dan B ke matriks fullnya, maka hasil jadi matriks proyeksi perspective dicantumkan di slide berikut.
Matriks Proyeksi Perspektif 𝑑 𝑎𝑠𝑝𝑒𝑐𝑡_𝑟𝑎𝑡𝑖𝑜 0 0 0 0 𝑑 0 0 0 0 − (𝑓+𝑛) (𝑓−𝑛) −2𝑓𝑛 (𝑓−𝑛) 0 0 −1 0 Ingat d = cot Θ, dimana Θ adalah fovy /2, maka : cot Θ 𝑎𝑠𝑝𝑒𝑐𝑡_𝑟𝑎𝑡𝑖𝑜 0 0 0 0 cot Θ 0 0 0 0 − (𝑓+𝑛) (𝑓−𝑛) −2𝑓𝑛 (𝑓−𝑛) 0 0 −1 0
gluPerspective (OpenGL) gluPerspective (fovy, aspect_ratio, zNear > 0, zFar > 0)
Contoh Soal Tiga buah titik A(0,0,0), B(1,0,0), C(0,0,1) membentuk segitiga ABC terletak di world coordinates system (sistem koordinat dunia). Kamera : Peye(3,1,3) Koordinat referensi objek di dunia : Pref (2,1,2) Vektor up : (0,1,0) near = 0.1, far = 10 fovy = 60o aspect ratio = 2.0 a. Tentukan posisi segitiga ABC relatif terhadap sistem koordinat mata / kamera ! b. Tentukan titik hasil proyeksi perspektif dari segitiga ABC tersebut !