Ahoj :)
mám problém se stíny u ray tracingu.
Po vykreslení scény se mi to zobrazuje nějak podivně..
Nevím, čím to může být :/ Zkoušel jsem posunout počátek paprsku, aby se to netestovalo s počátečním trianglem, ale nepomohlo.
Proto přikládám obrázek + krátký zdroják mého výpočtu.
Nevěděl by si s tím někdo rady? Já vůbec nevím.. :( Děkuju :)
normal - bez stínů:
se stíny:
Krátký zdroják:
// Vytvorim si paprsek smerem ke svetlu
// P - vektor, ktery reprezentuje kolizni bod - POCATEK
// L - vektor, ktery reprezentuje pozici svetla - SMEROVY VEKTOR
//
L.Normalize();
Ray shadowRay(P, L);
// Paprsek posunu, aby se netestoval sam se sebou
shadowRay.origin = shadowRay.origin * Vector3(SMALL_NUM, SMALL_NUM, SMALL_NUM);
// Udelam test pruseciku, pokud je ve smeru nejaky triangl
pBVH->Intersect(renderContext, shadowRay);
// Ziskam vzdalenost mezi pozici kolize a pozici svetla
//TYPE_REAL distanceLight = (pLight->position - P).L2Norm();
//TYPE_REAL nDotL = N.DotProduct(L);
// Pokud je ve stinu, vlezu si do ifu
if (shadowRay.is_hit() == true && shadowRay.t < distanceLight)
{
colorPhong = Vector3(0, 0, 0);
colorPhong += shadowRay.target->surface()->get_material()->ambient * pLight->ambient;
colorPhong += pLight->ambient;
if (colorPhong.x > 1 || colorPhong.y > 1 || colorPhong.z > 1)
{
assert(false);
}
if (pMaterial->get_texture(0) != NULL)
{ colorPhong.x *= pMaterial->get_texture(0)->get_texel(texcoord.x, texcoord.y).r; colorPhong.y *= pMaterial->get_texture(0)->get_texel(texcoord.x, texcoord.y).g;
colorPhong.z *= pMaterial->get_texture(0)->get_texel(texcoord.x, texcoord.y).b;
}
}