{"id":73,"date":"2009-02-08T04:49:48","date_gmt":"2009-02-08T03:49:48","guid":{"rendered":"http:\/\/netrix.org.pl\/index.php\/2009\/02\/08\/programowania-ciag-dalszy\/"},"modified":"2009-12-11T23:25:15","modified_gmt":"2009-12-11T22:25:15","slug":"programowania-ciag-dalszy","status":"publish","type":"post","link":"https:\/\/netrix.org.pl\/index.php\/2009\/02\/08\/programowania-ciag-dalszy\/","title":{"rendered":"Programowania ci\u0105g dalszy"},"content":{"rendered":"<p>Min\u0119\u0142o troch\u0119 czasu od mojej ostatniej notki, ale co poradzi\u0107, studia s\u0105 troch\u0119 wymagaj\u0105ce, wi\u0119c trzeba si\u0119 czasem pouczy\u0107, zw\u0142aszcza, \u017ce jest to stycze\u0144 czyli ostatni miesi\u0105c przed sesj\u0105. W momencie, gdy pisz\u0119 t\u0119 notk\u0119, up\u0142ywa w\u0142a\u015bnie pierwszy tydzie\u0144 tej najbardziej nielubianej przez student\u00f3w pory roku :). Wracaj\u0105c jednak do tematyki tego devBloga nale\u017ca\u0142oby powiedzie\u0107 czym ciekawym zajmowa\u0142em si\u0119 przez ten czas, przecie\u017c nie sam\u0105 nauk\u0105 cz\u0142owiek \u017cyje.<\/p>\n<p>Postanowi\u0142em doda\u0107 do mojego silnika mo\u017cliwo\u015b\u0107 wczytywania r\u00f3\u017cnego rodzaju plik\u00f3w z meshami. Na pocz\u0105tek napisa\u0142em prost\u0105 klas\u0119 opakowuj\u0105c\u0105 interfejs ID3DXMesh, w kt\u00f3rej umie\u015bci\u0142em struktur\u0119 przechowuj\u0105c\u0105 materia\u0142y danego mesha. Nast\u0119pnie napisa\u0142em funkcje automatyzuj\u0105ce odczyt i zapis plik\u00f3w w formacie .x. Schody zacz\u0119\u0142y si\u0119, gdy chcia\u0142em doda\u0107 obs\u0142ug\u0119 dodatkowego formatu &#8211; zdecydowa\u0142em, \u017ce b\u0119d\u0105 to pliki .obj (Object files). OBJ s\u0105 to pliki tekstowe, przechowuj\u0105ce informacje o ca\u0142ym meshu (fajna specyfikacja tego formatu znajduje si\u0119 <a href=\"http:\/\/www.martinreddy.net\/gfx\/3d\/OBJ.spec\">tutaj<\/a>), z kt\u00f3rymi w parze s\u0105 jeszcze pliki .mtl, gdzie trzymane s\u0105 informacje o materia\u0142ach dla danego subsetu (wi\u0119cej info <a href=\"http:\/\/local.wasp.uwa.edu.au\/~pbourke\/dataformats\/mtl\/\">tutaj<\/a>). Najwa\u017cniejsz\u0105 spraw\u0105 w ca\u0142ym tym przedsi\u0119wzi\u0119ciu by\u0142o napisanie parsera dla tego formatu. Na szcz\u0119\u015bcie z pomoc\u0105 przychodzi Microsoft DirectX SDK, w kt\u00f3rym znajduje si\u0119 przyk\u0142adowy program (&#8220;MeshFromOBJ&#8221;) wczytuj\u0105cy pliki OBJ.<\/p>\n<p>Pisz\u0105c klasy obs\u0142uguj\u0105ce r\u00f3\u017cne modele chcia\u0142em, aby istnia\u0142a mo\u017cliwo\u015b\u0107 konwersji mi\u0119dzy tymi formatami. Powsta\u0142a wi\u0119c koncepcja dw\u00f3ch rodzaj\u00f3w klas &#8211; klasa Mesh oraz klasy obs\u0142uguj\u0105ce formaty. Klasy te maj\u0105 by\u0107 od siebie w jak najwi\u0119kszym stopniu niezale\u017cne, czyli ma istnie\u0107 mo\u017cliwo\u015b\u0107 dodawania funkcjonalno\u015bci do klasy Mesh bez konfliktu z klasami wczytuj\u0105cym oraz musi istnie\u0107 mo\u017cliwo\u015b\u0107 pisania dodatkowych klas obs\u0142uguj\u0105cych r\u00f3\u017cne formaty. Szczerze m\u00f3wi\u0105c, pierwszy raz zetkn\u0105\u0142em si\u0119 z takim problemem, ale na szcz\u0119\u015bcie uda\u0142o mi si\u0119 znale\u017a\u0107 proste i eleganckie rozwi\u0105zanie. Mianowicie zastosowa\u0142em prosty interfejs, po kt\u00f3rym dziedziczy klasa Mesh, z tym wyj\u0105tkiem, \u017ce klasa interfejsu posiada funkcje abstrakcyjne <strong>public<\/strong>, a klasa Mesh definiuje te funkcje jako <strong>protected<\/strong>, b\u0105d\u017a <strong>private<\/strong>. Dzi\u0119ki takiemu podej\u015bciu klasy korzystaj\u0105ce z interfejsu, mog\u0105 operowa\u0107 na tych funkcjach, a klasa Mesh ma te funkcje ukryte :).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Min\u0119\u0142o troch\u0119 czasu od mojej ostatniej notki, ale co poradzi\u0107, studia s\u0105 troch\u0119 wymagaj\u0105ce, wi\u0119c trzeba si\u0119 czasem pouczy\u0107, zw\u0142aszcza, \u017ce jest to stycze\u0144 czyli ostatni miesi\u0105c przed sesj\u0105. W momencie, gdy pisz\u0119 t\u0119 notk\u0119, up\u0142ywa w\u0142a\u015bnie pierwszy tydzie\u0144 tej najbardziej nielubianej przez student\u00f3w pory roku :). Wracaj\u0105c jednak do tematyki tego devBloga nale\u017ca\u0142oby powiedzie\u0107 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[179,10,180],"_links":{"self":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/73"}],"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=73"}],"version-history":[{"count":1,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":351,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/73\/revisions\/351"}],"wp:attachment":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/media?parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/categories?post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/tags?post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}