{"id":1032,"date":"2011-07-30T22:07:03","date_gmt":"2011-07-30T21:07:03","guid":{"rendered":"http:\/\/netrix.org.pl\/?p=1032"},"modified":"2011-07-31T02:23:15","modified_gmt":"2011-07-31T01:23:15","slug":"raytracer","status":"publish","type":"post","link":"https:\/\/netrix.org.pl\/index.php\/2011\/07\/30\/raytracer\/","title":{"rendered":"Raytracer"},"content":{"rendered":"<p>Jak zwykle po d\u0142ugiej nieobecno\u015bci w ko\u0144cu pojawia si\u0119 kolejna notka. Tym razem chcia\u0142bym zaprezentowa\u0107 Raytracer, kt\u00f3ry napisa\u0142em w ramach laboratorium z <em>Zaawansowanej grafiki komputerowej<\/em>. Program opr\u00f3cz standardowego \u015bledzenia promieni potrafi r\u00f3wnie\u017c generowa\u0107 tekstur\u0119 proceduraln\u0105 ceg\u0142y dla podanego atrybutu (t\u0119 cz\u0119\u015b\u0107 napisa\u0142em z koleg\u0105 Adamem Jordankiem) oraz prowadzi\u0107 obliczenia na wielu komputerach wykorzystuj\u0105c model klient-serwer.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1039 alignright\" style=\"margin: 10px;\" title=\"night_v3\" src=\"http:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3-300x225.png 300w, https:\/\/netrix.org.pl\/wp-content\/2011\/07\/night_v3.png 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Aplikacja do renderowania grafiki wykorzystuje mi\u0119dzy innymi moj\u0105 w\u0142asn\u0105 biblioteczk\u0119 matematyczn\u0105, proste kontenery, a opr\u00f3cz tego &#8211; do obs\u0142ugi klienta i serwera &#8211; \u00a0sockety i w\u0105tki (w zale\u017cno\u015bci od systemu ich odpowiednie implementacje). \u00a0Implementacja Raytracera wykorzystuje algorytm przeci\u0119cia promienia z tr\u00f3jk\u0105tem oraz implementacj\u0119 kd-tree znalezion\u0105 na <a href=\"http:\/\/www.devmaster.net\/articles\/raytracing_series\/part1.php\">tej<\/a> stronie, kt\u00f3re wed\u0142ug mojego przekonania s\u0105 na tyle wydajne i stabilne, \u017ce nie by\u0142o sensu tego modyfikowa\u0107. Wykorzystywany model o\u015bwietlenia jest efektem pr\u00f3b i b\u0142\u0119d\u00f3w, ale my\u015bl\u0119 \u017ce wygl\u0105da ca\u0142kiem zno\u015bnie. Zaimplementowane s\u0105 wszystkie podstawowe elementy takie jak cienie, odbicia czy refrakcja.<\/p>\n<p>Z ciekawszych rzeczy, kt\u00f3re mo\u017cna znale\u017a\u0107 w kodzie to:<\/p>\n<ul>\n<li>obs\u0142uga linii polece\u0144, kt\u00f3ra opiera si\u0119 przede wszystkim na li\u015bcie polece\u0144, gdzie ka\u017cde polecenie zawiera nazw\u0119 i opis parametru oraz wska\u017anik do funkcji, kt\u00f3ra implementuje jego obs\u0142ug\u0119.<\/li>\n<li>implementacja klienta i serwera w oparciu o stany oraz przydzia\u0142 zada\u0144 do poszczeg\u00f3lnych klient\u00f3w<\/li>\n<li>wczytywanie plik\u00f3w oparte o stany (\u0142atwo\u015b\u0107 dodawania nowych element\u00f3w)<\/li>\n<\/ul>\n<p>Wi\u0119cej informacji i paczk\u0119 mo\u017cna znale\u017a\u0107\u00a0<strong><a href=\"http:\/\/netrix.org.pl\/index.php\/programy\/raytracer\/\">tutaj<\/a><\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak zwykle po d\u0142ugiej nieobecno\u015bci w ko\u0144cu pojawia si\u0119 kolejna notka. Tym razem chcia\u0142bym zaprezentowa\u0107 Raytracer, kt\u00f3ry napisa\u0142em w ramach laboratorium z Zaawansowanej grafiki komputerowej. Program opr\u00f3cz standardowego \u015bledzenia promieni potrafi r\u00f3wnie\u017c generowa\u0107 tekstur\u0119 proceduraln\u0105 ceg\u0142y dla podanego atrybutu (t\u0119 cz\u0119\u015b\u0107 napisa\u0142em z koleg\u0105 Adamem Jordankiem) oraz prowadzi\u0107 obliczenia na wielu komputerach wykorzystuj\u0105c model klient-serwer. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47],"tags":[179,162,181,161,163,131,116],"_links":{"self":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/1032"}],"collection":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1032"}],"version-history":[{"count":11,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/1032\/revisions"}],"predecessor-version":[{"id":1060,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/1032\/revisions\/1060"}],"wp:attachment":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}