Intersezioni e distanze Daniele Marini 1 Perchè • Il calcolo delle intersezioni di rette con oggetti e di distanze è assai frequente, occorre trovare soluzioni efficienti • Si usano equazioni parametriche per rappresentare rette e volumi di contenimento (BV) per accelerare il calcolo 2 Definizioni utili • Raggio r(t) semiretta dotata di origine e direzione (solitamente la direzione è normalizzata) • Superfici: implicite e esplicite – implicite: f(p)=0 - es sfera: x2+y2+z2-r2=0 • dato il punto p si valuta se appartiene alla superficie trovando gli zeri dell’equazione – esplicite: f(u,v)=(fx(u,v),fy(u,v),fz(u,v)) • es sfera: f(,)=((r sin cos), (r sin sin), (r cos)) 3 Rette • Dato un punto p =(x0,y0,z0) per cui passa la retta, la sua forma parametrica è: r(t)=p+td dove d è la direzione (vettore normalizzato) e t il parametro, per t>0 abbiamo una semiretta (tipicamente il raggio) rx x 0 ti • Le componenti sono: ry y 0 tj rz z 0 tk t , 4 Bounding volume • Si definiscono tre tipi di bounding volumes: AABB, OBB, k-DOP • AABB: axis aligned bounding box, un parallelepipedo con le facce parallele ai piani coordinati, si definisce con due valori estremi amin , amax amin amax 5 • OBB: oriented bounding box è un AABB ruotato rispetto agli assi principali, si può definire con un centro e tre vettori normalizzati che descrivono le direzioni dei lati • k-DOP: discrete oriented polytope, definito da k/2 vettori normalizzati con associati due valori scalari per definire una porzione di piano; in pratica definiscono un poliedro 6 Bounding sphere • Si utilizza anche la sfera come volume di contenimento • Lo studio delle intersezioni con i BV è essenziale per l’efficienza 7 Intersecare rette • Usato in ray tracing / ray casting • Usato per calcolare collisioni • Il raggio è una semiretta, con direzione data, e un punto di applicazione – la retta è specificata con coseni direttori e un punto da cui passa 8 • La distanza di un punto q dalla retta r che passa per p si ottiene proiettando q su r e valutando la norma: w ((q p).d) d (q p) w q (q-p)-w q-p w d p r 9 Intersezione con una sfera • Caso più semplice di BV è la sfera • Raggio in forma parametrica (vettore): x x 1 (x 2 x 1 )t x 1 it y y 1 (y 2 y 1 )t y 1 jt z z1 (z2 z1 )t z1 kt t 0,1 • Sfera con centro in (l,m,n) e raggio r: (x l) 2 (y m) 2 (z n) 2 r 2 10 (x2,y2,z2) t>1 (x1,y1,z1) 0<t<1 t<0 • Sostituendo nell’equazione della sfera x,y,z (vediamo solo x): (x l) 2 x 2 l 2 2lx (x1 it) 2 l 2 2lx1 2lit i 2 t 2 2i(x1 l)t (x12 l 2 2lx1) 11 • la forma quadratica generale è quindi: at 2 bt c 0 con : a i2 j 2 k 2 b 2i(x1 l) 2i(y1 m) 2i(z1 n) c l 2 m 2 n 2 x12 y12 z12 2(lx1 ny1 mz1 ) r 2 • da risolvere come equazione di II grado; se il determinate è <0 non ci sono intersezioni, se =0 il vettore è tangente, se >0 due intersezioni, e le radici t1,t2 danno il punto di entrata e di uscita del raggio • i,j,k sono le differenze (x2-x1) ecc. non sono 12 coseni direttori ! • si ricava anche la normale alla sfera nel punto di intersezione (tangenza): x1 l y1 m z1 n n , , r r r 13 • per accelerare il calcolo si valuta prima il test di rifiuto rejection test • le intersezioni “dietro” non interessano • si valuta il vettore origine_raggio - centro_sfera, se ne calcola il modulo c2, se < r2 l’origine è interna alla sfera – il raggio interseca certamente, se ci interessa solo questo si termina (es: picking) altrimenti si procede) • si calcola la proiezione del vettore sul raggio, se <0 e se l’origine è esterna allora la sfera è dietro al raggio e si termina • altrimenti si calcola la distanza al quadrato dal centro sfera alla proiezione del vettore sul raggio m2 se > r2 il raggio non colpisce la sfera altrimenti si calcola l’intersezione 14 Rejection test 15 Intersezione raggio triangolo (poligono) • 3 passi: – determinare il piano su cui giace il triangolo – determinare l’intersezione piano-raggio – valutare se l’intersezione e’ interna al triangolo (poligono) • usata anche per clipping, i raggi in questo caso sono i bordi del poligono e il piano è uno dei piani del frustum di visione; trovate tutte le intersezioni si genera un nuovo poligono 16 Intersezione raggio triangolo 17 Determinare il piano • equazione del piano: Ax+By+Cz+D=0 • A,B,C sono le componenti della normale al piano • il prodotto vettore tra due vettori identifica la normale • dati due lati V, W del triangolo calcoliamo la normale: n v w (v2w3 v3w2 )i (v1w1 v1w3 )j (v1w2 v2w1)k • dove i,j,k sono i versori, quindi A,B,C sono: A v 2 w 3 v 3 w 2 B v 3 w1 v1w 3 C v1w 2 v 2 w1 • D si ottiene sostituendo un vertice del poligono nell’equazione (un punto che giace nel piano) 18 Intersezione raggio / piano • si sostituisce x,y,z dalla equazione parametrica del piano: Ax Ait By Bjt Cz Ckt D 0 1 1 1 Ax1 By1 Cz1 t(Ai Bj Ck) D 0 Ax1 By1 Cz1 D t (Ai Bj Ck) • se t<0 il raggio è nel semispazio che non contiene il poligono • se il denominatore = 0 raggio e piano sono paralleli; per verificare se il raggio è nel semispazio che non contiene il poligono basta testare il segno del numeratore: se > 0 è esterno 19 Casi negativi • raggio esterno al semispazio che contiene il poligono: t<0 • raggio parallelo al piano del poligono: denominatore = 0 – nel semispazio esterno al poligono: numeratore >0 raggio esterno esterno interno interno 20 Test di appartenenza del punto • nei casi “positivi” si verifica se l’intersezione col piano cade nel poligono (triangolo) • metodo diretto: se è interno la somma degli angoli dal punto ai vertici è 360° 21 • Il metodo diretto è costoso, se il punto è su un bordo dà errore, non si può valutare se il poligono è orientato “back face” rispetto alla direzione del raggio (può interessare solo la prima intersezione con un poliedro) 22 Intersezione con OBB • si considerano a turno coppie di piani paralleli determinando tnear e tfar • si conserva nel confronto tnear maggiore e tfar minore • se il massimo tnear è maggiore del minimo tfar non c’è intersezione 23 tnear tfar tnear tfar tnear tnear tfar tfar 24