Izgradio sam BSP Tree gde svaki node ima svoj bounding box i pomocu Frustuma odredjujem koji su Box-ovi u trenutku vidljivi.
Svaki box sadrzi odredjen broj trouglova koji bi trebali da se renderuju. Da bih svakom Box-u dodelio pripadajuci broj trouglova ( onih koji se seku sa Box-om ) pokusao sam da iskoristim algoritam za intersekciju Triangle-Box ( Moller - Graphics Gems III). Algoritam kaze da se uporedjivanje vrsi izmedju trougla i Box-a koji je predstavljen jedinicnim ortogonalnim vektorima ( trougao je u world koordinatnom sistemu, box je na origin-u sa jedinicnim duzinama stranica ). Nije problem da napravim da mi svaki Box bude sa istim width, height i length ( u smislu ako je duzina terena veca od sirine, opet cu nekako moci da ga popunim kockama identicnih stranica ) ali da te velicine budu 1 nikako ne odgovara mom ( pa i bilo cijem :) ) algoritmu.
Da li ovo znaci da cu morati, posto sam odredio da sirina, visina i duzina svakog box-a budu npr. po 5 jedinica, da skaliram trougao koji uporedjujem sa ovim boxom ( da podelim svaku komponentu svake tacke trougla sa 5 ) da bih mogao da iskoristim ovaj algoritam?
Jos jedan problem je u tome sto funkcija ( Moller ) prihvata samo trougao kao parametar. Da li to znaci da cu morati box da dovedem u origin koordinatnog sistema, tj. da sve tri tacke trougla transliram inverzno za vrednost udaljenosti box-a od origina?
Primer:
Funkcija prihvata samo koordinate tacaka trougla: TriMoller( Triangle )
Box: center = (1, 2, 3), nonUnitSize = width = length = height = 5;
Triangle: p1, p2, p3
1. prvo izvrsimo translaciju trougla inverzno poziciji centra box-a
p1' = p1 - center;
p2' = p2 - center;
p3' = p3 - center;
2. Izvrsimo skaliranje novodobijenih tacaka tako sto svaku tacku delimo sa nonUnitSize
p1'' = p1'/nonUnitSize ( naravno, ovde se svaka komponenta (x, y, z) deli sa nonUnitSize )
p2'' = p2'/nonUnitSize
p3'' = p3'/nonUnitSize
triangle(p1'', p2'', p3'')
TriMoller( triangle )
Nadam se da sam bio jasan onim ljudima koji su se sreli sa ovim problemom i videli ovu funkciju.
Mozda sam cak i sam sebi odgovorio na pitanje ali, ovo je malo slozeniji algoritam ( jedva cekam da proradi :) ) tako da mi je bilo kakva pomoc dobro dosla :)