{"id":1036,"date":"2011-07-31T01:46:21","date_gmt":"2011-07-31T00:46:21","guid":{"rendered":"http:\/\/netrix.org.pl\/?page_id=1036"},"modified":"2024-03-15T21:39:22","modified_gmt":"2024-03-15T20:39:22","slug":"raytracer","status":"publish","type":"page","link":"http:\/\/netrix.org.pl\/index.php\/programy\/raytracer\/","title":{"rendered":"Raytracer"},"content":{"rendered":"<p>Opisywany tutaj Raytracer powstawa\u0142 jako zaliczeniowa aplikacja na laboratorium z <em>Zaawansowanej grafiki komputerowej<\/em>\u00a0oraz po cz\u0119\u015bci z <em>Rozproszonych System\u00f3w Informatycznych<\/em>. Aplikacja implementuje podstawowe algorytmy takie jak:<\/p>\n<ul>\n<li>przeci\u0119cie promienia z tr\u00f3jk\u0105tem (w oparciu o wsp\u00f3\u0142rz\u0119dne barycentryczne)<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/K-d_tree\">kd-tree<\/a> (znaczna optymalizacja wyszukiwania tr\u00f3jk\u0105t\u00f3w) + podzia\u0142 jednorodny (zamiennie po przekompilowaniu)<\/li>\n<li>model o\u015bwietlenia, cienie, odbicie i refrakcja<\/li>\n<\/ul>\n<p>Opr\u00f3cz tego wa\u017cnymi cechami aplikacji, s\u0105:<\/p>\n<ul>\n<li>generowanie tekstury proceduralnej \u2013 ceg\u0142a (napisane wsp\u00f3lnie z Adamem Jordankiem)<\/li>\n<li>obliczenia w oparciu o model klient\/serwer (wykorzystuj\u0105c sockety)<\/li>\n<li>multiplatformowo\u015b\u0107 (kompilacja zar\u00f3wno msvc jak i gcc na platformach Windows i Linux)<\/li>\n<\/ul>\n<p>Aplikacj\u0119 udost\u0119pniam wraz z kodem (na licencji <em><a href=\"http:\/\/pl.wikipedia.org\/wiki\/GNU_General_Public_License\">GNU GPL<\/a><\/em>), gdzie opr\u00f3cz samego Raytracera znajduje si\u0119 fragment starszej wersji wykorzystywanej przeze mnie biblioteki <em>NLib<\/em>, kt\u00f3ra zawiera w sobie podstawowe kontenery, logger oraz funkcje matematyczne. Opr\u00f3cz tego na potrzeby aplikacji napisa\u0142em kilka klas uproszczaj\u0105cych korzystanie z socket\u00f3w i parsowanie polece\u0144 z linii komend.<\/p>\n<p>Program dzia\u0142a zar\u00f3wno w systemie Windows jak i Linux. Podstawowym parametrem jest tutaj nazwa sceny, kt\u00f3rych list\u0119 mo\u017cna znale\u017a\u0107 w pliku <em>ReadMe<\/em> do\u0142\u0105czonym do aplikacji. Pozosta\u0142e s\u0142u\u017c\u0105 zmianie ustawie\u0144 sceny, \u00a0kamery, pliku wyj\u015bciowego czy parametr\u00f3w ceg\u0142y. Wyj\u015bciem aplikacji jest plik w formacie <em>.bmp<\/em>.<\/p>\n<p><a href=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1039\" style=\"margin: 5px;\" title=\"night_v3\" src=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3-300x225.png 300w, http:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3.png 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/kuchnia_v2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1040\" style=\"margin: 5px;\" title=\"kuchnia_v2\" src=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/kuchnia_v2-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/kuchnia_v2-300x225.png 300w, http:\/\/netrix.org.pl\/wp-content\/2011\/07\/kuchnia_v2.png 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1041\" style=\"margin: 5px;\" title=\"room_vn_tex\" src=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex-300x225.png 300w, http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex-1024x768.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><a href=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex_dirt.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1044\" style=\"margin: 5px;\" title=\"room_vn_tex_dirt\" src=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex_dirt-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex_dirt-300x225.png 300w, http:\/\/netrix.org.pl\/wp-content\/2011\/07\/room_vn_tex_dirt-1024x768.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Aplikacj\u0119 mo\u017cna pobra\u0107 <strong><a href=\"http:\/\/netrix.org.pl\/content\/blog\/Raytracer.7z\">tutaj<\/a><\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Opisywany tutaj Raytracer powstawa\u0142 jako zaliczeniowa aplikacja na laboratorium z Zaawansowanej grafiki komputerowej\u00a0oraz po cz\u0119\u015bci z Rozproszonych System\u00f3w Informatycznych. Aplikacja implementuje podstawowe algorytmy takie jak: przeci\u0119cie promienia z tr\u00f3jk\u0105tem (w oparciu o wsp\u00f3\u0142rz\u0119dne barycentryczne) kd-tree (znaczna optymalizacja wyszukiwania tr\u00f3jk\u0105t\u00f3w) + podzia\u0142 jednorodny (zamiennie po przekompilowaniu) model o\u015bwietlenia, cienie, odbicie i refrakcja Opr\u00f3cz tego wa\u017cnymi cechami [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":15,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/pages\/1036"}],"collection":[{"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1036"}],"version-history":[{"count":8,"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/pages\/1036\/revisions"}],"predecessor-version":[{"id":1049,"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/pages\/1036\/revisions\/1049"}],"up":[{"embeddable":true,"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/pages\/15"}],"wp:attachment":[{"href":"http:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}