Napisano: 18 Apr 2012 21:26
Veoma sam slab sa trigonometrijom a treba mi pomoc sa ovim problemom.
Da bih ustedeo broj pixela koji se procesuiraju na ekranu, prvo crtam "volumene", geometrijske oblike koji enkompasuju prostor koji afektuju svetla. Da bih to uradio kako treba treba u zavisnosti od toga da li se kamera pozicije nalazi ili ne u tom volumenu da switch-ujem "kuliranje lica" tog geometrijskog tela (CW/CCW). Za point (omni) svetla sam to lako resio jer su volumeni bili sfere (lopte), pseudo:
if(distance(light.pos, camera.pos) > light.radius)
draw_volume( CCW );
else
draw_volume( CW );
Ali ne znam kako sa "koonama"?
Trazio sam googl-om ali nisam nasao konkretno resenje.
Hvala na izdvojenom vremenu.
EDIT: Kona, ne znam kako se zove na srpskom (kornet? ) pa postavljam sliku:
Dopuna: 21 Apr 2012 12:25
Reseno. Dobio sam pomoc na drugom forumu.
Mozda ce nekog interesovati pa cu postaviti resenje:
// sp_light je shared_ptr
bool camInSpotlight(const sp_light& light, const D3DXVECTOR3& pos)
{
D3DXVECTOR3 toCamera = pos - light->getPosition();
float dist = D3DXVec3Length(&toCamera);
if(dist > light->getRadius())
{
return false;
}
toCamera /= dist;
float cosAngle = D3DXVec3Dot(&toCamera, &light->getDirection());
if(cosAngle < light->getOutCone())
{
return false;
}
return true;
}
|