Hlavní navigace

Názor k článku Mandelbrotovy a Juliovy množiny ve čtyřrozměrném prostoru od Pavel Tišnovský - Raytracery pracuji s popisem sceny zalozene na (ted...

  • Článek je starý, nové názory již nelze přidávat.
  • 19. 1. 2007 9:38

    Pavel Tišnovský
    Zlatý podporovatel
    Raytracery pracuji s popisem sceny zalozene na (ted trosku zjednodusim) implicitnich plochach. Kupodivu prave s trojuhelniky a meshemi obecne maji docela problemy. Zkusim popsat raytracing na renderingu koule, ale plati to pro prakticky vsechny dalsi objekty, s kterymi POVRay pracuje.

    Vsechny body lezici na povrchu koule splnuji rovnici:

    (x-x0)^2+(y-y0)^2+(z-z0)^2-r^2=0

    Kde [x0, y0, z0] je souradnice stredu koule a "r" je jeji polomer.

    Raytracer pracuje tak, ze kazdym pixelem vypocitavane pixmapy (nepocitam antialiasing) vrha jeden paprsek do sceny a testuje, zda tento paprsek neprotl nejaky objekt. Pokud ano, vezme se nejblizsi prusecik, vypocte se odrazovy paprsek a rekurzivne se pokracuje dale. Vypocet pruseciku: paprsek splnuje rovnice:

    x=xp+sx*t
    y=yp+sy*t
    z=zp+sz*t

    kde (sx, sy, sz) je 3D smernice, [xp, yp, zp] posun paprsku od pocatku (timto bodem paprsek prochazi) a "t" je hledany parametr. Pokud tyto rovnice dosadime do rovnice koule (kde jsou nezname x,y,z), muzeme vypocitat "t".

    Konkretne u koule vede vypocet k vyjadreni korenu kvadraticke rovnice, takze mohou vyjit dve hodnoty - to je logicke, paprsek muze kouli protnout na dvou mistech. Pokud vyjde determinant zaporny (v realnem prostoru vysledek neexistuje), paprsek kouli neprotina. Zpetnym dosazenim do rovnice paprsku ziskame souradnice pruseciku. Soucasne muzeme vypocitat normalu v tomto miste, opet s vyuzitim vztahu pro body lezici na kouli. Normala je pouzita pro vypocet svetelnych pomeru a take smeru odrazeneho paprsku.

    Podobne to funguje i u 4D fraktalu, ovsem s tim rozdilem, ze nejde primo napsat rovnici platnou pro vsechny body lezici na povrchu. Vyuziva se tam numericky vypocet pruseciku, coz je trosku slozitejsi (hlavne vypocet normal), ale mesh se tam nevytvari.