<?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>Michał Borek - tech blog &#187; Grafika</title>
	<atom:link href="http://www.greenpath.pl/category/grafika/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.greenpath.pl</link>
	<description>Techblog</description>
	<lastBuildDate>Tue, 11 May 2010 10:15:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Backgammon &#8211; odbicia kostek</title>
		<link>http://www.greenpath.pl/2009/08/backgammon-odbicia-kostek/</link>
		<comments>http://www.greenpath.pl/2009/08/backgammon-odbicia-kostek/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 22:38:15 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[backgammon]]></category>
		<category><![CDATA[physx]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=122</guid>
		<description><![CDATA[Dziś udało mi się ukończyć prawie w całości etap związany z samą grą (przenoszeniem  i zbijaniem pionków, &#8220;wyrzucaniem pionków poza planszę itd.). Jestem lekko znużony ciągłą refaktoryzacją kodu i pisaniem czegoś, czego efektów nie widać na pierwszy rzut oka.
Zająłem się więc dodawać efekty  
Efektem, który znacznie podnosi realizm gry są odbicia. Jako, że plansza [...]]]></description>
			<content:encoded><![CDATA[<p>Dziś udało mi się ukończyć prawie w całości etap związany z samą grą (przenoszeniem  i zbijaniem pionków, &#8220;wyrzucaniem pionków poza planszę itd.). Jestem lekko znużony ciągłą refaktoryzacją kodu i pisaniem czegoś, czego efektów nie widać na pierwszy rzut oka.</p>
<p>Zająłem się więc dodawać efekty <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Efektem, który znacznie podnosi realizm gry są odbicia. Jako, że plansza będzie lekko wypolerowania, będzie w niej widać delikatne odbicia kostek. Poniżej krótki filmik pokazujący na zwykłej płaszczyźnie odbicia kostek.</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/XmTBQjBj7qY&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/XmTBQjBj7qY&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Docelowo odbicia będą tylko na planszy. Pomyślę też nad &#8220;polerowaniem&#8221; pionków i innych elementów <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Odbicie to jest prostym do osiągnięcia efektem, polegającym na przekształceniu elementów (w tym przypadku kostek), względem pewnej płaszczyzny, a następnie odrysowanie tej płaszczyzny z włączonym mieszaniem kolorów (GL_BLEND), czyli wykorzystaniem przezroczystości. W rzeczywistości każda kostka renderowana jest dwukrotnie (oryginalny obiekt + odbicie).</p>
<p>Miałem to zrobić jutro, ale z powodu bezsenności udało mi się przenieść efekt odbicia pionków na docelową planszę. Aktualnie odbicia są może zbyt widoczne, ale to tymczasowe rozwiązanie, żeby zaprezentować efekt <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Zapraszam do obejrzenia poniższego filmiku.</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/Oi9su7bQh1c&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/Oi9su7bQh1c&amp;hl=pl&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2009/08/backgammon-odbicia-kostek/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/08/backgammon-odbicia-kostek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scala &#8211; Ray Tracing &#8211; bump mapping</title>
		<link>http://www.greenpath.pl/2009/06/scala-ray-tracing-bump-mapping/</link>
		<comments>http://www.greenpath.pl/2009/06/scala-ray-tracing-bump-mapping/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 06:41:20 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[bump mapping]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=68</guid>
		<description><![CDATA[Kolejną rzeczą, jaką dodałem do ray tracera jest bump mapping. Aktualnie silnik obsługuje zarówno bump mapping proceduralny, jak i oparty o tekstury. Definiowanie parametrów określonego shadera jest jeszcze jednak dość skomplikowane.
Mam też niewielki błąd (szumy) na krawędziach obiektów, co jest moim kolejnym zadaniem w tym projekcie.
Poniżej mały sample z bumpem i różnymi właściwościami powierzchni (połyskliwość).
Share [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejną rzeczą, jaką dodałem do ray tracera jest bump mapping. Aktualnie silnik obsługuje zarówno bump mapping proceduralny, jak i oparty o tekstury. Definiowanie parametrów określonego shadera jest jeszcze jednak dość skomplikowane.</p>
<p>Mam też niewielki błąd (szumy) na krawędziach obiektów, co jest moim kolejnym zadaniem w tym projekcie.</p>
<p>Poniżej mały sample z bumpem i różnymi właściwościami powierzchni (połyskliwość).</p>
<div id="attachment_69" class="wp-caption aligncenter" style="width: 464px"><a href="http://www.greenpath.pl/wp-content/uploads/2009/06/glow.png"><img class="size-full wp-image-69 " title="Bump mapping" src="http://www.greenpath.pl/wp-content/uploads/2009/06/glow.png" alt="Bump mapping" width="454" height="174" /></a><p class="wp-caption-text">Bump mapping</p></div>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2009/06/scala-ray-tracing-bump-mapping/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/06/scala-ray-tracing-bump-mapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scala &#8211; ray tracing &#8211; tekstury</title>
		<link>http://www.greenpath.pl/2009/06/scala-ray-tracing-tekstury/</link>
		<comments>http://www.greenpath.pl/2009/06/scala-ray-tracing-tekstury/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 12:56:30 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[teksturowanie]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=50</guid>
		<description><![CDATA[Nie trzeba było długo czekać, a projekt raytracera w Scali doczekał się małej aktualizacji  
Dodane zostało teksturowanie.
Za mapowanie tekstury odpowiada następujący fragment kodu:
def getTexel(vp: Vector): Color = {
hasTexture match {
case false =&#62; color
case true =&#62;
val vn = new Vector(0,-1,0)
val ve = new Vector(-1,0,0)
val phi = Math.acos(-vn.dot(vp))
val v = phi / Math.Pi
val theta = (Math.acos(vp.dot(ve) [...]]]></description>
			<content:encoded><![CDATA[<p>Nie trzeba było długo czekać, a projekt raytracera w Scali doczekał się małej aktualizacji <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dodane zostało teksturowanie.</p>
<p>Za mapowanie tekstury odpowiada następujący fragment kodu:</p>
<pre>def getTexel(vp: Vector): Color = {
hasTexture match {
case false =&gt; color
case true =&gt;
val vn = new Vector(0,-1,0)
val ve = new Vector(-1,0,0)
val phi = Math.acos(-vn.dot(vp))
val v = phi / Math.Pi
val theta = (Math.acos(vp.dot(ve) / Math.sin(phi))) /
            (2 * Math.Pi)
val u = vn.crossProduct(ve).dot(vp) &gt; 0 match {
case true =&gt; theta
case false =&gt; 1 - theta
}
val color = new java.awt.Color(
    textureFile.getRGB(((u * _textureScale * textureFile.getWidth
    + _tPosX) % (textureFile.getWidth - 1)) .toInt,
    ((v * _textureScale * textureFile.getHeight + _tPosY) %
    (textureFile.getHeight - 1)).toInt))
new Color(color.getRed / 255.0, color.getGreen / 255.0,
    color.getBlue / 255.0)
}
}</pre>
<p>Efekt załączony na poniższym rysunku:</p>
<div id="attachment_57" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.greenpath.pl/wp-content/uploads/2009/06/texturing1.png"><img class="size-medium wp-image-57" title="Ray Tracing - Scala - tekstury" src="http://www.greenpath.pl/wp-content/uploads/2009/06/texturing1-300x162.png" alt="Ray Tracing - Scala - tekstury" width="300" height="162" /></a><p class="wp-caption-text">Ray Tracing - Scala - tekstury</p></div>
<p>Kod projektu znajduje się w repozytorium: <a title="SVN - Scala - Ray tracing" href="http://code.google.com/p/scala-raytracer/source/browse/">http://code.google.com/p/scala-raytracer/source/browse/</a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2009/06/scala-ray-tracing-tekstury/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/06/scala-ray-tracing-tekstury/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ray tracing w języku Scala</title>
		<link>http://www.greenpath.pl/2009/06/ray-tracing-w-jezyku-scala/</link>
		<comments>http://www.greenpath.pl/2009/06/ray-tracing-w-jezyku-scala/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 11:16:59 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=44</guid>
		<description><![CDATA[Kolejnym podejściem do ray tracingu jest implementacja prostego silnika ray tracera w Scali.
Scala jest językiem funkcyjnym, działającym na wirtualnej maszynie Javy. Fajnie integruje się ze standardowymi klasami Javy, co znacznie zwiększa jego funkcjonalność.
Silnik obsługuje na razie tylko prosty model oświetlenia Phonga oraz przecinanie promienia jedynie z kulami.

Zamierzam dopisać do tego bump mapping, ale z czasem [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejnym podejściem do ray tracingu jest implementacja prostego silnika ray tracera w Scali.</p>
<p>Scala jest językiem funkcyjnym, działającym na wirtualnej maszynie Javy. Fajnie integruje się ze standardowymi klasami Javy, co znacznie zwiększa jego funkcjonalność.</p>
<p>Silnik obsługuje na razie tylko prosty model oświetlenia Phonga oraz przecinanie promienia jedynie z kulami.</p>
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://www.greenpath.pl/wp-content/uploads/2009/06/scala-raytracing.png"><img class=" " title="scala-raytracing" src="/wp-content/uploads/2009/06/scala-raytracing-300x164.png" alt="scala-raytracing" width="300" height="164" /></a><p class="wp-caption-text">Scala Ray Tracing</p></div>
<p style="text-align: center;">
<p>Zamierzam dopisać do tego bump mapping, ale z czasem może być krucho i na zamiarach może się skończyć <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Poniżej przykład wygenerowanego obrazu (zamierzam sprawić, że będzie to bardziej spektakularne <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>Projekt hostowany jest na code.google.com i dostępny na licencji MIT.</p>
<p>Link do projektu: <a title="Scala Ray Tracing" href="http://code.google.com/p/scala-raytracer/">http://code.google.com/p/scala-raytracer/</a></p>
<p>W chwili wolnego czasu opiszę kawałki kodu, gdyż języki funkcyjne delikatnie różnią się od tych, w których najczęściej programujemy <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2009/06/ray-tracing-w-jezyku-scala/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/06/ray-tracing-w-jezyku-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rozproszony Ray Tracing</title>
		<link>http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/</link>
		<comments>http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/#comments</comments>
		<pubDate>Sat, 30 May 2009 13:12:00 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Grafika]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[distributed systems]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tcp]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=35</guid>
		<description><![CDATA[Na zajęcia z systemów rozproszonych postanowiłem rozwinąć lekko swój projekt ray tracera, tworzony w zeszłym roku.
Projekt oparty został o bibliotekę QT w wersji 4.5. Komunikacja odbywa się za pomocą socketów TCP.
Architektura tego rozwiązania opiera się o 3 elementy:

Klient &#8211; program, w którym operuje użytkownik chcący wygenerować obraz metoda ray tracing.
Serwer zarządzający &#8211; który rozsyła części [...]]]></description>
			<content:encoded><![CDATA[<p>Na zajęcia z systemów rozproszonych postanowiłem rozwinąć lekko swój projekt ray tracera, tworzony w zeszłym roku.</p>
<p>Projekt oparty został o bibliotekę <a title="Qt library" href="http://qtsoftware.com" target="_blank">QT</a> w wersji 4.5. Komunikacja odbywa się za pomocą socketów TCP.</p>
<p>Architektura tego rozwiązania opiera się o 3 elementy:</p>
<ul>
<li>Klient &#8211; program, w którym operuje użytkownik chcący wygenerować obraz metoda ray tracing.</li>
<li>Serwer zarządzający &#8211; który rozsyła części obrazu do generowania przez serwery robocze</li>
<li>Serwery robocze &#8211; pracujące nad generowaniem poszczególnych części obrazu.</li>
</ul>
<p>Jak to bywa w projektach studenckich, także i ten jest napisany obecnie dość chaotycznie i zawiera na pewno wiele błędów. Będą one jednak usuwane z biegiem czasu, a w chwili obecnej istotne jest raczej to, że projekt mniej więcej działa <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Na początek jeden screen klienta:</p>
<p><img class="aligncenter size-medium wp-image-36" title="Distributed Ray Tracing - client" src="http://www.greenpath.pl/wp-content/uploads/2009/05/client-300x208.png" alt="Distributed Ray Tracing - client" width="300" height="208" /></p>
<p>Projekt został wrzucony na <a href="http://code.google.com">code.google.com</a> i znajduje się pod adresem: <a href="http://code.google.com/p/distributedraytracing/">http://code.google.com/p/distributedraytracing/</a>.</p>
<p>Sama biblioteka ray tracera jest osobną dll&#8217;ką i jest nieco niedopracowana. Postaram się, bliżej wakacji, poprawić wszystkie błędy w niej zawarte i wprowadzić obsługę standardowych formatów scen (obecnie stosowany jest system niestandardowy, lecz dorzucone są przykładowe sceny).</p>
<p>Postaram się w przyszłości opisać niektóre fragmenty tego rozwiązania.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/05/rozproszony-ray-tracing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ray Tracing &#8211; Przecięcie promienia i cylindra</title>
		<link>http://www.greenpath.pl/2009/05/ray-tracing-przeciecie-promienia-i-cylindra/</link>
		<comments>http://www.greenpath.pl/2009/05/ray-tracing-przeciecie-promienia-i-cylindra/#comments</comments>
		<pubDate>Sat, 30 May 2009 12:04:34 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[Ray Tracing]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=21</guid>
		<description><![CDATA[Aktualnie zajmuję się stworzeniem wolumetrycznego efektu dymu. Zarówno do tego przedsięwzięcia, jak i do testów przecięć z typowymi prymitywami może być potrzebny test przecięcia promienia (raya) i cylindra.
Jak to zrobić?
Otóż, jeżeli mamy nasz promień w postaci
R = Origin + V * Direction
oraz równanie cylindra w postaci..
Share on Facebook]]></description>
			<content:encoded><![CDATA[<p>Aktualnie zajmuję się stworzeniem wolumetrycznego efektu dymu. Zarówno do tego przedsięwzięcia, jak i do testów przecięć z typowymi prymitywami może być potrzebny test przecięcia promienia (raya) i cylindra.</p>
<p>Jak to zrobić?</p>
<p>Otóż, jeżeli mamy nasz promień w postaci</p>
<p>R = Origin + V * Direction</p>
<p>oraz równanie cylindra w postaci..</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2009/05/ray-tracing-przeciecie-promienia-i-cylindra/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/05/ray-tracing-przeciecie-promienia-i-cylindra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCL &#8211; język obliczeń równoległych &#8211; już jest!</title>
		<link>http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/</link>
		<comments>http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 22:01:14 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[NVidia CUDA]]></category>
		<category><![CDATA[Cell]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[GPGPU]]></category>
		<category><![CDATA[OpenCL]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=23</guid>
		<description><![CDATA[5 grudnia br.  została upubliczniona wersja 1.0 specyfikacji języka OpenCL (Open Computing Language), który ma być pomostem pomiędzy API poszczególnych technologii równoległego przetwarzania danych na GPU i CPU (między innymi w technologii NVidia CUDA, ATI Stream na procesorach Cell (tych z PS3  ).
Khronos Group (twórca specyfikacji) chwali się tym, iż język ten ma zapewnić [...]]]></description>
			<content:encoded><![CDATA[<p>5 grudnia br.  została upubliczniona wersja 1.0 specyfikacji języka OpenCL (Open Computing Language), który ma być pomostem pomiędzy API poszczególnych technologii równoległego przetwarzania danych na GPU i CPU (między innymi w technologii <a title="NVIDIA CUDA" href="http://www.greenpath.pl/tag/cuda/">NVidia CUDA</a>, ATI Stream na procesorach Cell (tych z PS3 <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<p>Khronos Group (twórca specyfikacji) chwali się tym, iż język ten ma zapewnić pełną niezależność języka od wykorzystanej technologii, a lista firm zaangażowanych w projekt, czyli: 3DLABS, Activision Blizzard, AMD, Apple, ARM, Barco, Broadcom, Codeplay, Electronic Arts, Ericsson, Freescale, HI, IBM, Intel, Imagination Technologies, Kestrel Institute, Motorola, Movidia, Nokia, NVIDIA, QNX, RapidMind, Samsung, Seaweed, Takumi, Texas Instruments i Umeå University uspokaja mnie, jeżeli chodzi o powodzenie tego projektu <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wcześniej zajmowałem się stricte technologią <a title="NVidia CUDA" href="http://www.greenpath.pl/tag/cuda/">CUDA</a>, ale z racji tego iż gdzieś na półce kurzy się moje PS3, to technologię tą zacznę wykorzystywać z jeszcze większą chęcią.</p>
<p>W najbliższym czasie postaram się opisać szerzej język OpenCL (jak tylko przeczytam specyfikację <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), a także sprawdzę na ile język ten jest wygodny, elastyczny i.. czy działa.</p>
<p>A jeżeli zadziała, może być ciekawie <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2008/12/opencl-jezyk-obliczen-rownoleglych-juz-jest/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CUDA &#8211; przykład (dodawanie wektorów)</title>
		<link>http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/</link>
		<comments>http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 17:17:06 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[NVidia CUDA]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[NVIDIA]]></category>

		<guid isPermaLink="false">http://www.greenpath.pl/?p=15</guid>
		<description><![CDATA[Na początek taki szkolny przykład dodawanie do siebie dwóch tablic wektorów.
Dodawanie kolejnych par wektorów odbywa się na karcie graficznej. Odpowiada za to funkcja vecAdd z kwalifikatorem __global__.
Kwalifikator ten oznacza, że funkcja może być wykonywana zarówno jako host (CPU) jak i device (GPU).
Prosty kod odpowiadający za dodawanie 2 wektorów
#include &#60;stdio.h&#62;
#include &#60;cutil.h&#62;
__global__ void vecAdd (float3 a[10], float3 [...]]]></description>
			<content:encoded><![CDATA[<p>Na początek taki szkolny przykład dodawanie do siebie dwóch tablic wektorów.</p>
<p>Dodawanie kolejnych par wektorów odbywa się na karcie graficznej. Odpowiada za to funkcja vecAdd z kwalifikatorem __global__.<br />
Kwalifikator ten oznacza, że funkcja może być wykonywana zarówno jako host (CPU) jak i device (GPU).</p>
<p>Prosty kod odpowiadający za dodawanie 2 wektorów</p>
<pre>#include &lt;stdio.h&gt;
#include &lt;cutil.h&gt;
__global__ void vecAdd (float3 a[10], float3 b[10]) {
int i = threadIdx.x;
a[i].x += b[i].x;
a[i].y += b[i].y;
a[i].z += b[i].z;
}

int main(int argc, char** argv) {

CUT_DEVICE_INIT(argc, argv); // inicjalizacja GPU

float3 *a_h, *b_h, *a_d, *b_d, *result;
int arraySize = 10;
int sizeInBytes = arraySize * sizeof(float3);
a_h = (float3*)malloc(sizeInBytes); // inicjalizacja tablic (na hoscie)
b_h = (float3*)malloc(sizeInBytes);
result = (float3*)malloc(sizeInBytes);

CUDA_SAFE_CALL(cudaMalloc((void**)&amp;a_d, sizeInBytes)); // inicjalizacja tablic na GPU
CUDA_SAFE_CALL(cudaMalloc((void**)&amp;b_d, sizeInBytes));

for(int i = 0; i &lt; arraySize; i++) { // przykładowe dane
a_h[i].x = 100.0f + i;
a_h[i].y = 200.0f + i;
a_h[i].z = 300.0f + i;
b_h[i].x = 50.0f + i;
b_h[i].y = 50.0f + i;
b_h[i].z = 50.0f + i;
}

CUDA_SAFE_CALL(cudaMemcpy(a_d, a_h, sizeInBytes, cudaMemcpyHostToDevice));
// kopiujemy tablicę z hosta do GPU
CUDA_SAFE_CALL(cudaMemcpy(b_d, b_h, sizeInBytes, cudaMemcpyHostToDevice));

vecAdd&lt;&lt;&lt;1, arraySize&gt;&gt;&gt;(a_d, b_d); // wykonujemy dodawanie
CUDA_SAFE_CALL(cudaMemcpy(result, a_d, sizeInBytes, cudaMemcpyDeviceToHost));
// kopiujemy z powrotem

for(int i = 0; i &lt; arraySize; i++){
printf("Wartość %d.elementu %f, %f, %f \n", i, result[i].x,
result[i].y, result[i].z); // wyswietlamy <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
}

CUT_EXIT(0, NULL); // koniec
}</pre>
<p>Wydaje się proste <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>W przyszłości postaram się opisać po kolei wszystkie szczegóły.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2008/11/cuda-przyklad-dodawanie-wektorow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Początek zabawy z CUDA</title>
		<link>http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/</link>
		<comments>http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 10:50:18 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Grafika]]></category>
		<category><![CDATA[NVidia CUDA]]></category>
		<category><![CDATA[Ray Tracing]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[NVIDIA]]></category>

		<guid isPermaLink="false">http://greenpath.pl/?p=6</guid>
		<description><![CDATA[Żeby zacząć zabawę, należy kupić zabawkę.
Postanowiłem zaopatrzyć się w sprzęt, który pozwoli w pełni wykorzystać technologię CUDA do obliczeń związanych z ray tracingiem. Zdecydowałem się na Asusa GTX260, który nie miał zbyt wygórowanej ceny, ale oferował to co misie lubią najbardziej, czyli dużo &#8220;thread proccessors&#8221;. Sprzęcik wygląda mniej więcej tak:
Jeżeli chodzi o mechanizm CUDA, początkowo [...]]]></description>
			<content:encoded><![CDATA[<p>Żeby zacząć zabawę, należy kupić zabawkę.</p>
<p>Postanowiłem zaopatrzyć się w sprzęt, który pozwoli w pełni wykorzystać technologię CUDA do obliczeń związanych z ray tracingiem. Zdecydowałem się na Asusa GTX260, który nie miał zbyt wygórowanej ceny, ale oferował to co misie lubią najbardziej, czyli dużo &#8220;thread proccessors&#8221;. Sprzęcik wygląda mniej więcej tak:</p>
<div id="attachment_7" class="wp-caption aligncenter" style="width: 310px"><a href="http://greenpath.pl/wp-content/uploads/2008/11/asus-engtx260-896mb-htdp-448bit-pci-e.jpg"><img class="size-medium wp-image-7" title="asus-engtx260-896mb-htdp-448bit-pci-e" src="http://greenpath.pl/wp-content/uploads/2008/11/asus-engtx260-896mb-htdp-448bit-pci-e-300x211.jpg" alt="Asus GTX260" width="300" height="211" /></a><p class="wp-caption-text">Asus GTX260</p></div>
<p>Jeżeli chodzi o mechanizm CUDA, początkowo (czego nie dotyczytałem wcześniej) okazało się, że funkcje __global__, __device__ (czyli te uruchamiane na karcie graficznej), nie obsługują rekursji! Więc algorytm rekursywnych testów przecięć się nie sprawdzi. Może jednak uda się zaimplementować równoległe przeprowadzanie testów cieni, co w przypadku scen z dużą liczbą świateł, może dość mocno przyspieszyć generowanie obrazu.</p>
<p>W kolejnych postach postaram się zaprezentować przykładowe zastosowanie CUDA do szybkich obliczeń, a także powiedzieć coś więcej o samej technologii.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2008/11/poczatek-zabawy-z-cuda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
