<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dawid Pośliński &#187; xna</title>
	<atom:link href="http://blog.poslinski.net/kategoria/xna/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.poslinski.net</link>
	<description>Code is poetry.</description>
	<lastBuildDate>Sun, 27 Feb 2011 11:30:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Rendez-vous z Microsoft</title>
		<link>http://blog.poslinski.net/rendez-vous-z-microsoft/</link>
		<comments>http://blog.poslinski.net/rendez-vous-z-microsoft/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 11:30:42 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[tworzenie gier]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=682</guid>
		<description><![CDATA[Jakiś czas temu, na prośbę ludzi z Microsoftu, zabrałem się za pisanie artykułów. Miło mi poinformować, że udało się sfinalizować tworzenie części serii tekstów, które będą stanowić wprowadzenie, do tworzenia gier z wykorzystaniem Microsoft XNA. Osobom, które są zainteresowane kolejnymi artykułami, nie mogę obiecać konkretnego terminu publikacji, ze względu na duży natłok obowiązków, jednak zachęcam [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.poslinski.net/wp-content/uploads/2011/02/randez-vous-z-microsoft.png"><img class="size-full wp-image-687 aligncenter" title="randez-vous-z-microsoft" src="http://blog.poslinski.net/wp-content/uploads/2011/02/randez-vous-z-microsoft.png" alt="" width="620" height="150" /></a></p>
<p>Jakiś czas temu, na prośbę ludzi z Microsoftu, zabrałem się za pisanie artykułów. Miło mi poinformować, że udało się sfinalizować tworzenie części serii tekstów, które będą stanowić wprowadzenie, do tworzenia gier z wykorzystaniem Microsoft XNA.</p>
<p>Osobom, które są zainteresowane kolejnymi artykułami, nie mogę obiecać konkretnego terminu publikacji, ze względu na duży natłok obowiązków, jednak zachęcam do odwiedzania <a href="http://msdn.microsoft.com/pl-pl/centrum-xna">centrum</a> i wspólnego budowania polskiej sceny XNA.</p>
<p><span id="more-682"></span>Obecnie dostępne artykuły:</p>
<ol>
<li><a href="http://msdn.microsoft.com/pl-pl/library/co-to-jest-microsoft-xna" target="_blank">Co to jest Microsoft XNA?</a></li>
<li><a href="http://msdn.microsoft.com/pl-pl/library/przygotowanie-srodowiska-pracy" target="_blank">Przygotowanie środowiska pracy</a></li>
<li><a href="http://msdn.microsoft.com/pl-pl/library/Tworzenie-projektu" target="_blank">Tworzenie projektu</a></li>
<li><a href="http://msdn.microsoft.com/pl-pl/library/wstep-do-grafiki-2d-3d" target="_blank">Wstęp do grafiki 2d/3d</a></li>
</ol>
<p>Spis całej zawartości, która jest zaplanowana, znajduje się <a href="http://msdn.microsoft.com/pl-pl/library/tworzenie-gier-na-platformach-microsoft" target="_blank">tutaj</a>.</p>
<p>Źrodło screena: <a href="http://www.flickr.com/photos/cloudsoup/3830513599/" target="_blank">link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/rendez-vous-z-microsoft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7 i XNA</title>
		<link>http://blog.poslinski.net/windows-phone-7-i-xna/</link>
		<comments>http://blog.poslinski.net/windows-phone-7-i-xna/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 12:37:30 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[windows phone]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=573</guid>
		<description><![CDATA[Ostatnio dość głośno  się mówi o nowej platformie dla XNA &#8211; Windows Phone 7. Microsoft udostępnił już stosowne narzędzia pozwalające emulować zarówno samą platformę sprzętową na PC jak również tworzyć na nią aplikację. Odnośnie samego Windows Phone&#8217;a, kilka featerów można zobaczyć na prezentacji znajdującej się pod tym adresem. Jednak to co z mojego punktu widzenia [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/03/wp7xna.png"><img class="aligncenter size-full wp-image-575" title="wp7xna" src="http://blog.poslinski.net/wp-content/uploads/2010/03/wp7xna.png" alt="" width="620" height="150" /></a>Ostatnio dość głośno  się mówi o nowej platformie dla XNA &#8211; Windows Phone 7. Microsoft udostępnił już stosowne narzędzia pozwalające emulować zarówno samą platformę sprzętową na PC jak również tworzyć na nią aplikację. <span id="more-573"></span>Odnośnie samego Windows Phone&#8217;a, kilka featerów można zobaczyć na prezentacji znajdującej się pod <a href="http://channel9.msdn.com/posts/LauraFoy/First-Look-Windows-Phone-7-Series-Hands-on-Demo/">tym</a> adresem. Jednak to co z mojego punktu widzenia jest najbardziej interesujące to właśnie możliwości tej platformy pod kątem XNA.</p>
<p>Do dyspozycji programistów będą oddane następujące predefiniowane shadery:</p>
<ul>
<li>BasicEffect (stary, dobrze znany, oferujący podstawowe efekty)</li>
<li>DualTextureEffect (jak sama nazwa wskazuje, mieszanie tekstur)</li>
<li>AlphaTestEffect (billboarding)</li>
<li>SkinnedEffect (animacje)</li>
<li>EnviromentMapEffect (mapa środowiska na obiekcie, odbicia)</li>
</ul>
<p>Custom Shadery nie będą dostępne, przy czym Microsoft nie wyklucza ich wprowadzenia w przyszłości.</p>
<p>Dostępne rozdzielczości dla gier:</p>
<ul>
<li>480&#215;800</li>
<li>360&#215;600</li>
<li>240&#215;400</li>
</ul>
<p>Oczywiście zmniejszenie rozdzielczości pozwoli na tworzenie bardziej skomplikowanych scen przy lepszym framerate (wyświetlacz 30hz, więc nie ma sensu tworzyć gier, które mają ponad 30fps, chyba, że są wyjątkowo proste i osiągają taki lub wyższy wynik przy maksymalnej rozdzielczości).</p>
<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/03/screenwp7xna.png"><img class="aligncenter size-full wp-image-576" title="screenwp7xna" src="http://blog.poslinski.net/wp-content/uploads/2010/03/screenwp7xna.png" alt="" width="620" height="318" /></a></p>
<p>Dla zainteresowanych, Microsoft udostępnił już dokumentacje i pierwszy prosty tutorial, aby ułatwić przygodę z tworzeniem aplikacji na tę platformę.</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/bb200104%28XNAGameStudio.40%29.aspx">MSDN</a></li>
<li><a href="http://creators.xna.com/en-US/article/firstwindowsphonegame">Pierwsza gra na Windows Phone</a></li>
<li><a href="http://creators.xna.com/en-us/education/gettingstarted">Wszystkie resource&#8217;y w jednym miejscu</a></li>
<li><a href="http://">Screencasty z ostatnich sesji z konferencji MIX10</a> (b. polecam prezentacje, gdzie przedstawiono przykładowe działające aplikację &#8211; <a href="http://live.visitmix.com/MIX10/Sessions/CL21">3d rpg</a> i <a href="http://live.visitmix.com/MIX10/Sessions/CL22">przykłady wykorzystania shaderów</a>)</li>
</ul>
<p>Inni artykuły:</p>
<ul>
<li><a href="http://polygamia.pl/Polygamia/1,94534,7664578,MIX10__Urzadzenia_z_Windows_Phone_7_jako_przenosne.html">Polygamia</a></li>
<li><a href="http://www.engadget.com/photos/windows-phone-7-series-xna-screenshots/#2785558">Screeny z 3d rpg</a></li>
</ul>
<p>Zapowiada się bardzo ciekawie.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/windows-phone-7-i-xna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XNA: Kurs podstaw programowania w XNA!</title>
		<link>http://blog.poslinski.net/xna-kurs-podstaw-programowania-w-xna/</link>
		<comments>http://blog.poslinski.net/xna-kurs-podstaw-programowania-w-xna/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 09:52:13 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Główna]]></category>
		<category><![CDATA[moje strony]]></category>
		<category><![CDATA[projekty]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[e-learning]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[podstawy]]></category>
		<category><![CDATA[screencast]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=541</guid>
		<description><![CDATA[W trakcie studiów, przychodzi taki moment, kiedy należy wybrać temat pracy dyplomowej. W moim przypadku padło na technologię XNA.Obecnie system jest dość zamkniętą platformą, ale jest również w fazie testowej i plany sięgają znacznie dalej,  a sama platforma edukacyjna, prawdopodobnie zostanie zmieniona. W trakcie kursu zaprezentowałem, jak stworzyć aplikację w XNA na przykładzie wymyślonej na potrzeby [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/03/xna-kurs-podstaw.png"><img class="aligncenter size-full wp-image-542" title="xna-kurs-podstaw" src="http://blog.poslinski.net/wp-content/uploads/2010/03/xna-kurs-podstaw.png" alt="" width="620" height="150" /></a>W trakcie studiów, przychodzi taki moment, kiedy należy wybrać temat pracy dyplomowej. W moim przypadku padło na technologię XNA.<span id="more-541"></span>Obecnie system jest dość zamkniętą platformą, ale jest również w fazie testowej i plany sięgają znacznie dalej,  a sama platforma edukacyjna, prawdopodobnie zostanie zmieniona.</p>
<p>W trakcie kursu zaprezentowałem, jak stworzyć aplikację w XNA na przykładzie wymyślonej na potrzeby wykładów gry Chrupcio.</p>
<p>Lista wykładów obejmuje:</p>
<ol>
<li>Wstęp do Microsoft XNA ( 7 minut 21 sekund )</li>
<li>Przygotowanie środowiska pracy ( 5 minut 41 sekund )</li>
<li>Tworzenie projektu ( 10 minut 20 sekund )</li>
<li>Rysowanie w przestrzeni ( 6 minut 13 sekund )</li>
<li>Generowanie terenu ( 41 minut 17 sekund )</li>
<li>Model z animacjami ( 22 minuty 16 sekund )</li>
<li>Sterowanie modelem i kamerą ( 24 minut 0 sekund )</li>
<li>Stworzenie komponentów dekoracji ( 14 minut 6 sekund )</li>
</ol>
<p>Łączny czas trwania wykładów wyniósł: <strong>130</strong> minut i <strong>17</strong> sekund.</p>
<p>Zapraszam do zapoznania się z witryną (wymagana rejestracja i aktywacja konta przez administratora), oraz będę bardzo wdzięczny za wszelkie uwagi dotyczące systemu jak i tematyki / formy nauczania itp.</p>
<p style="text-align: center;"><a title="Nauka podstaw Microsoft XNA" href="http://xna.wsi.edu.pl"><strong>Internetowy System Edukacyjny XNA</strong></a></p>
<p style="text-align: left;">Mam również prośbę do zainteresowanych tą formą nauki, o wypełnienie poniższej ankiety:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="300" height="250" id="flashPoll" align="middle" style="float:left;padding:10px 10px 10px 0px;">
<param name=FlashVars VALUE="apiKey=&request_type=pollid&request_value=491671"/>
<param name="allowScriptAccess" value="always" />
<param name="movie" value="http://www.memedex.com/flash/flashPoll/flashPoll.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed src="http://www.memedex.com/flash/flashPoll/flashPoll.swf" quality="high" width="300" height="250" name="flashPoll" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashVars="apiKey=&request_type=pollid&request_value=491671" wmode="transparent" style="float:left;padding:10px 10px 10px 0px;"/>
</object></p>
<p>Z góry dziękuję!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/xna-kurs-podstaw-programowania-w-xna/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>XNA: Co na horyzoncie?</title>
		<link>http://blog.poslinski.net/xna-co-na-horyzoncie/</link>
		<comments>http://blog.poslinski.net/xna-co-na-horyzoncie/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 23:24:02 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[project natal]]></category>
		<category><![CDATA[sensory]]></category>
		<category><![CDATA[surface]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[windows phone]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=525</guid>
		<description><![CDATA[Wydawałoby się, że ostatnio temat XNA, nieco ucichł i nie pojawiają się jakieś kluczowe informacje związane z tym frameworkiem. Gdyby jednak podsumować co już wiadomo, na temat tego, co pojawi się w związku z kolejnymi wersjami, uzbierałoby się tego całkiem sporo. Surface Cieszy fakt, iż Microsoft wraz z wprowadzeniem kolejnych platform sprzętowych, planuje wprowadzić natywną [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/02/xna-na-horyzoncie.png"><img class="aligncenter size-full wp-image-535" title="xna-na-horyzoncie" src="http://blog.poslinski.net/wp-content/uploads/2010/02/xna-na-horyzoncie.png" alt="" width="620" height="150" /></a>Wydawałoby się, że ostatnio temat XNA, nieco ucichł i nie pojawiają się jakieś kluczowe informacje związane z tym frameworkiem. Gdyby jednak podsumować co już wiadomo, na temat tego, co pojawi się w związku z kolejnymi wersjami, uzbierałoby się tego całkiem sporo.<span id="more-525"></span></p>
<h2>Surface</h2>
<p>Cieszy fakt, iż Microsoft wraz z wprowadzeniem kolejnych platform sprzętowych, planuje wprowadzić natywną obsługę XNA przez te urządzenia. Chodzi tutaj konkretnie, o już dostępny wąskiemu gronu odbiorców stół z technologią multi-touch <a href="http://www.microsoft.com/surface/">Microsoft Surface</a>. Obecnie Microsoft udostępnia już API pozwalające pisać aplikację na Surface, w tym z użyciem XNA, które można przetestować na swoim lokalnym sprzęcie. Użytkownik podobnie jak w przypadku tworzenia aplikacji na urządzenia mobilne, widzi emulowane urządzenie.<br />
Przykład prostej aplikacji w XNA uruchomionej na Surface.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/hSTad5imww4&amp;hl=pl_PL&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/hSTad5imww4&amp;hl=pl_PL&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>Project Natal</h2>
<p>Kolejnym dużo bardziej interesującym urządzeniem, które dołączy do gamy urządzeń wspierających XNA, będzie <a href="http://www.xbox.com/en-US/live/projectnatal/">Project Natal</a>, w którym rolę kontrolera pełnić będzie człowiek. Dwie kamery, analizować będą nasz ruch i przekładać go będą na trójwymiarowy model, który będzie mógł wchodzić w interakcje z aplikacją. Można powiedzieć, że dzięki tego typu rozwiązaniom, interfejsy naturalne wejdą w nową erę &#8211; przynajmniej pod warunkiem, że coś z tego co obiecuje Microsoft na swoich filmach zostanie spełnione.</p>
<p>Dla osób, które nie wiedzą o co chodzi, polecam te trzy prezentacje:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/CPIbGnBQcJY&amp;hl=pl_PL&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/CPIbGnBQcJY&amp;hl=pl_PL&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rP6lkV83S6I&amp;hl=pl_PL&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/rP6lkV83S6I&amp;hl=pl_PL&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/p2qlHoxPioM&amp;hl=pl_PL&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/p2qlHoxPioM&amp;hl=pl_PL&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>Windows Phone</h2>
<p>W ciągu ostatnich dni, głośno było również o systemie na telefony komórkowe, Windows Phone. Tutaj również otwiera się nowy rynek, ponieważ jak dotąd z małych urządzeń, wsparcie dla XNA posiadał jedynie Zune, który jak wiadomo nie posiada funkcji telefonu, stąd pewnie też i jego popularność nie była największa. Windows Phone, ma uzupełnić lukę na rynku mobilnych urządzeń, którą pozostawił Microsoft, nie dając możliwości programowania w XNA na Windows Mobile. Teraz ma pojawić się taka możliwość. Początkowo, będą to tylko aplikacje 2D, ale uważam, że kwestią czasu będą również i te 3D.</p>
<h2>Windows 7 Sensors*</h2>
<p>Osoby, które śledzą mojego <a href="http://poslinskidotnet.blip.pl/">blip&#8217;a</a>, <a href="http://twitter.com/PoslinskiDotNet">Twitter&#8217;a</a> czy też<a href="http://www.google.com/profiles/dposlinski"> Buzz&#8217;a</a>, widzieli już pewnie ten film:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rhVm_A3eVv8&amp;hl=pl_PL&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/rhVm_A3eVv8&amp;hl=pl_PL&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
W którym przedstawiono nowe funkcjonalności, które pojawiły się w Windows7. W skrócie chodzi o to, że teraz system potrafi odczytywać stany dowolnych sensorów. Na powyższym filmiku, przedstawiono akcelerometr wykorzystany do sterowania samochodem w przykładzie edukacyjnym pobranym z oficjalnej strony XNA. Nie trudno sobie jednak wyobrazić np. wykorzystanie sensora do pomiaru tętna i dynamicznego dostosowywania poziomu trudności gry, lub intensywności akcji na ekranie, odwrotnie proporcjonalnie do szybkości bicia serca użytkownika. To jeden z przykładów, ale obecnie WinApi Windowsa, podobno, ma umożliwić na współpracę z dowolnymi sensorami zewnętrznymi.</p>
<p>Kolejny przykład: multi-touch na Windows 7:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6Ekgr3SqMRA&amp;hl=pl_PL&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/6Ekgr3SqMRA&amp;hl=pl_PL&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Zatem początek 2010, zapowiada bardzo ciekawe nowości, które być może za kilka lat będą standardem, mimo, że teraz wydają się odległą przyszłością. Mam nadzieje, że tak się stanie, bo to również dla osób, które skupiają się wokół tych technologii, dobry znak, że warto inwestować w nie swój czas i wysiłek.</p>
<p>Jeżeli interesuje Was to co piszę, a piszę dla Was zbyt rzadko, zapraszam do śledzenia mnie na ww. serwisach mikroblogowych, gdzie znacznie częściej znaleźć można jakieś krótkie notki, szczególnie na tematy XNA&#8217;owe.</p>
<p>Na zdjęciu do wpisu widać kamerkę Project Natal (<a href="http://www.totalpcgaming.com/features/peter-molyneux-%E2%80%93-petering-out/">źródło</a>).</p>
<p>* Wolę określenie sensor, zamiast &#8222;czujnik&#8221; <img src='http://blog.poslinski.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/xna-co-na-horyzoncie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XNA: Detekcja stromych zboczy terenu</title>
		<link>http://blog.poslinski.net/xna-detekcja-stromych-zboczy-terenu/</link>
		<comments>http://blog.poslinski.net/xna-detekcja-stromych-zboczy-terenu/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 23:50:06 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[teren]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=507</guid>
		<description><![CDATA[W wielu aplikacjach, gdzie napotyka się na problem generowania terenu, pojawia się problem detekcji, aby np. postać, którą stworzymy, nie mogła wychodzić na zbyt strome zbocza. Metod na rozwiązanie tego problemu jest kilka, ja postaram się tutaj przedstawić prostą i skuteczną, a przede wszystkim dość uniwersalną metodę, która w małych projektach powinna się doskonale sprawdzić.Postawione [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/11/xna-zbocza-terenu.png"><img class="aligncenter size-full wp-image-511" title="xna-zbocza-terenu" src="http://blog.poslinski.net/wp-content/uploads/2009/11/xna-zbocza-terenu.png" alt="xna-zbocza-terenu" width="620" height="150" /></a>W wielu aplikacjach, gdzie napotyka się na problem generowania terenu, pojawia się problem detekcji, aby np. postać, którą stworzymy, nie mogła wychodzić na zbyt strome zbocza. Metod na rozwiązanie tego problemu jest kilka, ja postaram się tutaj przedstawić prostą i skuteczną, a przede wszystkim dość uniwersalną metodę, która w małych projektach powinna się doskonale sprawdzić.<span id="more-507"></span>Postawione przed nami zadanie, to na wygenerowanym z heightmap&#8217;y terenie, wykryć kiedy kolejny ruch naszego aktora (postaci, pojazdu itp.), nie będzie możliwy właśnie ze względu na przekroczenie stromości vertexa, w którego kierunku chcemy zmierzać. Do wygenerowania terrenu, wykorzystamy sample przygotowany przez twórców XNA: <a href="http://creators.xna.com/en-US/sample/collision3dheightmapnormals" target="_blank">Heightmap Collision with Normals</a>, który pozwoli wygenerować nam stosowny model terenu i wyliczy normal&#8217;e dla wszystkich vertexów.</p>
<p>Koncepcję, która przyjąłem, jest sprawdzanie, czy vertex w konkretnym punkcie, a właściwie normal do niego przypisany, jest nachylony do płaszczyzny pod odpowiednim kątem, który dobrany został eksperymentalnie (określony jest przez współczynnik i zależy od wielkości wygenerowanych vertexów i skali terenu).</p>
<p>Kluczem do wyliczania stromości, jest metoda, która jest składową klasy terrain (w moim przypadku dziedziczy po DrawableGameComponent i posiada jako składową, klasę HeightMapInfo z ww. przykładu), która to z kolei w zależności od spełnienia warunku stromości wyliczonego w ww. sposób, zwraca bool.</p>
<p>Jej postać jest następująca:</p>
<pre name="code" class="csharp">public bool bluff(Vector3 position)
        {
            Vector3 normal;
            heightMapInfo.GetHeightAndNormal(position, out position.Y, out normal);
            Vector3 angle;
            Vector3 plane = new Vector3(1, 0, 1);
            normal.Normalize();
            Vector3.Cross(ref plane, ref normal, out angle);
            angle.Normalize();

            if (Math.Abs(angle.Y) < 0.45f)
                return true;
            else
                return false;
        }
</pre>
<p>Użycie:</p>
<pre name="code" class="csharp">
// metoda update, reakcja na klawisz
if (terrain.heightMapInfo.IsOnHeightmap(newSpherePosition) &#038;&#038; terrain.bluff(newSpherePosition))
{
      // zmień pozycje i wykonaj opcjonalnie jakieś akcje
}
else
{
      // nie zmieniaj pozycji
}
</pre>
<p>Innymi metodami, które można zastosować w tym przypadku to mapa kolizji (rejonów po których można się poruszać bądź też nie), czy też np. podpięcie systemu fizyki, który wykonał by "brudną robotę" za nas. Zaletą tego rozwiązania oprócz prostoty, jest jego automatyka - raz zaimplemetowany, działa zawsze. Jestem pewien, że można by jeszcze udoskonalić zaprezentowaną metodę, zatem zainteresowanych zachęcam do przedstawienia swoich metod rozwiązania tego problemu, w komentarzach.</p>
<p>Fotografia: [ <a href="http://www.flickr.com/photos/ilker/2494733608/" target="_blank">Link</a> ]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/xna-detekcja-stromych-zboczy-terenu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XNA: Strzeż się 64 bitów!</title>
		<link>http://blog.poslinski.net/xna-strzez-sie-64-bitow/</link>
		<comments>http://blog.poslinski.net/xna-strzez-sie-64-bitow/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 12:13:19 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[wpf]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[winforms]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=497</guid>
		<description><![CDATA[Właściwie sam tytuł wpisu, można traktować jako podsumowanie go. Wszystko zaczęło się od 64bitowego Windowsa i kompilacji projektu &#8230; Could not load file or assembly&#8230; Otóż jak się okazuję, XNA Framework jest 32 bitowy i stąd, na 64 bitowym systemie, może pojawić się błąd (jak w nagłówku powyżej), którego identyfikacja, na pierwszy rzut oka nie [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/10/strzez-sie-x64.png"><img class="aligncenter size-full wp-image-502" title="strzez-sie-x64" src="http://blog.poslinski.net/wp-content/uploads/2009/10/strzez-sie-x64.png" alt="strzez-sie-x64" width="620" height="150" /></a>Właściwie sam tytuł wpisu, można traktować jako podsumowanie go. Wszystko zaczęło się od 64bitowego Windowsa i kompilacji projektu &#8230;<span id="more-497"></span></p>
<h2>Could not load file or assembly&#8230;</h2>
<p>Otóż jak się okazuję, XNA Framework jest 32 bitowy i stąd, na 64 bitowym systemie, może pojawić się błąd (jak w nagłówku powyżej), którego identyfikacja, na pierwszy rzut oka nie wydaje się być łatwa, w sytuacji gdy wszystko znajduje się na swoim miejscu, a ponadto referencje prawidłowo wskazują to miejsce. Cały problem rozbija się o tryb kompilacji naszego kodu.</p>
<p>Problem pojawia się tylko w 64 bitowych systemach, w przypadku wyboru opcji &#8222;Any Cpu&#8221; lub &#8222;x64&#8243;. Jak napisał <strong>Shawn Hargreaves</strong>, jedynym rozwiązaniem tego problemu jest kompilacja w trybie &#8222;x86&#8243;. Warto jednak zauważyć, że problem ten nie występuje w przypadku samego XNA, jeśli ustawimy &#8222;Any Cpu&#8221; w projekcie. Jednak jeśli w solucji posiadamy inne projekty, np. WindowsForms lub WPF i ręcznie dodaliśmy w nich referencję do XNA, wtedy już tak.</p>
<p>Jeżeli jesteście zainteresowani większymi szczegółami, dlatego tak się dzieje, zapraszam do <a href="http://blogs.msdn.com/shawnhar/archive/2008/02/25/xna-framework-on-64-bit-windows.aspx" target="_blank">tego wpisu</a>.</p>
<p>Aby uprzedzić ewentualne pytania: zdjęcie do dzisiejszego wpisu pochodzi <a href="http://www.flickr.com/photos/egarc2/2437521787/" target="_blank">stąd</a> (ten uśmiechnięty osobnik to nie ja).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/xna-strzez-sie-64-bitow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XNA: Czarne/białe meshe ze Skinned Model Processorem?</title>
		<link>http://blog.poslinski.net/xna-czarnebiale-meshe-ze-skinned-model-processorem/</link>
		<comments>http://blog.poslinski.net/xna-czarnebiale-meshe-ze-skinned-model-processorem/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 18:45:21 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[modelowanie]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=474</guid>
		<description><![CDATA[Okazuje się, że użycie skinned model processora stworzonego w samplu Microsoftu, może przysparzać pewne problemy. Jakie? W zależności od karty graficznej meshe, które nie posiadają tekstury (a np. mają kolor zlinkowany do modelu w programie do grafiki 3d), renderowane są na czarno lub biało. Mimo, iż w przypadku BasicEffecta wszystko wyświetla się prawidłowo.Nie wyglądało to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/10/skinned-model-processor.jpg"><img class="aligncenter size-full wp-image-478" title="skinned-model-processor" src="http://blog.poslinski.net/wp-content/uploads/2009/10/skinned-model-processor.jpg" alt="skinned-model-processor" width="620" height="150" /></a>Okazuje się, że użycie skinned model processora stworzonego w <a href="http://creators.xna.com/en-US/sample/skinnedmodel" target="_blank">samplu</a> Microsoftu, może przysparzać pewne problemy. Jakie? W zależności od karty graficznej meshe, które nie posiadają tekstury (a np. mają kolor zlinkowany do modelu w programie do grafiki 3d), renderowane są na czarno lub biało. Mimo, iż w przypadku BasicEffecta wszystko wyświetla się prawidłowo.<span id="more-474"></span>Nie wyglądało to za ciekawie, dlatego postanowiłem poszukać rozwiązań problemu. Gotowych rozwiązań problemu, które nie wymuszałyby modyfikacje modelu, nie udało mi się znaleźć, więc zapytałem na oficjalnym forum XNA.</p>
<p>W odpowiedzi, jeden z twórców XNA <a href="http://blogs.msdn.com/shawnhar/" target="_blank">Shawn Hargreaves</a>, polecił mi przeczytanie <a href="http://blogs.msdn.com/shawnhar/archive/2008/08/22/basiceffect-a-misnomer.aspx" target="_blank">tego artykułu</a>. W skrócie ujmując, są 2 możliwości rozwiązania tego problemu:</p>
<ol>
<li>napisanie własnego Shadera nie mniej skomplikowanego, co ten w BasicEffectcie, który uwzględnia pobieranie koloru z vertexa (a nie tylko textury)</li>
<li>drugie rozwiązanie, które jest moim zdaniem zdecydowanie prostsze &#8211; oteksturowanie całego modelu, co w sumie w grach jest standardem, bo łatwo można uzyskać bardzo ciekawie wyglądający model + dodatkowo bump&#8217;em zwiększyć poziom szczegółowości modelu.</li>
</ol>
<p>Wpis reprezentuje <a href="http://www.flickr.com/photos/mikebaird/552461441/sizes/l/" target="_blank">surfujący pies</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/xna-czarnebiale-meshe-ze-skinned-model-processorem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 przykładów ciekawych projektów w XNA</title>
		<link>http://blog.poslinski.net/10-przykladow-ciekawych-projektow-w-xna/</link>
		<comments>http://blog.poslinski.net/10-przykladow-ciekawych-projektow-w-xna/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 22:24:47 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[live arcade]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[project nathal]]></category>
		<category><![CDATA[surface]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=461</guid>
		<description><![CDATA[Dynamicznie rozwijający się  XNA, może się pochwalić naprawdę niezłymi produkcjami. Pomyśleć tylko, że przyszłe rozwiązania Microsoftu podniosą znaczenie i wartość tego, bądź co bądź frameworka, mowa tutaj o Project Nathal (Video), czy Surface (Video z przykładem aplikacji XNA). Perspektywa ta sprawia, iż wypadałoby pozytywnie spoglądać w przyszłość tego produktu.Jednak XNA to głównie gry. Postanowiłem osobom, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/09/xna-top10.png"><img class="aligncenter size-full wp-image-467" title="xna-top10" src="http://blog.poslinski.net/wp-content/uploads/2009/09/xna-top10.png" alt="xna-top10" width="620" height="150" /></a>Dynamicznie rozwijający się  <strong>XNA</strong>, może się pochwalić naprawdę niezłymi produkcjami. Pomyśleć tylko, że przyszłe rozwiązania Microsoftu podniosą znaczenie i wartość tego, bądź co bądź frameworka, mowa tutaj o <strong>Project Nathal</strong> (<a href="http://www.youtube.com/watch?v=UkSV1rXJ0pU" target="_blank">Video</a>), czy <strong>Surface</strong> (<a href="http://www.youtube.com/watch?v=hSTad5imww4&amp;translated=1" target="_blank">Video z przykładem aplikacji XNA</a>). Perspektywa ta sprawia, iż wypadałoby pozytywnie spoglądać w przyszłość tego produktu.<span id="more-461"></span>Jednak <strong>XNA</strong> to głównie gry. Postanowiłem osobom, które zaczynają, lub po prostu chcą dowiedzieć się czegoś więcej, przybliżyć kilka, moim zdaniem interesujących produkcji.</p>
<h2>10. NFS</h2>
<p>Na początek old schoolowy remake pierwszej części Need For Speed<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/uc_bNFG3IQ4&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/uc_bNFG3IQ4&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>9. HurricaneX2</h2>
<p>Jedna z pierwszych większych produkcji. Tutaj przedstawiam trailer z drugiej części gry.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/YlXd5VIkZ7k&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/YlXd5VIkZ7k&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>8. Masters of Belial</h2>
<p>RPG w klimatach średniowiecznych. Tegoroczny uczestnik Dream Build Play.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/yV-FaDB5Y_M&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/yV-FaDB5Y_M&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>7. Britonia RPG</h2>
<p>RPG, którego ogromny świat z założenia będzie kulą. Warto nadmienić, że nad całością stoi tylko jedna osoba, co zważywszy na poziom prac i zerowe doświadczenie podczas rozpoczęcia projektu jest imponujące.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/myDz-6oobpo&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/myDz-6oobpo&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>6. Crash Demo</h2>
<p>Przykład symulacji zniszczeń modelu samochodu.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rRGMcFswwik&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/rRGMcFswwik&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>5. NightFall</h2>
<p>RPG Hack&amp;Slash.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/NbTohB49kc4&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/NbTohB49kc4&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>4. Edytor Map</h2>
<p>Edytor, który był projektem dyplomowym pewnego Szwajcara, wykonany jak twierdzi autor, zaledwie w 10 tygodni.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/LVXs_paf99U&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/LVXs_paf99U&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>3. SunBurn Engine</h2>
<p>Jeden z naprawdę wielu interesujących gotowych engine&#8217;nów, którego autorzy skupili się przede wszystkim na aspektach wizualnych oraz narzędziach do tworzenia gry.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/kdL487TipkM&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/kdL487TipkM&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>2. Burning Angels</h2>
<p>Jedna z najstarszych produkcji, mimo wszystko, bardzo przyzwoicie zrobiona &#8222;nawalanka&#8221;.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/jHBF-iyzV68&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/jHBF-iyzV68&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>1. Dust: An Alysian Tail</h2>
<p>Co tu dużo mówić. Panie i Panowie, zwycięzca tegorocznego Dream Build Play.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/tR7vE6l1MN0&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/tR7vE6l1MN0&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Oczywiście interesujących projektów jest znacznie więcej, po więcej odsyłam Was na <a href="http://youtube.com" target="_blank">YouTube</a>. Możliwości są nieograniczone i nic nie stoi na przeszkodzie, aby napisać pełnowartościową grę w C# + XNA, chociaż sam Microsoft nie ukrywa, że głównym celem są gry Casual&#8217;owe na platformę <strong>Live Arcade</strong>.</p>
<p>Co ciekawe, niektórzy próbują portować Ogre3d na tę platformę, a inne silniki też pewnie są już oku programistów.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/10-przykladow-ciekawych-projektow-w-xna/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>XNA: Podstawy fizyki z JigLibX</title>
		<link>http://blog.poslinski.net/xna-podstawy-fizyki-z-jiglibx/</link>
		<comments>http://blog.poslinski.net/xna-podstawy-fizyki-z-jiglibx/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 23:08:27 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[fizyka]]></category>
		<category><![CDATA[jiglibx]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=417</guid>
		<description><![CDATA[Samo XNA, nie oferuje nam klas pomocnych w obliczeniach związanych z fizyką. Co prawda istnieje możliwość wykrywania samych kolizji, ale to jak zachowają się obiekty po jej wykryciu, zależy już tylko od napisanego przez nas kodu. Chyba, że skorzystamy z gotowych bibliotek do tego służących. Na tapetę wziąłem najpopularniejszą XNA&#8217;ową bibliotekę OpenSource &#8211; JigLibX. Co [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/09/podstawy-jiglibx.png"><img class="aligncenter size-full wp-image-451" title="podstawy-jiglibx" src="http://blog.poslinski.net/wp-content/uploads/2009/09/podstawy-jiglibx.png" alt="podstawy-jiglibx" width="620" height="150" /></a>Samo XNA, nie oferuje nam klas pomocnych w obliczeniach związanych z fizyką. Co prawda istnieje możliwość wykrywania samych kolizji, ale to jak zachowają się obiekty po jej wykryciu, zależy już tylko od napisanego przez nas kodu. Chyba, że skorzystamy z gotowych bibliotek do tego służących. Na tapetę wziąłem najpopularniejszą XNA&#8217;ową bibliotekę OpenSource &#8211; <a href="http://jiglibx.codeplex.com/" target="_blank">JigLibX</a>.</p>
<h2><span id="more-417"></span>Co można osiągnąć?</h2>
<p>Powołując się na filmy na stronie autorów, 2 przykłady:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/sCZRNRn_P_I&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/sCZRNRn_P_I&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
&#8230;oraz przykład stworzony przez samych autorów JigLibX:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/EiToaQ_ujLM&amp;hl=pl&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/EiToaQ_ujLM&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Więcej filmów na <a href="http://jiglibx.codeplex.com/" target="_blank">stronie projektu</a>.</p>
<h2>Utworzenie projektu</h2>
<p>Pierwsze co należy zrobić, to <a href="http://jiglibx.codeplex.com/">pobrać</a> z sekcji Download, najnowsze źródła JigLibX&#8217;a. Po rozpakowaniu ich, tworzymy nowy projekt (w moim przypadku projekt XNA 3.1), klikamy w Solution Explorerze na główny korzeń naszego projektu (Solution NazwaNaszegoProjektu) prawym przyciskiem myszy i wybieramy <strong>Add › Existing project</strong>,</p>
<div id="attachment_420" class="wp-caption aligncenter" style="width: 503px"><img class="size-full wp-image-420" title="jiglibx-dodawanie-projektu1" src="http://blog.poslinski.net/wp-content/uploads/2009/09/jiglibx-dodawanie-projektu1.jpg" alt="jiglibx-dodawanie-projektu1" width="493" height="424" /><p class="wp-caption-text">Dodawanie istniejącego projektu do już istniejącego</p></div>
<p style="text-align: center;">
<p>następnie wybieramy z folderu gdzie rozpakowaliśmy wcześniej pobrany silnik fizyki:  <strong>JigLibX › JigLibX.csproj</strong>.</p>
<div id="attachment_418" class="wp-caption aligncenter" style="width: 613px"><img class="size-full wp-image-418 " title="jiglibx-dodawanie-projektu" src="http://blog.poslinski.net/wp-content/uploads/2009/09/jiglibx-dodawanie-projektu.jpg" alt="jiglibx-dodawanie-projektu" width="603" height="447" /><p class="wp-caption-text">Dodawanie istniejącego projektu do już istniejącego</p></div>
<p>Jeżeli wybraliśmy przy tworzeniu projektu, projekt w dla XNA w wersji 3.1, to należy teraz zrobić upgrade projektu JigLibX do wersji 3.1. Robimy to klikając prawym przyciskiem myszy, na korzeniu projektu <strong>JigLibX › Upgrade solution</strong>. Musimy to zrobić, aby później móc dodać w projekcie głównym referencje do projektu JigLibX&#8217;a. Inaczej nie będzie to możliwe, ponieważ obecnie jest on przeznaczony dla wersji 3.0. Zmiany w wersji 3.1 nie są na tyle duże jednak, aby w pełni poprawnie biblioteka ta działała pod tą wersją XNA.</p>
<p>Następnie, klikamy prawym przyciskiem myszy na korzeń naszego <strong>głównego projektu </strong>(w moim przypadku nazywa się on FizykaZJigLibX)<strong> › Add reference › Projects › JigLibX</strong>. W drzewie naszego projektu, w folderze <strong>references</strong> powinien pojawić się JigLibX. Od teraz mamy dostęp do tej przestrzeni nazw.</p>
<h2>Dodanie systemu fizyki</h2>
<p>Po pierwsze, konieczną rzeczą będzie dodanie odpowiednich przestrzeni nazw w pliku <strong>Game1.cs</strong>.</p>
<pre name="code" class="csharp">using JigLibX.Physics;
using JigLibX.Geometry;
using JigLibX.Collision;</pre>
<p>Możemy zatem korzystać z klas napisanych przez twórców JigLibX&#8217;a. Na początek, w konstruktorze naszej klasy, stworzymy dwa obiekty.</p>
<pre name="code" class="csharp">public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";

PhysicsSystem world = new PhysicsSystem();
world.CollisionSystem = new CollisionSystemSAP();
}</pre>
<p>Obiekt world, będący instancją klasy <strong>PhysicSystem</strong>, zainicjuje wszystkie niezbędne zmienne i będzie niejako kontrolerem zdarzeń zachodzących wewnątrz naszej aplikacji. Zdarzeń związanych z fizyką. W kolejnej linii, do właściwości <strong>CollisionSystem</strong>, przypisujemy utworzony obiekt typu <strong>CollisionSystemSAP</strong>, który jest konieczny, aby wykrywać wszelkie kolizje. Klasa ta wykorzystuje algorytm &#8222;sweep and prune&#8221; do wykrywania kolizji, który w tym przykładzie, będzie wystarczający, jeśli jednak zaglądniemy do folderu, Collision w projekcie JigLibX, zobaczymy, że mamy możliwość skorzystać z innych gotowych klas, wykorzystujących inne algorytmy, np. bazujący na siatce (grid). Jeżeli pominięto by ten krok, nie moglibyśmy reagować na kolizje, a obiekty po prostu przechodziły by przez siebie, bez żadnej reakcji.</p>
<p>Należy zrobić jeszcze jedną rzecz, mianowicie, regularnie aktualizować nasz obiekt w którym przechowywana jest logika fizyki. Aby to zrobić, wystarczy w metodzie Update, dodać następujący kod:</p>
<pre name="code" class="csharp">float timeStep = (float)gameTime.ElapsedGameTime.Ticks / TimeSpan.TicksPerSecond;
PhysicsSystem.CurrentPhysicsSystem.Integrate(timeStep);</pre>
<p>Ponieważ PhysicsSystem.CurrentPhysicsSystem jest składową statyczną, jest ona dostępna z każdego miejsca w naszym projekcie, co niewątpliwie zwiększa wygodę użytkowania tego rozwiązania.</p>
<h2>Utworzenie klasy aktora</h2>
<p>Klasa aktora, będzie tak naprawdę służyła do utworzenia obiektu, w którym ustawiane będą odpowiednie parametry określające obiekt w naszej aplikacji, a które to są niezbędne do wszelkich obliczeń przy kolizjach z otoczeniem.</p>
<p>Utwórzmy zatem klasę <strong>BoxActor.cs</strong>, klikając na<strong> korzeń naszego projektu › Add › Class..</strong></p>
<div id="attachment_425" class="wp-caption aligncenter" style="width: 608px"><img class="size-full wp-image-425  " title="jiglibx-boxactor-class" src="http://blog.poslinski.net/wp-content/uploads/2009/09/jiglibx-boxactor-class.jpg" alt="jiglibx-boxactor-class" width="598" height="365" /><p class="wp-caption-text">Tworzenie klasy BoxActor.cs</p></div>
<p>Umieśćmy poniższy kod wewnątrz pliku <strong>BoxActor.cs</strong>:</p>
<pre name="code" class="csharp">using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using JigLibX.Math;
using JigLibX.Physics;
using JigLibX.Geometry;
using JigLibX.Collision;

namespace FizykaZJigLibX
{
    public class BoxActor : DrawableGameComponent
    {
        private Vector3 position;
        private Vector3 scale;

        private Body _body;
        public Body Body
        {
            get
            {
                return _body;
            }
        }

        private CollisionSkin _skin;
        public CollisionSkin Skin
        {
            get
            {
                return _skin;
            }
        }

        public BoxActor(Game game, Vector3 position, Vector3 scale) : base(game)
        {
            this.position = position;
            this.scale = scale;
        }
    }
}</pre>
<p>Klasa <strong>BoxActor</strong> dziedziczy po klasie DrawableGameComponent, ponieważ aktor musi być rysowany na ekranie, abyśmy mogli zobaczyć co się dzieje. Pole <strong>position</strong> przechowuje informacje o centralnym punkcie wewnątrz box&#8217;a, natomiast <strong>scale</strong> &#8211; jego wymiary. <strong>Body</strong> należy rozumieć, jako zmienną która przechowuje informację o ruchu oraz obracaniu się naszego obiektu. <strong>Skin</strong> odpowiada za wykrywanie kolizji.</p>
<h2>Utworzenie Body i CollisionSkin</h2>
<p>Kolejnym krokiem będzie dodanie na końcu konstruktora klasy BoxActor, następującego kodu:</p>
<pre name="code" class="csharp">_body = new Body();
_skin = new CollisionSkin(_body);
_body.CollisionSkin = _skin;</pre>
<p>Do zmiennej <strong>_body</strong>, przypiszemy instancję klasy Body, która będzie przechowywać podstawowe informację o stanie w jakim znajduje się obiekt. <strong>_skin</strong> będzie posiadał informację o &#8222;powłoce&#8221; naszego obiektu, która zostanie utworzona na bazie, wcześniej ustawionego <strong>_body</strong><span>. Na koniec, konieczne jest jeszcze ustawienie<strong> </strong>własności <strong>CollisionSkin</strong> dla <strong>_body</strong>. </span></p>
<p><span>Teraz, zdecydujemy jaki kształt, będzie posiadał nasz aktor. Od tego zależy jak będzie się zachowywał na scenie. Służą do tego klasy <strong>Primitives</strong> znajdujące się w <strong>JigLibX › Primitives</strong>.</span></p>
<p><span>W naszym przypadku, zależy nam, aby nasz obiekt zachowywał się jak skrzynia, zatem wykorzystamy do tego klasę <strong>Box</strong>, dodając poniższy kod, na końcu konstruktora klasy <strong>BoxActor</strong>.<br />
</span></p>
<pre name="code" class="csharp">Box box = new Box(Vector3.Zero, Matrix.Identity, scale);
_skin.AddPrimitive(box, new MaterialProperties(0.8f, 0.8f, 0.7f));</pre>
<p>W powyższym kodzie, utworzyliśmy nowy obiekt klasy <strong>Box</strong>, którego parametry w konstruktorze oznaczają kolejno: Pozycję środka naszego Box&#8217;a, orientację Box&#8217;a (Macierz jednostkowa oznacza brak rotacji itp.), oraz skalę, która ustalona będzie przy konstruowaniu obiektu <strong>BoxActor</strong>.</p>
<p>Druga linia, dodaje powierzchnię kolizyjną do naszego obiektu, aby mógł reagować z innymi obiektami. Pierwszy parametr, to typ obiektu z jakim mamy do czynienia, drugi parametr określa zachowanie się materiału (tarcie oraz elastyczność).</p>
<h2>Ustalanie masy obiektu</h2>
<p>Aby ustalić masę obiektu, której w dodatku środek ciężkości, będzie się zmieniał w zależności od kierunku sił jakie będą na ów obiekt oddziaływać, autorzy JigLibX, stworzyli taką oto metodę, którą dodamy do klasy <strong>BoxActor.</strong></p>
<pre name="code" class="csharp">private Vector3 SetMass(float mass)
{
    PrimitiveProperties primitiveProperties = new PrimitiveProperties(
        PrimitiveProperties.MassDistributionEnum.Solid,
        PrimitiveProperties.MassTypeEnum.Mass, mass);

    float junk;
    Vector3 com;
    Matrix it;
    Matrix itCoM;

    Skin.GetMassProperties(primitiveProperties, out junk, out com, out it, out itCoM);

    Body.BodyInertia = itCoM;
    Body.Mass = junk;

    return com;
}</pre>
<p>Na końcu konstruktora, tej samej klasy, ustalimy masę w następujący sposób:</p>
<pre name="code" class="csharp">Vector3 com = SetMass(1.0f);</pre>
<p>I to wszystko, jeżeli chodzi o przejmowanie się masą naszego obiektu <img src='http://blog.poslinski.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Oczywiście nic nie stoi na przeszkodzie, aby w trakcie działania aplikacji, dowolnie zmieniać masę obiektu.</p>
<h2>Ustawianie Box&#8217;a w odpowiednim miejscu</h2>
<p>W tym kroku, ustawimy nasz Box na pozycji, którą podawać będziemy w konstruktorze, w trakcie tworzenia naszego aktora. Jest to niezbędne, aby dopasować ciało naszego obiektu, jak i powierzchnię kolizyjną odpowiednio do samego obiektu, aby efekt był adekwatny i realistyczny.</p>
<p>Na końcu konstruktora <strong>BoxActor</strong>, dodajemy następujący kod:</p>
<pre name="code" class="csharp">_body.MoveTo(position, Matrix.Identity);
_skin.ApplyLocalTransform(new Transform(-com, Matrix.Identity));
_body.EnableBody();</pre>
<p>Pierwsza linia przenosi &#8222;ciało&#8221; naszego aktora na określoną pozycję. Drugi parametr w metodzie <strong>MoveTo</strong>, oznacza orientację obiektu.</p>
<p>Druga linia, ustawia powierzchnię kolizyjną odpowiednio względem środka ciężkości naszego obiektu.</p>
<p>Ostatnia linia, włącza symulację dla <strong>_body</strong> i zarazem aktora. Ta linia jest niezbędna, ponieważ symulacja, jest standardowo wyłączona.</p>
<h2>Tworzenie Świata.</h2>
<p>Wszystkie ustawienia związane z framework&#8217;iem, zostały ustalone, zatem można przejść do tworzenia Świata. Na końcu konstruktora, w głównym pliku naszego projektu <strong>game1.cs</strong>, dodajmy następujący kod:</p>
<pre name="code" class="csharp">fallingBox = new BoxActor(this, new Vector3(5, 20, 5), new Vector3(2, 2, 2));
immovableBox = new BoxActor(this, new Vector3(0, -5, 0), new Vector3(10, 10, 10));
immovableBox.Body.Immovable = true;
Components.Add(fallingBox);
Components.Add(immovableBox);</pre>
<p>Brakuje jeszcze składowych, które należy dodać nad wszystkimi metodami w klasie <strong>Game1</strong>:</p>
<pre name="code" class="csharp">BoxActor fallingBox;
BoxActor immovableBox;</pre>
<p>Pierwsze dwie linie tworzą naszych aktorów. Parametry w konstruktorze, oznaczają kolejno: pierwszy &#8211; instancja klasy, w której utworzyliśmy aktora, w tym przypadku, klasa główna naszej aplikacji <strong>Game1</strong>, drugi &#8211; pozycja, trzeci parametr oznacza rozmiar elementu.</p>
<p>Trzecia linia oznacza, iż drugi obiekt będzie nieruchomy, a jak widać w parametrach przekazanych do konstruktora, będzie znacznie większy (5x), niż pierwszy obiekt.</p>
<p>Czwarta i piąta linia doda utworzone przez nas obiekty, do kolekcji komponentów, które automatycznie będą rysowane przez klasę <strong>Game</strong>, po której dziedziczy nasza aplikacja.</p>
<h2>Rysowanie</h2>
<p>Zajmiemy się teraz ostatnim etapem, czyli wyrzuceniem rezultatu na ekran, a właściwie ładnie to ujmując, narysowaniem naszej sceny. Najpierw jednak, musimy dodać model skrzynki, który wykorzystamy w naszym projekcie. Przykładowy model pochodzący z <a href="http://www.innovativegames.net/blog/" target="_blank">Innovative Games</a>, można pobrać <a href="http://blog.poslinski.net/wp-content/uploads/2009/09/ig_box.zip">tutaj</a>.</p>
<p>Po rozpakowaniu pliku i przekopiowaniu dwóch znajdujących się w nim plików (z modelem i teksturą), należy w Solution Explorerze, kliknąć prawym przyciskiem myszy na folder <strong>Content</strong> (w naszym projekcie) i wybrać <strong>Add ›</strong> <strong>Existing item&#8230;</strong> oraz wybrać plik z modelem .fbx oraz powtórzyć krok, wybierając plik z teksturą.</p>
<div id="attachment_440" class="wp-caption aligncenter" style="width: 377px"><a href="http://blog.poslinski.net/wp-content/uploads/2009/09/jiglibx-content.jpg"><img class="size-full wp-image-440" title="jiglibx-content" src="http://blog.poslinski.net/wp-content/uploads/2009/09/jiglibx-content.jpg" alt="jiglibx-content" width="367" height="325" /></a><p class="wp-caption-text">Folder Content po dodaniu modelu i tekstury</p></div>
<p>Następnie w klasie <strong>BoxActor</strong>, utwórzmy nową metodę, która załaduje nasz model:</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 5052px; width: 1px; height: 1px;"><img src="file:///C:/Users/POSLIN%7E1.NET/AppData/Local/Temp/moz-screenshot.png" alt="" /></div>
<pre name="code" class="csharp">protected override void LoadContent()
{
    model = Game.Content.Load("boxModel");
}</pre>
<p>oraz dodajmy nad wszystkimi metodami w tej klasie, deklarację zmiennej model:</p>
<pre name="code" class="csharp">private Model model;</pre>
<p>Następnie dodajmy do tej samej klasy, następującą metodę:</p>
<pre name="code" class="csharp">private Matrix GetWorldMatrix()
{
    return
        Matrix.CreateScale(scale) *
        _skin.GetPrimitiveLocal(0).Transform.Orientation *
        _body.Orientation *
        Matrix.CreateTranslation(_body.Position);
}</pre>
<p>Zwraca ona macierz Świata naszego obiektu, która otrzymujemy w wyniku przemnożenia kolejno macierzy: skali, powierzchni kolizyjnej, a tak naprawdę kąta w jakim się znajduje, &#8222;ciała&#8221; obiektu (również kąt), oraz pozycji &#8222;ciała&#8221; obiektu.</p>
<p>Potrzebne będą jeszcze macierze projekcji oraz widoku, które dodamy do klasy głównej aplikacji (w pliku <strong>game1.cs</strong>):</p>
<pre name="code" class="csharp">private Matrix _view;
public Matrix View
{
    get
    {
        return _view;
    }
}

private Matrix _projection;
public Matrix Projection
{
    get
    {
        return _projection;
    }
}</pre>
<p>W konstruktorze klasy <strong>Game1</strong>, na końcu ustawmy macierz projekcji, dodając następującą linię:</p>
<pre name="code" class="csharp">_projection = Matrix.CreatePerspectiveFieldOfView(
    MathHelper.ToRadians(45.0f),
    (float)graphics.PreferredBackBufferWidth / (float)graphics.PreferredBackBufferHeight,
    0.1f,
    1000.0f
);</pre>
<p>Nie będę opisywał parametrów macierzy projekcji, bo zakładam, że na tym etapie są one dość jasne, jednak jeśli nie, zapraszam do <a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.matrix.createperspectivefieldofview.aspx" target="_blank">tego artykułu na msdn&#8217;ie</a>.</p>
<p>Pozostało nam ustawić jeszcze macierz widoku, zrobimy to w metodzie <strong>Update</strong>, w pliku <strong>Game1.cs</strong>, dodając następującą linię kodu:</p>
<pre name="code" class="csharp">_view = Matrix.CreateLookAt(
    new Vector3(0, 10, 20),
    fallingBox.Body.Position,
    Vector3.Up
);</pre>
<p>Linia ta spowoduje, że w centrum ekranu, znajdować się będzie nasz spadający obiekt. W trakcie spadania, zobaczymy jak, dojdzie do kolizji z obiektem, który został unieruchomiony.</p>
<p>Na koniec, pozostało nam jeszcze dodać metodę <strong>Draw</strong> dla <strong>BoxActor</strong>, która zostanie automatycznie wywołana dla tego obiektu przy rysowaniu.</p>
<pre name="code" class="csharp">public override void Draw(GameTime gameTime)
{
    BasicWorldGame game = (BasicWorldGame)Game;

    Matrix[] transforms = new Matrix[model.Bones.Count];
    model.CopyAbsoluteBoneTransformsTo(transforms);

    Matrix worldMatrix = GetWorldMatrix();

    foreach (ModelMesh mesh in model.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.EnableDefaultLighting();
            effect.PreferPerPixelLighting = true;
            effect.World = transforms[mesh.ParentBone.Index] * worldMatrix;
            effect.View = game.View;
            effect.Projection = game.Projection;
        }
        mesh.Draw();
    }
}</pre>
<p>Dzięki pierwszej lini, będziemy mieli dostęp do macierzy widoku i projekcji, tworząc referencję do obiektu głównego naszej aplikacji. Reszta kodu, jest typowa dla renderowania obiektów z użyciem klasy <strong>BasicEffect</strong>. Jedyną istotną rzeczą jest używanie jako macierzy Świata, macierzy którą obliczamy na bieżąco, a właściwie JigLibX oblicza za nas.</p>
<p>Artykuł bazuje na dokumentacji znalezionej <a href="http://jiglibx.wikidot.com/basic-world" target="_blank">tutaj</a>, jednak wiele wskazuje na to, iż przytoczony tutaj tekst jest już nieaktualny, i napisana przeze mnie wersja powinna działać lepiej. Być może spowodowane to jest niepełną kompatybilnością z XNA 3.1, ale z tego co przyglądałem się metodom, jedna z nich, została ograniczona z 3 parametrów do dwóch. Wersja JigLibX 0.3.1 (stan na 11 Września 2009).</p>
<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/09/FizykaZJigLibX.zip">Gotowy projekt do pobrania (XNA 3.1)</a> (2,1MB)</p>
<p><a href="http://blog.poslinski.net/wp-content/uploads/2009/09/FizykaZJigLibXApp.zip">Skompilowane demo (XNA 3.1)</a> (0,3MB)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/xna-podstawy-fizyki-z-jiglibx/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Warto zobaczyć #3</title>
		<link>http://blog.poslinski.net/warto-zobaczyc-3/</link>
		<comments>http://blog.poslinski.net/warto-zobaczyc-3/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 23:31:09 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[inne]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=235</guid>
		<description><![CDATA[Kolejna paczka, interesujących znalezisk, z którymi warto się zaznajomić. jQuery http://jqueryfordesigners.com/ Świetna strona dla programistów korzystających z jQuery. http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/ Dobrze opisane zapytania Ajaxowe z wykorzystaniem jQuery. XNA http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541 Tekstury Paint.NET do XNA. http://xnaviewer.codeplex.com/ Kontrolka, pozwalająca na korzystanie z dobrodziejstw XNA w aplikacjach typu WindowsForms. Nie trudno sobie wyobrazić zastosowanie np. przy tworzeniu map. Inne http://www.bugmenot.com [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-411" title="warto-zobaczyc-3" src="http://blog.poslinski.net/wp-content/uploads/2009/09/warto-zobaczyc-3.jpg" alt="warto-zobaczyc-3" width="620" height="150" />Kolejna paczka, interesujących znalezisk, z którymi warto się zaznajomić.</p>
<h2><span id="more-235"></span>jQuery</h2>
<p><a href="http://jqueryfordesigners.com/">http://jqueryfordesigners.com/</a><br />
Świetna strona dla programistów korzystających z jQuery.<br />
<a href="http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/">http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/</a><br />
Dobrze opisane zapytania Ajaxowe z wykorzystaniem jQuery.</p>
<h2>XNA</h2>
<p><a href="http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541">http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541</a><br />
Tekstury Paint.NET do XNA.<br />
<a href="http://xnaviewer.codeplex.com/" target="_blank">http://xnaviewer.codeplex.com/</a><br />
Kontrolka, pozwalająca na korzystanie z dobrodziejstw XNA w aplikacjach typu WindowsForms. Nie trudno sobie wyobrazić zastosowanie np. przy tworzeniu map.</p>
<h2>Inne</h2>
<p><a href="http://www.bugmenot.com">http://www.bugmenot.com</a><br />
Dzięki tej stronie, nie trzeba się rejestrować na różne serwisy społecznościowe, itp., aby móc w pełni przeglądać zasoby tych serwisów.<br />
<a href="http://gskinner.com/RegExr/">http://gskinner.com/RegExr/</a><br />
Świetne narzędzie ułatwiające pracę z mod_rewrite.<br />
<a href="http://www.logoinstant.com/" target="_blank">http://www.logoinstant.com/</a><br />
Darmowe wzory logo.<br />
<a href="http://code.msdn.microsoft.com/PowerCommands">http://code.msdn.microsoft.com/PowerCommands</a><br />
Przydatny dodatek do Visual Studio (za <a href="http://www.maciejaniserowicz.com/post/2009/08/31/Copypaste-reference-w-Visual-Studio.aspx" target="_blank">Procent</a>&#8216;em).<br />
<a href="http://blogs.msdn.com/danieb/archive/2009/08/26/pl-windows-7-search-connectors-czyli-integracja-wyszukiwania-z-systemem-operacyjnym.aspx" target="_blank">http://blogs.msdn.com/danieb/archive/2009/08/26/pl-windows-7-search-connectors-czyli-integracja-wyszukiwania-z-systemem-operacyjnym.aspx</a><br />
Opis jednej z nowych bardzo interesujących funkcjonalności w Windows 7.<br />
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=95E24C87-8732-48D5-8689-AB826E7B8FDF&amp;displaylang=en">Word viewer</a><br />
Programik pozwala na przeglądanie dokumentów Worda, bez potrzeby posiadania pakietu Office.<br />
<a href="http://www.hanselman.com/tools">http://www.hanselman.com/tools</a><br />
Naprawdę ogromna lista różnego rodzaju narzędzi, które przydadzą się każdemu, podzielona według kategorii. Sam się zdziwiłem, jak wiele przydatnych aplikacji jeszcze nie znałem.</p>
<p>Polecam również <a href="http://www.flickr.com/photos/gzlu/">galerię prac autora</a> zdjęcia, które reprezentuje ten wpis.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/warto-zobaczyc-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

