{"id":254,"date":"2009-12-08T10:39:28","date_gmt":"2009-12-08T09:39:28","guid":{"rendered":"http:\/\/netrix.org.pl\/?p=254"},"modified":"2011-02-12T02:18:57","modified_gmt":"2011-02-12T01:18:57","slug":"environmental-mapping-skybox","status":"publish","type":"post","link":"https:\/\/netrix.org.pl\/index.php\/2009\/12\/08\/environmental-mapping-skybox\/","title":{"rendered":"Environmental mapping + skybox"},"content":{"rendered":"<p>Tym razem b\u0119dzie ma\u0142y update dotycz\u0105cy silnika. Niby nic, ale mo\u017cna si\u0119 pochwali\u0107.<\/p>\n<p><a href=\"http:\/\/netrix.org.pl\/wp-content\/2009\/12\/etuymcryp.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-253\" title=\"etuymcryp\" src=\"http:\/\/netrix.org.pl\/wp-content\/2009\/12\/etuymcryp-300x225.png\" alt=\"etuymcryp\" width=\"200\" height=\"150\" srcset=\"https:\/\/netrix.org.pl\/wp-content\/2009\/12\/etuymcryp-300x225.png 300w, https:\/\/netrix.org.pl\/wp-content\/2009\/12\/etuymcryp.png 800w\" sizes=\"(max-width: 200px) 100vw, 200px\" \/><\/a>Po pierwsze Environmental mapping, czyli proste przybli\u017cenie zjawiska odbicia \u015bwiat\u0142a na powierzchni cia\u0142a oraz za\u0142amania \u015bwiat\u0142a na granicy dw\u00f3ch o\u015brodk\u00f3w. Wymaga dostarczenia tylko dodatkowej tekstury sze\u015bciennej (cube-mapa) oraz skorzystania z dw\u00f3ch dodatkowych funkcji HLSL: refract i reflect. Mo\u017cna go wzbogaci\u0107 dodatkowo o efekt Fresnela i rozszczepienie chromatyczne. Ca\u0142o\u015b\u0107 wygl\u0105da jak na screenie obok. Efekt ten nie jest trudny do zaimplementowania, wi\u0119c szczeg\u00f3\u0142\u00f3w implementacyjnych nie b\u0119dzie, zreszt\u0105 s\u0105 one w ksi\u0105\u017cce <a href=\"http:\/\/http.developer.nvidia.com\/CgTutorial\/cg_tutorial_chapter07.html\" target=\"_blank\">CG Tutorial<\/a>.<\/p>\n<p>Kolejn\u0105 rzecz\u0105 jest skybox. Jak nazwa wskazuje, jest to pude\u0142ko z t\u0142em nieba, kt\u00f3re powoduje, \u017ce scena z obiektami nie wygl\u0105da po prostu pusto. Poni\u017cej przedstawiam trzy kroki rysowania skyboxa:<\/p>\n<ol>\n<li>Potrzebne jest pude\u0142ko wraz z tekstur\u0105, kt\u00f3r\u0105 jest ju\u017c wspomniana wcze\u015bniej cube-mapa.<strong> <\/strong>Biblioteka D3DX posiada do tego odpowiedni\u0105 funkcj\u0119: D3DXCreateBox(), kt\u00f3ra jako parametry przyjmuje wymiary pude\u0142ka. Najlepiej jest stworzy\u0107 sze\u015bcian 1:1:1.<\/li>\n<li>Pude\u0142ko powinno obraca\u0107 si\u0119 razem z kamer\u0105, ale nie mo\u017ce zmienia\u0107 swojej pozycji. Aby to osi\u0105gn\u0105\u0107 nale\u017cy u\u017cy\u0107 tylko macierzy widoku i projekcji. przy czym ostatni wiersz tej pierwszej powinien mie\u0107 takie warto\u015bci: (0, 0, 0, 1).<\/li>\n<li>Skybox powinien by\u0107 pierwszym elementem rysowanym na scenie, a dodatkowym warunkiem koniecznym by by\u0142 on t\u0142em ca\u0142ej sceny jest wy\u0142\u0105czenie zapisu do ZBuffera. Dzi\u0119ki temu ka\u017cdy kolejny obiekt sceny b\u0119dzie rysowany zawsze przed skyboxem. Aby odczyta\u0107 kolor tekstury zamiast funkcji tex2D nale\u017cy wykorzysta\u0107 funkcj\u0119 texCUBE, do kt\u00f3rej jako wsp\u00f3\u0142rz\u0119dne tekstury przekazuje si\u0119 pozycj\u0119 danego pixela.<\/li>\n<\/ol>\n<p>Jak wida\u0107 nie jest to skomplikowane, a dzi\u0119ki temu scena wygl\u0105da o wiele lepiej.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tym razem b\u0119dzie ma\u0142y update dotycz\u0105cy silnika. Niby nic, ale mo\u017cna si\u0119 pochwali\u0107. Po pierwsze Environmental mapping, czyli proste przybli\u017cenie zjawiska odbicia \u015bwiat\u0142a na powierzchni cia\u0142a oraz za\u0142amania \u015bwiat\u0142a na granicy dw\u00f3ch o\u015brodk\u00f3w. Wymaga dostarczenia tylko dodatkowej tekstury sze\u015bciennej (cube-mapa) oraz skorzystania z dw\u00f3ch dodatkowych funkcji HLSL: refract i reflect. Mo\u017cna go wzbogaci\u0107 dodatkowo o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[137],"tags":[179,10,102,96,180,64,101],"_links":{"self":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/254"}],"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=254"}],"version-history":[{"count":10,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/254\/revisions"}],"predecessor-version":[{"id":797,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/254\/revisions\/797"}],"wp:attachment":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/media?parent=254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/categories?post=254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/tags?post=254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}