Vlákno názorů k článku Mandelbrotovy a Juliovy množiny ve čtyřrozměrném prostoru od Chuta - Na vytvareni 4D Julii je nejlepsi POVRay, ale...

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

    Chuta (neregistrovaný)
    Na vytvareni 4D Julii je nejlepsi POVRay, ale neni prilis uzivatelsky privetivy. Ja bych potreboval nejak exportovat mesh vypocitaneho fraktalu, aby se dal otevrit v nejakem rozumnem 3d programu.. 3d studio, cinema4d... neznate nejaky zpusob?
  • 18. 1. 2007 11:42

    Pavel Tisnovsky (neregistrovaný)
    To POVRay nedokaze, provadi pouze raytracing, ne meshovani. Mozna by mohl trosku pomoci zminovany Quat, ten dokaze pracovat alespon se Z-bufferem, takze jdou ziskat vzdalenosti jednotlivych bodu od roviny obrazovky.

    Pokud dokaze cinema4d pracovat s voxely (posledni verze uz neznam), tak by sel udelat jednoduchy program, ktery by 4D fraktaly (resp. jejich 3D obrazy) rastroval do voxeloveho prostoru. Takovy program si ukazeme, ale nevim, jestli nejaka rozumna aplikace muze s voxely pracovat - treba jestli pomoci Marching cubes/Marching tetrahedra provadi omeshovani voxelu.
  • 18. 1. 2007 13:56

    Chuta (neregistrovaný)
    Takovy program jsem si udelal, ze voxelove vygeneruje 3D Julii... a i pokud cinema nema marching cubes, tak ten algoritmus je pomerne jednoduchy na naprogramovani... ja jen myslel, ze by to proste slo nejak jednoduse obejit pres export z povraye. Ale jestli se tedy muzu jeste zeptat - jak vlastne povray provadi raytracing? ten mesh musi prece mit, ne?
  • 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.