Proyeksi
Proyeksi didefinisikan sebagai proses mengubah titik dalam sebuah koordinat. Sebuah n-dimensi menjadi sistem koordinat lain dalam n-dimensi lebih kecil. Contoh: Sistem koordinat 3dimensi diubah menjadi sistem koordinat 2dimensi. Objek yang diproyeksikan ditentukan dengan menghitung perpotongan garis proyeksi dengan bidang pandang
Terdapat dua cara mealkukan proyeksi : Proyeksi Paralel :Semua garis paralel akan tampak paralel pada bidang proyeksi Proyeksi Perspektif : Seuma garis paralel akan menghilang di titik pusat proyeksi Posisi koordinat ditransformasi ke bidang pandang sejalan dengan garis sejajar/paralel Posisi objek ditransformasikan ke bidang pandang sejalan dengan garis-garis yang bertemu di sebuah titik, yang disebut projection reference point (prp)
Proyeksi Paralel Terdapat dua macam proyeksi paralel : Proyeksi Orthographic : proyeksi dengan mata tegak lurus tehadap bidang proyeksi Proyeksi Oblique : proyeksi dengan mata berada di lokasi yang tidak tegak lurus terhadap bidang proyeksi
Proyeksi Paralel Jika Xp dan Yp adalah koordinat pada proyeksi, Garis proyeksi dinyatan dengan L Garis proyeksi dari (x,y,z) ke (Xp,Yp) membentuk sudut α dengan garis pada bidang proyeksi. Φ adalah sudut yang terbentuk dari garis proyeksi dengan arah horisontal pada bidang proyeksi Titik P(x,y,z) pada objek 3D diproyeksikan ke titik(Xp,Yp) pada bidang 2Dimensi Xp = X + L cos Φ Yp = Y + L sin Φ Diamana : tan α = z/L L = z/tan α L1 = 1/tab α L = z* L1 Mka : Xp= X+(z* L1) cos Φ Yp = X+(z* L1) sin Φ
Proyeksi Paralel Xp = x Yp = y Zp=0
Proyeksi Perspektif
Proyeksi Perspektif 1. Proyeksi titik pada bidang pandang, dapat dihitung dengan :
Contoh Proyeksi titik pada bidang pandang Jika diketahui titik A = (0, −1, − 6/√2) B = (1/√2, −1, −5/√2) C = (−1/√2, −1, −5/√2) dan nilai d = − 0.1 Hasil proyeksi titik A’ adalah titik A’(0, −√2/60) = A’(0, −0,0236) Hasil proyeksi titik B’ adalah titik B’(1/50, −√2/50) = B’(0,0067 , − 0,0283) Hasil proyeksi titik C’ adalah titik C’(−1/50, −√2/50) = C’(−0,0067, − 0,0283)
Proyeksi Perspektif 2. Pusat proyeksi berada di sumbu z positif dan bidang pandang terletak pada bidang x-y
Proyeksi Perspektif 3. Pusat proyeksi di titi asal koordinat dan bidang pandang tidak terletak pada bidang x-y
Visible Surface Detection
Visible Surface determination (VSD) atau disebut juga dengan Hidden Surface Removal (HSR) merupakan suatu cara untuk menentukan garis atau permukaan yang terlihat pada suatu objeck 3D dan spesifikasi pandangan (kamera). Terdapat 3 pendekatan utama pada permukaan terlihat, yaitu: 1. Tes penampakan konservatif (conservative surface test) hanya sebatas trivial reject saja, yang tidak memberikan jawaban, contohnya back-free culling. Untuk mendapat penyelesaiannya harus dilakukan dengan pendekatan yang lain. 2. Ketelitian gambar (image-precission) bagian yang erlihat ditentukan dengan point-point pada setiap posisis pixelnya pada bidang proyeksi. Contohnya pada raytracing, atau Z-buffer 3. Ketelitian objek (object-precission) menentukan bagian mana yang terlihat dengan membandingkan objek dan bagian-bagiannya dalam layar . COntohnya pada poly clipping, BSP trees,dll
Terdapat beberapa cara atau metode untuk mendeteksi suatu permukaan yang terlihat ini, yaitu: Painter’s Algorithm Z-Buffering Back Space Detection Ray Casting
Painter’s Algorithm Masalah
Langkah-Langkah Z-Buffering Pertama-tama, semua posisi pada depth buffer di-set 0 (kedalaman minimum), dan refresh buffer di-set pada intensitas background. Tiap permukaan pada polygon diproses, menghitung kedalaman (nilai z) pada tiap posisi pixel (x,y). Nilai z hasil perhitungan dibandingkan dengan nilai yang disimpan sebelumnya pada posisi (x,y) yang sama. Jika nilai z hasil perhitungan lebih besar maka simpan nilai z yang baru, dan nilai intensitas permukaan ditentukan di refresh buffer
Langkah-Langkah Z-Buffering Inisialisasi depth buffer dan refresh buffer untuk posisi (x,y) Depth (x,y) = 0, refresh(x,y) = Ibackgnd Untuk tiap posisi pada setiap permukaan polygon, bandingkan nilai kedalaman dengan nilai kedalaman sebelumnya yang tersimpan di depth buffer Hitung kedalaman z untuk tiap posisi (x,y) pada polygon jika z > depth(x, y), maka set : depth(x,y) = z, refresh(x,y) = Isurface(x,y) Ibackgnd = nilai intensitas background Isurface = nilai intensitas permukaan pada posisi pixel (x,y)
Z-Buffering Kelebihan Kekurangan Waktu yang diperlukan meningkat linier terhadap jumlah polygon Dapat merender scene yang kompleks dengan benar Mudah diimplementasikan Kekurangan Butuh banyak memori Cukup lambat
Back Face Detection Pada objek solid, ada permukaan yang menghadap ke penonton dan ada yang berlawanan dengan penonton (front faces) (back faces). Misal : sumbu z menunjuk ke penonton. Jika komponen z dari vektor adalah negatif maka back face, jika positif maka front face
Back Face Detection Permukaan polygon (A,B,C,D adalah parameter bidang permukaan polygon) f(x,y,z) = Ax + By + Cz + D Vektor normal N dari permukaan : N(A,B,C)
Back Face Detection Sebuah titik (x,y,z) berada dibelakang permukaan polygon bila Ax + By + Cz + D < 0 Titik pandang (kamera) : Vview(xv,yv,zv) Permukaan polygon di belakang titik pandang (tidak nampak) jika : N . Vview > 0 Arah pandang adalah sumbu z negatif Vview = ( 0,0, −1) Permukaan polygon berada di belakang jika: (A,B,C) .(0,0,−1) > 0, − C > 0 Atau C ≤ 0
Back Face Detection Contoh 1 : Permukaan normal segitiga N(0.5 , 0.8 , 0.1) menuju keluar permukaan depan segitiga Sebuah verteks pada segitiga adalah (3,2,2) dan kamera (1,8,0). Apakah permukaan depan dari segitiga tersebut terletak dibelakang atau didepan kamera? Atau apakah kamera bisa melihat bagian permukaan depan dari segitiga tersebut ?
Back Face Detection Vview adalah vektor dari kamera ke verteks segitiga, yaitu: Vview = (3,2,2) – (1,8,0) = (2, –6,2) N . Vview = (0,5 , 0,8 , 0,1) . (2, –6,2) = (0,5). (2) + (0,8).(–6) + (0,1).(2) = – 3,6 Hasil N . Vview negatif maka bisa dilihat
Back Face Detection Contoh 2 : Kamera berada di posisi (2,1,5). Sebuah bidang mempunyai persamaan 5x + 3y – 2z + 12 = 0. Apakah bidang tersebut berada dibelakang atau didepan kamera? Jawab : 5(2) + 3(1) – 2(5) + 12 = 15 > 0 Karena itu, bidang berada di depan kamera.
Ray Casting Jika kita memancarkan sebuah garis lurus dari sebuah posisi pixel pada bidang pandang, kita dapat menentukan objek apa yang berpotongan dengan garis tersebut. Setelah menghitung semua titik perpotongan, kita mengidentifikasi bahwa permukaan yang dapat dilihat adalah yang mempunyai titik perpotongan terdekat
Ray Casting Jika kita memancarkan sebuah garis lurus dari sebuah posisi pixel pada bidang pandang, kita dapat menentukan objek apa yang berpotongan dengan garis tersebut. Setelah menghitung semua titik perpotongan, kita mengidentifikasi bahwa permukaan yang dapat dilihat adalah yang mempunyai titik perpotongan terdekat
Terimakasih