Ray Tracing: Pridávanie objektov

V článku pre objekty sme si ukázali ako vytvoriť jednoduchý objekt gule. V tejto časti bude popísaný spôsob pridávania objektov do našej scény. Aj naďalej sa bude jednať len o jednoduché objekty gule.

V zásade len rozšírime a prepíšeme niektoré pôvodné časti programu. Za týmto účelom vytvoríme abstraktnú triedu, ktorá bude nahradzovať pôvodný výpočet priesečníkov v zmysle zásahov:

Jediná zásadná zmena oproti pôvodnej verzii je v rozsahu parametra t, ktorý budeme definovať v nejakom minime a maxime tejto hodnoty. Táto skutočnosť nám bude zabezpečovať počítanie parametra len pre validné hodnoty, čo nám v konečnom dôsledku zvýši rýchlosť samotného výpočtu. Zároveň tento parameter bude slúžiť aj pri vykresľovaní materiálov, teda špecifických vlastností objektu.

Predtým než začneme s implemetnáciou ostatných častí, zadefinujeme si zoznam konštánt, ktorý budeme používať v celom programe:

Jedná sa o konštantu Ludolfovho čísla PI a vymedzenie maximálnej hodnoty pre reálny dátový typ float.

Následne si vytvoríme zoznam takýchto priesečníkových zásahov:

Takto vytvorenú abstraktnú triedu budeme dediť od objektu gule, ktorý si vytvoríme osobitne:

Zoznam jednotlivých objektov môžme pridávať do zoznamu Hitable nasledovným spôsobom:

Prvý objekt gule je pôvodný z predchádzajúcich častí, kým druhý objekt reprezentuje simuláciu podložky na ktorej je položený prvý objekt, teda druhý objekt sme definovali s mnohonásobne veľkým polomerom, čím zabezpečíme dojem rovinnej plochy v relativistickom ponímaní.

Funkcia color() už nebude počítať normálový vektor pre jednotlivý objekt, ale táto funkcionalita bude nahradená výpočtom pre celkovú scénu zoznamom objektov:

Samotné vykresľovanie ostane v pôvodnom stave, jedinou zmenou je rozšírenie funkcie color() o pridávanie objektov:

Výsledok bude vyzerať nasledovne pre výpočet v jednom smere:

koulaGG

Alebo pre všetky smery (úpravou Vector3(rec.normal.x() + 1, rec.normal.y() + 1, rec.normal.z() + 1)):

koulaGR

Takýmto spôsobom budeme môcť pridávať objekty do našej scény. V budúcnosti to použijeme, okrem iného, na porovnanie objektov gule s rôznym typom materiálov ako špecifických vlastností objektu.

You may also like...