<?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>Netrix's devBlog</title>
	<atom:link href="http://netrix.gamedev.pl/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://netrix.gamedev.pl</link>
	<description>Code or die</description>
	<lastBuildDate>Fri, 05 Mar 2010 02:35:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Karta WiFi jako Access-Point</title>
		<link>http://netrix.gamedev.pl/index.php/2010/03/05/karta-wifi-jako-access-point/</link>
		<comments>http://netrix.gamedev.pl/index.php/2010/03/05/karta-wifi-jako-access-point/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 02:23:23 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[Problemy]]></category>
		<category><![CDATA[Atheros]]></category>
		<category><![CDATA[WiFi]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=426</guid>
		<description><![CDATA[Niedawno kupiłem sobie w końcu router z AP, ale zanim jeszcze to zrobiłem chciałem podłączyć PS3 do internetu za pomocą sieci WLAN. Niestety konsola nie obsługuje sieci Ad-hoc, więc potrzebny był AP.
Poszukując rozwiązania natrafiłem w końcu na tę stronę. W skrócie trik polega na wykorzystaniu wirtualnego adaptera WiFi, który jest domyślnie zainstalowany w Windows 7 [...]]]></description>
			<content:encoded><![CDATA[<p>Niedawno kupiłem sobie w końcu router z AP, ale zanim jeszcze to zrobiłem chciałem podłączyć PS3 do internetu za pomocą sieci WLAN. Niestety konsola nie obsługuje sieci Ad-hoc, więc potrzebny był AP.<br />
Poszukując rozwiązania natrafiłem w końcu na <a href="http://bink.nu/news/windows-7-as-an-wifi-accesspoint.aspx">tę stronę</a>. W skrócie trik polega na wykorzystaniu wirtualnego adaptera WiFi, który jest domyślnie zainstalowany w Windows 7 do utworzenia sieci bezprzewodowej w trybie AP. Oczywiście nie wszystkie karty sieciowe obsługują ten tryb. Lista obsługiwanych chipsetów również znajduje się na pod tym linkiem. Dodatkowo dodam od siebie, że karta Atheros AR9285 z Eee PC obsługuje ten tryb, natomiast Atheros AR5006EG już nie.</p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2010/03/05/karta-wifi-jako-access-point/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nowy nabytek &#8211; Playstation 3 + Uncharted</title>
		<link>http://netrix.gamedev.pl/index.php/2010/02/17/nowy-nabytek-playstation-3-uncharted/</link>
		<comments>http://netrix.gamedev.pl/index.php/2010/02/17/nowy-nabytek-playstation-3-uncharted/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 00:36:16 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Cell]]></category>
		<category><![CDATA[PS3]]></category>
		<category><![CDATA[Rozrywka]]></category>
		<category><![CDATA[Uncharted]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=405</guid>
		<description><![CDATA[Jakiś czas temu postanowiłem w końcu kupić maszynkę do grania, ponieważ do tej pory najmocniejszym sprzętem do tego celu był komputer z P4 2.8 GHz + GeForce 6200, więc niezbyt mocny zestaw. Mój wybór padł na Playstation 3 w starszej wersji, czyli sprzęt do grania + dostęp do potężnego procesora Cell z poziomu linuksa (którego [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu postanowiłem w końcu kupić maszynkę do grania, ponieważ do tej pory najmocniejszym sprzętem do tego celu był komputer z P4 2.8 GHz + GeForce 6200, więc niezbyt mocny zestaw. Mój wybór padł na Playstation 3 w starszej wersji, czyli sprzęt do grania + dostęp do potężnego procesora Cell z poziomu linuksa (którego na nowszych wersjach zainstalować nie można). Wraz z konsolką kupiłem również grę Uncharted, oczywiście do testów :D. Jakie są moje wrażenia ?</p>
<p>Muszę przyznać, że to jest to czego mi brakowało. Konsolka radzi sobie świetnie z najnowszymi grami. Nie ma problemów z wymaganiami sprzętowymi, które są udręką pecetów, a zestaw TV Full HD + kino domowe komponuje się z nią idealnie. Dodatkowo bezprzewodowy kontroler SIXAXIS z DualShock sprawia że wrażenia z gry są jeszcze większe. Oczywiście dalej pozostaję w przekonaniu, że w strzelanki i strategie na konsolach grać się nie da, bo do tego potrzebne jest biurko, myszka, klawiatura i monitor, ale w platformówki i przygodówki takie jak np. <a href="http://www.gry-online.pl/s016.asp?ID=7214">Uncharted</a> gra się naprawdę świetnie.</p>
<p>Dodatkową zaletą PS3 w porównaniu do Xbox360 jest całkowicie darmowe PSNetwork, do którego można się zarejestrować bez żadnego oszustwa związanego z lokalizacją. W samej sieci PSN dostępne jest wiele gier do kupienia oraz wersji demonstracyjnych. Tych ostatnich (po wpisaniu w wyszukiwarkę frazy &#8220;demo&#8221;) jest ponad 150, więc postanowiłem sobie ich trochę naściągać. </p>
<p>Jeśli chodzi o grę <a href="http://www.gry-online.pl/s016.asp?ID=7214">Uncharted</a>, to jest to produkcja typu AAA i przy okazji exclusive na PS3. Gra jest przygodówką z elementami strzelanki o poszukiwaniu skarbu El Dorado. Głównym bohaterem jest Nathan Drake, który jest swoistą kopią filmowego Indiany Jonesa. Grafika w Uncharted jest naprawdę piękna. Oświetlenie genialnie oddaje klimat, a świetnie dobrane materiały i normal-mapping sprawiają, że gra jest niezwykle szczegółowa. Dopracowany jest praktycznie każdy detal jak np. mokre ubranie po wyjściu z wody. W samej grze nie ma również żadnego ładowania między poziomami, a AI zachowuje się w całkiem inteligentnie. Fabuła jest wciągająca i muszę przyznać, że kilka razy mnie zaskoczyła.</p>
<p>Postaram się napisać kiedyś co nieco o linuksie na PS3, jeśli będę miał okazję i czas się tym zająć :).</p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2010/02/17/nowy-nabytek-playstation-3-uncharted/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pobieranie kodu HTML stron w C++ za pomocą WinSock2</title>
		<link>http://netrix.gamedev.pl/index.php/2010/01/21/pobieranie-kodu-html-stron-w-c-za-pomoca-winsock2/</link>
		<comments>http://netrix.gamedev.pl/index.php/2010/01/21/pobieranie-kodu-html-stron-w-c-za-pomoca-winsock2/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 00:32:11 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[WinSock]]></category>
		<category><![CDATA[Źródła]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=374</guid>
		<description><![CDATA[Dzisiejsza notka będzie o tym jak pobrać kod HTML strony WWW w aplikacji C++ korzystając z WinSock2. 
Pierwszą rzeczą, którą trzeba wiedzieć jest to w jaki sposób robi to przeglądarka internetowa. Zacznę od tego jak wygląda typowy adres strony WWW na przykładzie adresu do działu artykułów na stronie http://www.gamedev.pl/:

http://www.gamedev.pl/articles.php

Powyższy adres składa się z kilku części:

&#8220;http://&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiejsza notka będzie o tym jak pobrać kod HTML strony WWW w aplikacji C++ korzystając z WinSock2. </p>
<p>Pierwszą rzeczą, którą trzeba wiedzieć jest to w jaki sposób robi to przeglądarka internetowa. Zacznę od tego jak wygląda typowy adres strony WWW na przykładzie adresu do działu artykułów na stronie <a href="http://www.gamedev.pl/">http://www.gamedev.pl/</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">http://www.gamedev.pl/articles.php</pre></div></div>

<p>Powyższy adres składa się z kilku części:</p>
<ul>
<li><strong>&#8220;http://&#8221;</strong> &#8211; protokół reprezentujący sposób transmisji danych, dzięki niemu przeglądarka wie w jaki sposób komunikować się z serwerem oraz na jaki port wysyłać żądania</li>
<li><strong>&#8220;www.gamedev.pl&#8221;</strong> &#8211; domena na którą będzie wysłane zapytanie &#8211; podany adres jest tłumaczony na adres IP przez serwer DNS</li>
<li><strong>&#8220;/articles.php&#8221;</strong> &#8211; adres żądanego plik lub żądanie dla serwera WWW, które aplikacja wykorzystuje do stworzenia nagłówka</li>
</ul>
<p>Przeglądarka mając adres strony tworzy odpowiedni nagłówek, który zostaje wysłany do serwera WWW. Jak już wspomniałem adresem tego serwera jest domena zawarta w adresie WWW natomiast port jest określany na podstawie protokołu, czyli w przypadku &#8220;http://&#8221; jest to port 80. Nagłówek HTTP powinien zawierać następujące elementy:</p>
<ul>
<li>rodzaj zapytania &#8211; w przypadku pobrania strony jest to &#8220;GET&#8221;</li>
<li>adres żądanego pliku lub żądanie &#8211; to co chcemy od serwera otrzymać, najczęściej jest to adres pliku na serwerze, czyli &#8220;/articles.php&#8221; w tym przykładzie</li>
<li>wersja protokołu &#8211; typowo HTTP/1.1</li>
<li>domena hosta</li>
</ul>
<p>Dodatkowo, jeśli jest to konieczne, można wysłać informacje o tym, jakiej przeglądarki używamy (UserAgent), informacje o akceptowanych plikach, kodowaniu, ciasteczkach oraz czasie trwania połączenia, więcej można dowiedzieć się z <a href="http://pl.wikipedia.org/wiki/Lista_nag%C5%82%C3%B3wk%C3%B3w_HTTP">tej strony wiki</a> oraz samych nagłówków, które wysyła przeglądarka. Jako ciekawostkę mogę dodać, że istnieje fajna wtyczka dla Firefoxa, która pokazuje nagłówki wysyłane przez przeglądarkę &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/3829">Live HTTP headers</a>.</p>
<p>Oto nagłówek uzyskany z pomocą tej wtyczki podczas łączenia się do przykładowej strony:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="" style="font-family:monospace;">GET /articles.php HTTP/<span style="">1.1</span>
Host: www.gamedev.pl
User-Agent: Mozilla/<span style="">5.0</span> <span class="br0">&#40;</span>Windows; U; Windows NT <span style="">6.1</span>; pl; rv:1.9.1.7<span class="br0">&#41;</span> Gecko/<span style="">20091221</span> Firefox/3.5.7
Accept: text/html,application/xhtml+xml,application/xml;q=<span style="">0.9</span>,*/*;q=<span style="">0.8</span>
Accept-Language: pl,en-us;q=<span style="">0.7</span>,en;q=<span style="">0.3</span>
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-<span style="">8859</span>-<span style="">2</span>,utf-<span style="">8</span>;q=<span style="">0.7</span>,*;q=<span style="">0.7</span>
Keep-Alive: <span style="">300</span>
Connection: keep-alive</pre></td></tr></table></div>

<p>Jak widać jest on trochę długi (usunąłem informacje o ciasteczkach, nie są tutaj potrzebne). Aby pobrać kod strony wystarczą tak naprawdę dwie pierwsze linijki. Jednak ważną rzeczą jest, aby po każdej linijce występowała para znaków \r\n a koniec nagłówka reprezentowany był przez dwie pary tych znaków. W przypadku, gdy nagłówek nie będzie zawierał tak skonstruowanego nagłówka, serwer po prostu udrzuci zapytanie.</p>
<p>Teraz pora na kod C++ z WinSock2, oto on:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// Usuwa zbędne definicje z nagłówka</span>
<span style="color: #339900;">#ifndef WIN32_LEAN_AND_MEAN</span>
<span style="color: #339900;">#define WIN32_LEAN_AND_MEAN</span>
<span style="color: #339900;">#endif</span>
&nbsp;
<span style="color: #339900;">#include &lt;winsock2.h&gt;</span>
<span style="color: #339900;">#include &lt;ws2tcpip.h&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
&nbsp;
<span style="color: #339900;">#define BUFFER_SIZE 2048</span>
<span style="color: #339900;">#pragma comment(lib, &quot;ws2_32.lib&quot;)	// Niezbędna biblioteka</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">//************************************************</span>
	<span style="color: #666666;">// Inicjalizacja WinSock2</span>
	<span style="color: #666666;">//************************************************</span>
	WSADATA wsaData<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> error<span style="color: #008080;">;</span>
	ZeroMemory<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>wsaData, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>wsaData<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>FAILED<span style="color: #008000;">&#40;</span>WSAStartup<span style="color: #008000;">&#40;</span>MAKEWORD<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span>,<span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>, <span style="color: #000040;">&amp;</span>wsaData<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>	<span style="color: #666666;">// MAKEWORD(2,2) - Wersja WinSock</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">char</span> recvBuffer<span style="color: #008000;">&#91;</span>BUFFER_SIZE<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	addrinfo hint<span style="color: #008080;">;</span>					<span style="color: #666666;">// Struktura przechowująca dane o połączeniu</span>
	addrinfo<span style="color: #000040;">*</span> wsResult<span style="color: #008080;">;</span>				<span style="color: #666666;">// Wskaźnik na rezultat</span>
	SOCKET pSocket<span style="color: #008080;">;</span>					<span style="color: #666666;">// Właściwy pSocket</span>
&nbsp;
	ZeroMemory<span style="color: #008000;">&#40;</span>recvBuffer, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>recvBuffer<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	ZeroMemory<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>hint, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>hint<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	hint.<span style="color: #007788;">ai_family</span> <span style="color: #000080;">=</span> AF_UNSPEC<span style="color: #008080;">;</span>		<span style="color: #666666;">// Rodzaj transmisji - nieokreślony</span>
	hint.<span style="color: #007788;">ai_socktype</span> <span style="color: #000080;">=</span> SOCK_STREAM<span style="color: #008080;">;</span>	<span style="color: #666666;">// Typ gniazda - strumień</span>
	wsResult <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	pSocket <span style="color: #000080;">=</span> INVALID_SOCKET<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//************************************************</span>
	<span style="color: #666666;">// Tworzenie zapytania	</span>
	<span style="color: #666666;">//************************************************</span>
&nbsp;
	<span style="color: #666666;">// Wyciąganie informacji z adresu</span>
	string httpAddress <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;http://www.gamedev.pl/articles.php&quot;</span><span style="color: #008080;">;</span>
	string temp <span style="color: #000080;">=</span> httpAddress.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>httpAddress.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;http://&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;http://&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>	<span style="color: #666666;">// Tylko http:// więc można wyciąć</span>
	string domain <span style="color: #000080;">=</span> temp.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, temp.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'/'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>								<span style="color: #666666;">// Domena</span>
	string addressTail <span style="color: #000080;">=</span> temp.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>temp.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'/'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>								<span style="color: #666666;">// Żądanie pliku</span>
&nbsp;
	<span style="color: #666666;">// Tworzenie nagłówka</span>
	temp <span style="color: #000080;">=</span> string<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;GET &quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> addressTail <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot; HTTP/1.1<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
			   <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot;Host: &quot;</span> <span style="color: #000040;">+</span> domain <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
			   <span style="color: #666666;">//+ &quot;User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5\r\n&quot;</span>
			   <span style="color: #666666;">//+ &quot;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n&quot;</span>
			   <span style="color: #666666;">//+ &quot;Accept-Language: pl,en-us;q=0.7,en;q=0.3\r\n&quot;</span>
			   <span style="color: #666666;">//+ &quot;Accept-Encoding: gzip,deflate\r\n&quot;</span>
			   <span style="color: #666666;">//+ &quot;Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7\r\n&quot;</span>
			   <span style="color: #666666;">//+ &quot;Keep-Alive: 300\r\n&quot;</span>
			   <span style="color: #666666;">//+ &quot;Connection: keep-alive\r\n&quot;</span>
			   <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Pobieranie IP serwera z serwera DNS</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>FAILED<span style="color: #008000;">&#40;</span>getaddrinfo<span style="color: #008000;">&#40;</span>domain.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, TEXT<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;80&quot;</span><span style="color: #008000;">&#41;</span>, <span style="color: #000040;">&amp;</span>hint, <span style="color: #000040;">&amp;</span>wsResult<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">// Wskaźnik na zwrócone adresy</span>
	addrinfo<span style="color: #000040;">*</span> ptr <span style="color: #000080;">=</span> wsResult<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Tworzenie socketu</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>FAILED<span style="color: #008000;">&#40;</span>socket<span style="color: #008000;">&#40;</span>wsResult<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ai_family, wsResult<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ai_socktype, wsResult<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ai_protocol<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
		freeaddrinfo<span style="color: #008000;">&#40;</span>wsResult<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">//************************************************</span>
	<span style="color: #666666;">// Wysyłanie zapytania	</span>
	<span style="color: #666666;">//************************************************</span>
&nbsp;
	<span style="color: #666666;">// Łączenie się do serwera</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>FAILED<span style="color: #008000;">&#40;</span>connect<span style="color: #008000;">&#40;</span>pSocket, ptr<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ai_addr, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ptr<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ai_addrlen<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">goto</span> Error<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">// Wysyłanie nagłówka</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>FAILED<span style="color: #008000;">&#40;</span>send<span style="color: #008000;">&#40;</span>pSocket, temp.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, temp.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">goto</span> Error<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">// Kończenie wysyłania</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>FAILED<span style="color: #008000;">&#40;</span>shutdown<span style="color: #008000;">&#40;</span>pSocket, SD_SEND<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">goto</span> Error<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">//************************************************</span>
	<span style="color: #666666;">// Odbieranie danych</span>
	<span style="color: #666666;">//************************************************</span>
&nbsp;
	string answer<span style="color: #008080;">;</span>
	<span style="color: #666666;">// Odbieranie danych</span>
	<span style="color: #0000ff;">do</span>
	<span style="color: #008000;">&#123;</span>
		ZeroMemory<span style="color: #008000;">&#40;</span>recvBuffer, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>recvBuffer<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		error <span style="color: #000080;">=</span> recv<span style="color: #008000;">&#40;</span>pSocket, recvBuffer, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>recvBuffer<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>error <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			answer <span style="color: #000040;">+</span><span style="color: #000080;">=</span> string<span style="color: #008000;">&#40;</span>recvBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>error <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	closesocket<span style="color: #008000;">&#40;</span>pSocket<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>		<span style="color: #666666;">// Zamknięcie socketu</span>
	freeaddrinfo<span style="color: #008000;">&#40;</span>wsResult<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>		<span style="color: #666666;">// oraz zwolnienie struktury addrinfo</span>
&nbsp;
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Kod HTML strony <span style="color: #000099; font-weight: bold;">\&quot;</span>http://www.gamedev.pl/articles.php<span style="color: #000099; font-weight: bold;">\&quot;</span>:<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>%s&quot;</span>, answer.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
Error<span style="color: #008080;">:</span>
	closesocket<span style="color: #008000;">&#40;</span>pSocket<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	freeaddrinfo<span style="color: #008000;">&#40;</span>wsResult<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Wynikiem tego kodu jest wyświetlony kod HTML przykładowej strony.</p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2010/01/21/pobieranie-kodu-html-stron-w-c-za-pomoca-winsock2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Environmental mapping + skybox</title>
		<link>http://netrix.gamedev.pl/index.php/2009/12/08/environmental-mapping-skybox/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/12/08/environmental-mapping-skybox/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 09:39:28 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[NIne]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Environmental Mapping]]></category>
		<category><![CDATA[HLSL]]></category>
		<category><![CDATA[Shadery]]></category>
		<category><![CDATA[Skybox]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=254</guid>
		<description><![CDATA[Tym razem będzie mały update dotyczący silnika. Niby nic, ale można się pochwalić.
Po pierwsze Environmental mapping, czyli proste przybliżenie zjawiska odbicia światła na powierzchni ciała oraz załamania światła na granicy dwóch ośrodków. Wymaga dostarczenia tylko dodatkowej tekstury sześciennej (cube-mapa) oraz skorzystania z dwóch dodatkowych funkcji HLSL: refract i reflect. Można go wzbogacić dodatkowo o efekt [...]]]></description>
			<content:encoded><![CDATA[<p>Tym razem będzie mały update dotyczący silnika. Niby nic, ale można się pochwalić.</p>
<p><a href="http://netrix.gamedev.pl/wp-content/2009/12/etuymcryp.png"><img class="alignright size-medium wp-image-253" title="etuymcryp" src="http://netrix.gamedev.pl/wp-content/2009/12/etuymcryp-300x225.png" alt="etuymcryp" width="200" height="150" /></a>Po pierwsze Environmental mapping, czyli proste przybliżenie zjawiska odbicia światła na powierzchni ciała oraz załamania światła na granicy dwóch ośrodków. Wymaga dostarczenia tylko dodatkowej tekstury sześciennej (cube-mapa) oraz skorzystania z dwóch dodatkowych funkcji HLSL: refract i reflect. Można go wzbogacić dodatkowo o efekt Fresnela i rozszczepienie chromatyczne. Całość wygląda jak na screenie obok. Efekt ten nie jest trudny do zaimplementowania, więc szczegółów implementacyjnych nie będzie, zresztą są one w książce <a href="http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter07.html" target="_blank">CG Tutorial</a>.</p>
<p>Kolejną rzeczą jest skybox. Jak nazwa wskazuje, jest to pudełko z tłem nieba, które powoduje, że scena z obiektami nie wygląda po prostu pusto. Poniżej przedstawiam trzy kroki rysowania skyboxa:</p>
<ol>
<li>Potrzebne jest pudełko wraz z teksturą, którą jest już wspomniana wcześniej cube-mapa.<strong> </strong>Biblioteka D3DX posiada do tego odpowiednią funkcję: D3DXCreateBox(), która jako parametry przyjmuje wymiary pudełka. Najlepiej jest stworzyć sześcian 1:1:1.</li>
<li>Pudełko powinno obracać się razem z kamerą, ale nie może zmieniać swojej pozycji. Aby to osiągnąć należy użyć tylko macierzy widoku i projekcji. przy czym ostatni wiersz tej pierwszej powinien mieć takie wartości: (0, 0, 0, 1).</li>
<li>Skybox powinien być pierwszym elementem rysowanym na scenie, a dodatkowym warunkiem koniecznym by był on tłem całej sceny jest wyłączenie zapisu do ZBuffera. Dzięki temu każdy kolejny obiekt sceny będzie rysowany zawsze przed skyboxem. Aby odczytać kolor tekstury zamiast funkcji tex2D należy wykorzystać funkcję texCUBE, do której jako współrzędne tekstury przekazuje się pozycję danego pixela.</li>
</ol>
<p>Jak widać nie jest to skomplikowane, a dzięki temu scena wygląda o wiele lepiej.</p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/12/08/environmental-mapping-skybox/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Swing czyli taniec z Javą</title>
		<link>http://netrix.gamedev.pl/index.php/2009/10/26/swing-czyli-taniec-z-java/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/10/26/swing-czyli-taniec-z-java/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 02:03:17 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[Uczelnia]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PWr]]></category>
		<category><![CDATA[Swing]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/index.php/2009/10/26/swing-czyli-taniec-z-java/</guid>
		<description><![CDATA[
Tym razem postawiłem napisać o czymś, czym się aktualnie zajmuję na uczelni czyli programowaniem w Javie, a konkretniej programowanie interfejsu graficznego w Swingu. Java Swing jest w pełni obiektową (jak sam język) biblioteką graficzną służącą do majstrowania okienkowego GUI (podobnie jak QT, czy też Windows Forms). Korzystanie z tej biblioteki jest bardzo proste, niestety ma [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://netrix.gamedev.pl/wp-content/2009/10/200910263.png"><img style="border-right-width: 0px; margin: 5px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2009-10-26(3)" border="0" alt="2009-10-26(3)" align="right" src="http://netrix.gamedev.pl/wp-content/2009/10/200910263_thumb.png" width="244" height="211" /></a>
<p>Tym razem postawiłem napisać o czymś, czym się aktualnie zajmuję na uczelni czyli programowaniem w Javie, a konkretniej programowanie interfejsu graficznego w Swingu. Java Swing jest w pełni obiektową (jak sam język) biblioteką graficzną służącą do majstrowania okienkowego GUI (podobnie jak QT, czy też Windows Forms). Korzystanie z tej biblioteki jest bardzo proste, niestety ma ona jedną podstawową wadę (oprócz bycia w Javie) – domyślnie okienko posiada własny style, więc nie wykorzystuje systemowego, dlatego może się wyróżniać.</p>
<p>Tworzenie okienek w Swingu jest bardzo proste, przykładowo wyświetlenie pustego okienka wygląda następująco:    </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.SwingUtilities</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JFrame</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Okienko
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #003399;">SwingUtilities</span>.<span style="color: #006633;">invokeLater</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Runnable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JFrame</span> f <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JFrame</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            f.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello World!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            f.<span style="color: #006633;">setDefaultCloseOperation</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">JFrame</span>.<span style="color: #006633;">EXIT_ON_CLOSE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            f.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">290</span>, <span style="color: #cc66cc;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            f.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><a href="http://netrix.gamedev.pl/wp-content/2009/10/200910264.png"><img style="border-right-width: 0px; margin: 5px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2009-10-26(4)" border="0" alt="2009-10-26(4)" align="right" src="http://netrix.gamedev.pl/wp-content/2009/10/200910264_thumb.png" width="244" height="211" /></a>
<p>Ten krótki kod tworzy prostą formatkę <em>JFrame</em>, a następnie ustawia jej tytuł, rozmiar, akcje zamnięcia i na końcu pokazuje okienko. Wszystko to jest wykonywane w funkcji <em>run()</em> anonimowej klasy wewnętrznej po interfejsie <em>Runnable</em> (swoją drogą najpiękniejszy mechanizm w Javie :)), która działa w osobnym wątku biblioteki Swing. Jak widać jest to bardzo proste.</p>
<p>Co jednak gdy chcemy stworzyć coś bardziej wyszukanego? Wtedy najlepiej rozszerzyć (odziedziczyć) klasę <em>JFrame</em>. Mając własną klasę o wiele łatwiej wszystkim zarządzać wszystkimi komponentami, które znajdują się na formatce. Poniższy kod tworzy formatkę i wyświetla na niej przycisk i pole tekstowe:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.FlowLayout</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Okienko <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">JButton</span> bPisz <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JButton</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Pisz&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">JTextArea</span> textArea <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextArea</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>, <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000000; font-weight: bold;">public</span> Okienko<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      setTitle<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello World!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      setDefaultCloseOperation<span style="color: #009900;">&#40;</span><span style="color: #003399;">JFrame</span>.<span style="color: #006633;">EXIT_ON_CLOSE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      setSize<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">290</span>, <span style="color: #cc66cc;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      setLayout<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FlowLayout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      add<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JScrollPane</span><span style="color: #009900;">&#40;</span>textArea<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      add<span style="color: #009900;">&#40;</span>bPisz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #003399;">SwingUtilities</span>.<span style="color: #006633;">invokeLater</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Runnable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">new</span> Okienko<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Powyższy kod jest już troszkę dłuższy, a jego zadanie polega na wyświetleniu na formatce przycisku oraz pola tekstowego. Pojawiły się tutaj dodatkowe komponenty takie jak: <em>JButton</em>, <em>JTextArea</em>, <em>JScrollPane</em> oraz funkcja <em>setLayout()</em>. Dwa pierwsze są oczywiste, bo jest to wspomniany przycisk i pole tekstowe, natomiast <em>JScrollPane</em> jest dodatkowym komponentem dodającym do <em>JTextArea</em> paski przesuwania (to wszystko przez proste opakowanie go). Funkcja <em>setLayout()</em> ustawia sposób rozmieszczenia kontrolek. Domyślnym układem jest <em>BorderLayout</em>, który kontrolki układa jedna na drugiej, natomiast <em>FlowLayout</em> ustawia je w taki sposób aby wszystkie były widoczne (po szczegóły zapraszam do dokumentacji :)).</p>
<p><a href="http://netrix.gamedev.pl/wp-content/2009/10/200910265.png"><img style="border-right-width: 0px; margin: 5px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2009-10-26(5)" border="0" alt="2009-10-26(5)" align="right" src="http://netrix.gamedev.pl/wp-content/2009/10/200910265_thumb.png" width="244" height="211" /></a>
<p>No cóż mamy przycisk, ale teraz co zrobić, aby po jego naciśnięciu coś się stało. Obsługa akcji na kontrolkach opiera się na zdarzeniach, czyli w przypadku naciśnięcia przycisku wywoływana jest odpowiednia funkcja, która to zdarzenie potrafi obsłużyć. W takim razie jak obsłużyć akcję wciśnięcia przycisku? W tym celu należy dodać do przycisku odbiorcę zdarzenia za pomocą funkcji <em>addActionListener()</em>. Funkcja ta przyjmuje referencję do interfejsu <em>ActionListener</em>, z którego należy zaimplementować funkcję <em>actionPerformed()</em>. Właśnie ta funkcja zostanie wywołana w momencie wystąpienia zdarzenia.</p>
<p>Wynikowy kod: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.FlowLayout</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Okienko <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">JButton</span> bPisz <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JButton</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Pisz&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">JTextArea</span> textArea <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextArea</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>, <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000000; font-weight: bold;">public</span> Okienko<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      setTitle<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello World!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      setDefaultCloseOperation<span style="color: #009900;">&#40;</span><span style="color: #003399;">JFrame</span>.<span style="color: #006633;">EXIT_ON_CLOSE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      setSize<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">290</span>, <span style="color: #cc66cc;">250</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
      bPisz.<span style="color: #006633;">addActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> actionPerformed<span style="color: #009900;">&#40;</span><span style="color: #003399;">ActionEvent</span> e<span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#123;</span>
            textArea.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello World &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      setLayout<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FlowLayout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      add<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JScrollPane</span><span style="color: #009900;">&#40;</span>textArea<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      add<span style="color: #009900;">&#40;</span>bPisz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #003399;">SwingUtilities</span>.<span style="color: #006633;">invokeLater</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Runnable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">new</span> Okienko<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/10/26/swing-czyli-taniec-z-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SDKMeshToXConverter</title>
		<link>http://netrix.gamedev.pl/index.php/2009/09/25/sdkmeshtoxconverter/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/09/25/sdkmeshtoxconverter/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 22:14:48 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[Uczelnia]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[SDKMesh]]></category>
		<category><![CDATA[X]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=229</guid>
		<description><![CDATA[Już trochę czasu temu postanowiłem napisać konwerter wspomnianego formatu .sdkmesh do .x i w końcu dopiąłem swego. Mimo tego, że jak już wcześniej wspomniałem, format ten nie nadaje się do modeli animowanych (posiada informacje o animacji, ale nie ma informacji o kościach), można ostatecznie wyciągnąć z niego model statyczny.
To właśnie robi poniższa aplikacja. Wystarczy tylko [...]]]></description>
			<content:encoded><![CDATA[<p>Już trochę czasu temu postanowiłem napisać konwerter wspomnianego formatu .sdkmesh do .x i w końcu dopiąłem swego. Mimo tego, że jak już wcześniej wspomniałem, format ten nie nadaje się do modeli animowanych (posiada informacje o animacji, ale nie ma informacji o kościach), można ostatecznie wyciągnąć z niego model statyczny.</p>
<p>To właśnie robi poniższa aplikacja. Wystarczy tylko przeciągnąć plik .sdkmesh na plik aplikacji i w katalogu mesha źródłowego pojawia się wygenerowany plik w formacie .x.</p>
<p><a href="http://netrix.republika.pl/SDKMeshToXConverter.7z">Pobierz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/09/25/sdkmeshtoxconverter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kilka zmian</title>
		<link>http://netrix.gamedev.pl/index.php/2009/09/18/kilka-zmian/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/09/18/kilka-zmian/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 20:55:48 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[NIne]]></category>
		<category><![CDATA[Animacja szkieletowa]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Skinning]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/index.php/2009/09/18/kilka-zmian/</guid>
		<description><![CDATA[Stwierdziłem, że wypadałoby się wreszcie odezwać po kolejnej długiej nieobecności. W końcu udało mi się zaimplementować Skinning w silniku, oczywiście bazując na przykładzie SkinnedMesh z DX SDK. W praktyce zrobiłem&#160; to co było w ów sample’u, a jedyną różnicą jest miejsce położenia kości, które u mnie znajdują się w hierarchii zaraz za modelem. Samą hierarchię [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://netrix.gamedev.pl/wp-content/2009/09/rpot.png"><img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="rpot" border="0" alt="rpot" align="right" src="http://netrix.gamedev.pl/wp-content/2009/09/rpot_thumb.png" width="244" height="184" /></a>Stwierdziłem, że wypadałoby się wreszcie odezwać po kolejnej długiej nieobecności. W końcu udało mi się zaimplementować Skinning w silniku, oczywiście bazując na przykładzie SkinnedMesh z DX SDK. W praktyce zrobiłem&#160; to co było w ów sample’u, a jedyną różnicą jest miejsce położenia kości, które u mnie znajdują się w hierarchii zaraz za modelem. Samą hierarchię tworzą modele (zwykłe drzewo, które ustanawia hierarchię na podstawie której tworzone są wynikowe macierze świata dla tych modeli). Póki co mam tylko dwa rodzaje modeli: StaticMesh i SkinnedMesh, ale bez problemu można do niej wstawić innego rodzaju obiekty, które występują na scenie.</p>
<p>Kolejną sprawą są stosowane przeze mnie formaty. Otóż w poprzedniej notce napisałem jakoby format .x był bardzo prostym formatem. Nic bardziej mylnego, jest on bardziej złożony niż myślałem (chodzi mi tylko o format modeli, nie o system zapisu danych). W standardowym pliku .x może znajdować się więcej modeli, które są ułożone w hierarchię, a do ich załadowania służy funkcja: </p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">D3DXLoadMeshHierarchyFromX<span style="color: #008000;">&#40;</span>…<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

</p>
<p>Funkcja ta ładuje nie tyko wspomnianą hierarchię meshy, ale również informacje o kościach i&#160; animacji. Niestety format materiałów dalej nie zawiera nic więcej poza strukturą D3DMATERIAL9 i nazwą tekstury diffuse.</p>
<p>Natomiast format SDKMesh jest jeszcze gorszy (mimo jednej zalety, że posiada nazwy dla tekstur normal i specular), ponieważ nie posiada on żadnych informacji o kościach mimo, że są informacje o animacji. Po prostu wczytywany mesh jest już przekonwertowany i gotowy do wyświetlenia (co blokuje możliwość prostego użycia ID3DXSkinInfo, którym mógłbym software’owo przekształcić model np. do kolizji per vertex).</p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/09/18/kilka-zmian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SDKMeshInfo</title>
		<link>http://netrix.gamedev.pl/index.php/2009/08/03/sdkmeshinfo/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/08/03/sdkmeshinfo/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 22:20:44 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[Użyki]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[SDKMesh]]></category>
		<category><![CDATA[X]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=196</guid>
		<description><![CDATA[Pisząc różne efekty graficzne, w pewnym momencie możemy stwierdzić, że potrzebujemy jakiegoś innego modelu. Wtedy nasuwa się również pytanie &#8220;skąd wziąć taki model?&#8221;. Tutaj przychodzi z pomocą DirectX SDK, które posiada dużą ilość różnych modeli w formacie .x oraz .sdkmesh. Z formatem .x można sobie poradzić funkcją

D3DXLoadMeshFormX

Funkcja ta wczytuje i parsuje model, zwracając wskaźnik, z [...]]]></description>
			<content:encoded><![CDATA[<p>Pisząc różne efekty graficzne, w pewnym momencie możemy stwierdzić, że potrzebujemy jakiegoś innego modelu. Wtedy nasuwa się również pytanie &#8220;skąd wziąć taki model?&#8221;. Tutaj przychodzi z pomocą DirectX SDK, które posiada dużą ilość różnych modeli w formacie .x oraz .sdkmesh. Z formatem .x można sobie poradzić funkcją</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">D3DXLoadMeshFormX</pre></div></div>

<p>Funkcja ta wczytuje i parsuje model, zwracając wskaźnik, z którego można już korzystać.</p>
<p><a href="http://netrix.gamedev.pl/wp-content/2009/08/pike.png"><img class="alignright size-medium wp-image-197" title="SDKMeshInfo" src="http://netrix.gamedev.pl/wp-content/2009/08/pike-300x180.png" alt="SDKMeshInfo" width="300" height="180" /></a>Niestety format .x jest bardzo prosty, ponieważ zawiera on tylko jeden zestaw materiałów i teksturę diffuse na subset. Problem ten rozwiązano tworząc nowy format z rozszerzeniem .sdkmesh. Powstał on i jest wykorzystywany na potrzeby przykładów Direct3D 10. Pliki tego formatu mogą zawierać kilka modeli, podzielonych na kilka subsetów. Materiały zostały rozszerzone o tekstury normal i specular. Dodane zostały również informacje o klatkach animacji, natomiast szczegóły danej klatki zawiera osobny plik z rozszerzeniem .sdkmesh_anim. Więcej szczegółów dotyczących tego formatu znajduje się w dokumentacji pod hasłem &#8220;Overview of the SDK Mesh File Format&#8221;.</p>
<p>Postanowiłem się zainteresować tym formatem nie tylko z powodu tego, że część modeli jest w nim zapisana, ale potrzebowałem modeli, które mógłbym wykorzystać do mojej zabawy z animacją opartą na klatkach kluczowych. Właśnie z tego powodu napisałem aplikację, którą tu zamieszczam. SDKMeshInfo jest programem do podglądu bebechów plików .sdkmesh. Nie posiada on opcji ich wyświetlania, ale pokazuje pełne dane z nagłówków zawartych we wskazanym pliku.</p>
<p><a title="SDKMeshInfo.zip" href="http://netrix.republika.pl/SDKMeshInfo.zip" target="_blank">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/08/03/sdkmeshinfo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shaderki</title>
		<link>http://netrix.gamedev.pl/index.php/2009/07/26/shaderki/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/07/26/shaderki/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 00:46:39 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[NIne]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[HLSL]]></category>
		<category><![CDATA[Shadery]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=190</guid>
		<description><![CDATA[Postanowiłem wreszcie zająć się wyświetlaniem grafiki opartej na shaderach. Stworzyłem sobie prosty framework oparty na moim &#8220;silniku&#8221;, który jest aktualnie tylko szkieletem aplikacji. Framework składa się z kilku klas, których zadaniem jest uprościć wykonywanie różnych rzeczy. Aktualnie w zestawie jest kamerka FPP, prosty system cząsteczek oraz klasy do wczytywania modeli i zarządzania efektami.
Na dole tej [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://netrix.gamedev.pl/wp-content/2009/07/nmmj.png"><img class="alignright size-medium wp-image-191" title="Aplikacja" src="http://netrix.gamedev.pl/wp-content/2009/07/nmmj-300x225.png" alt="Aplikacja" width="300" height="225" /></a>Postanowiłem wreszcie zająć się wyświetlaniem grafiki opartej na shaderach. Stworzyłem sobie prosty framework oparty na moim &#8220;silniku&#8221;, który jest aktualnie tylko szkieletem aplikacji. Framework składa się z kilku klas, których zadaniem jest uprościć wykonywanie różnych rzeczy. Aktualnie w zestawie jest kamerka FPP, prosty system cząsteczek oraz klasy do wczytywania modeli i zarządzania efektami.</p>
<p>Na dole tej notki znajduje się link do aplikacji, która reprezentuje aktualny stan kodu. Aplikacja wyświetla 4 modele wczytane z plików w formacie .x, 1 model z formatu .sdkmesh oraz cząsteczki, których pozycja obliczana jest w shaderze. Światło użyte w scenie jest punktowe, a obliczenia są wykonywane w pixel shaderze. Materiały modeli pochodzą z ich plików, dlatego nie wszystko wygląda super ;).</p>
<p>Kamerkę obsługuje się za pomocą myszy i klawiszy WSAD, a światło za pomocą strzałek oraz klawiszy PG_UP i PG_DN.</p>
<p><a title="Shaderki" href="http://netrix.republika.pl/WorkingDir.exe" target="_blank">Pobierz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/07/26/shaderki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NViDo v0.3 Release</title>
		<link>http://netrix.gamedev.pl/index.php/2009/07/16/nvido-v03-release/</link>
		<comments>http://netrix.gamedev.pl/index.php/2009/07/16/nvido-v03-release/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 20:31:41 +0000</pubDate>
		<dc:creator>Netrix</dc:creator>
				<category><![CDATA[Użyki]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[jDownloader]]></category>
		<category><![CDATA[NViDo]]></category>
		<category><![CDATA[Użytki]]></category>
		<category><![CDATA[Youtube]]></category>

		<guid isPermaLink="false">http://netrix.gamedev.pl/?p=172</guid>
		<description><![CDATA[Tym razem chciałbym przedstawić mój nowy program. NViDo jest to aplikacja do pobierania filmów z serwisów takich jak Youtube. Zaletą programu jest prostota obsługi, która może sprowadzić się do skopiowania linku do schowka i wciśnięciu skrótu klawiszowego &#8220;SHIFT + ALT + D&#8221;. Innymi funkcjami aplikacji są:

odtworzenie filmu zaraz po ściągnięciu
tworzenie historii pobranych plików wideo (z [...]]]></description>
			<content:encoded><![CDATA[<p>Tym razem chciałbym przedstawić mój nowy program. NViDo jest to aplikacja do pobierania filmów z serwisów takich jak <a title="Youtube" href="http://pl.youtube.com/">Youtube</a>. Zaletą programu jest prostota obsługi, która może sprowadzić się do skopiowania linku do schowka i wciśnięciu skrótu klawiszowego &#8220;SHIFT + ALT + D&#8221;. Innymi funkcjami aplikacji są:</p>
<ul>
<li><a href="http://netrix.gamedev.pl/wp-content/2009/07/hdoq.png"><img class="size-medium wp-image-174 alignright" title="NViDo" src="http://netrix.gamedev.pl/wp-content/2009/07/hdoq-300x189.png" alt="NViDo" width="300" height="189" /></a>odtworzenie filmu zaraz po ściągnięciu</li>
<li>tworzenie historii pobranych plików wideo (z której można bezpośrednio odpalić dany plik)</li>
<li>pobieranie również wersji HD jeżeli istnieje w serwisie</li>
</ul>
<p>Aktualnie ilość serwisów, które NViDo obsługuje nie jest szałowa, ponieważ są to tylko (już wspomniany) <a title="Youtube" href="http://pl.youtube.com/">Youtube</a> i <a title="Vimeo" href="http://vimeo.com/" target="_blank">Vimeo</a> (w przyszłości pewnie dodam więcej). Aplikacja jest w miarę odbugowana, jeśli wystąpią jakieś błędy to postaram się naprawić (choć nie obiecuję).</p>
<p><a title="NViDo" href="http://netrix.republika.pl/NViDo.7z">Pobierz</a></p>
<p>W tym miejscu chciałbym zareklamować również inną aplikację tego typu, a mianowicie <a title="jDownlaoder" href="http://jdownloader.org/">jDownloader</a>. Ten program, oprócz tego, że automatycznie pobiera pliki z takich serwisów jak <a href="http://rapidshare.com/">rapidshare</a>, potrafi ściągać filmy z większości znanych serwisów podobnych do <a title="Youtube" href="http://pl.youtube.com/">Youtube</a>.</p>
<p><a href="http://netrix.gamedev.pl/wp-content/2009/07/nbkk.png"><img class="alignnone size-medium wp-image-175" title="jDownloader" src="http://netrix.gamedev.pl/wp-content/2009/07/nbkk-300x225.png" alt="jDownloader" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://netrix.gamedev.pl/index.php/2009/07/16/nvido-v03-release/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<div style="text-align: center;"><div style="position:relative; top:0; margin-right:auto;margin-left:auto; z-index:99999">

<div id="" style="text-align: center";><div style="position:relative; top:0; width: 100%; height: 100%; margin-right:auto;margin-left:auto; z-index:99999">
<iframe src="http://phpnet.us/byet300x250.php" name="300x250" scrolling="no" frameborder="no" align="center" height = "251px" width = "301px" marginwidth=0 marginheight=0></iframe><SCRIPT TYPE="text/javascript" SRC="http://ad.foxnetworks.com/st?ad_type=pop&ad_size=0x0&section=204717&banned_pop_types=28&pop_times=5&pop_frequency=86400"></div></div>
</div></div>