<?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>3dcoding.de</title>
	<atom:link href="http://www.3dcoding.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.3dcoding.de</link>
	<description>turning bits&#38;bytes into virtual worlds</description>
	<lastBuildDate>Tue, 07 Feb 2012 16:52:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<meta xmlns="http://www.w3.org/1999/xhtml" name="robots" content="noindex,follow" />
		<item>
		<title>New Game project started</title>
		<link>http://www.3dcoding.de/2012/02/new-game-project-started/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-game-project-started</link>
		<comments>http://www.3dcoding.de/2012/02/new-game-project-started/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 14:31:26 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Gamedev]]></category>
		<category><![CDATA[TheLostSpells]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=819</guid>
		<description><![CDATA[A few weeks ago, a friend and I started a game project. The working title is &#8220;The Lost Spells&#8221; &#8211; it is about a magician that did something really wrong and now he has to fight his way through monsters &#8230; <a href="http://www.3dcoding.de/2012/02/new-game-project-started/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, a friend and I started a game project. The working title is &#8220;<strong>The Lost Spells</strong>&#8221; &#8211; it is about a magician that did something really wrong and now he has to fight his way through monsters and zombies to reach a room containing the final spell that will send them all back where they came from.</p>
<p>If you like, you can <a href="https://plus.google.com/b/106559669417663077694/" target="_blank">follow us on Google+</a> &#8211; we post updates, news, concept art and more on a regular basis.</p>
<p><!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2012/02/new-game-project-started/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebGL Demo of animated Character</title>
		<link>http://www.3dcoding.de/2011/11/724/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=724</link>
		<comments>http://www.3dcoding.de/2011/11/724/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 16:40:32 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bones]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Skinning]]></category>
		<category><![CDATA[WebGL]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=724</guid>
		<description><![CDATA[This is an example for a GPU based skinning implementation in WebGL. <a href="http://www.3dcoding.de/2011/11/724/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I finally finished my WebGL demo to render an animated character. To create the JSON File, I changed my ParrotEngine Blender Export Script to output a JSON file instead of XML.</p>
<p>The demo was tested on Firefox 7 and 8, Opera 12 and Google Chrome 15 &#8211; each was running fine. Internet Explorer does not support WebGL &#8211; and probably never will, so you have to use another browser to see the demo&#8230;<br />
<span id="more-724"></span></p>
<p><iframe src="http://www.3dcoding.de/js/webgl/parrot/parrot.html" width="600" height="350"></iframe><br />
The JSON object contains the</p>
<ul>
<li>vertices</li>
<li>faces</li>
<li>skeleton structure (bone hierarchy)</li>
<li>vertexgroup definitions (weighted assignment of vertices to bones)</li>
<li>animations stored in channels (can be quaternion and/or position bezier curves)</li>
</ul>
<p>The skinning and lighting is done entirely within the vertex and fragment shaders. Just the pose <span class='wp_keywordlink'><a href="http://www.3dcoding.de/2008/06/matrixrechnung/" title="Introduction to Matrices">matrices</a></span> are calculated in JavaScript &#8211; they are then passed to the shader where the actual skinning takes place.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2011/11/724/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Order of Matrix multipliation and its effect on transformations</title>
		<link>http://www.3dcoding.de/2011/10/order-of-matrix-multipliation-and-its-effect-on-transformations/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=order-of-matrix-multipliation-and-its-effect-on-transformations</link>
		<comments>http://www.3dcoding.de/2011/10/order-of-matrix-multipliation-and-its-effect-on-transformations/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 20:17:17 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=568</guid>
		<description><![CDATA[About the effect of matrix transformations on points and coordinate systems and how to concatenate matrices to achieve a desired transformation result. <a href="http://www.3dcoding.de/2011/10/order-of-matrix-multipliation-and-its-effect-on-transformations/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One thing that I stuggle regularily with, is the order in which <span class='wp_keywordlink'><a href="http://www.3dcoding.de/2008/06/matrixrechnung/" title="Introduction to Matrices">matrices</a></span> should be multiplied to achieve a specific result. So I decided to get this clear for myself for good and all.</p>
<p>As you know, <span class='wp_keywordlink'><a href="http://www.3dcoding.de/2008/06/matrixrechnung/" title="Introduction to Matrices">matrices</a></span> (at least in our context of 3D graphics) represent transformations. Multiple transformation matrices can be combined using marix multiplication. But since this operation is not commutative, the order of the multiplication is important.</p>
<p>Since matrices represent transformations, they build new coordinate systems, too: These new systems are defined by axis vectors that have been transformed using the <span class='wp_keywordlink'><a href="http://www.3dcoding.de/2008/06/matrixrechnung/" title="Introduction to Matrices">matrix</a></span>. An example will clarify this fact:</p>
<p>In the examples used in this post, I will use a rotation <span class='wp_keywordlink'><a href="http://www.3dcoding.de/2008/06/matrixrechnung/" title="Introduction to Matrices">matrix</a></span> around 30 degrees, because <img src='http://www.3dcoding.de/wp-content/latex/112/112e95348958c7a8d6bc3b878ff86a6f-T-000000-0.png' alt='\sin(30^\circ) = \frac{1}{2}' title='\sin(30^\circ) = \frac{1}{2}' class='latex' /> and <img src='http://www.3dcoding.de/wp-content/latex/383/3839c0f6c2d67fe064f5d089010c4333-T-000000-0.png' alt='\cos(30^\circ) = \sqrt{\frac{3}{4}}' title='\cos(30^\circ) = \sqrt{\frac{3}{4}}' class='latex' />, which is easy to write down and we still stay exact when calculating with it.</p>
<h2>Part 1: A single transformation <span class='wp_keywordlink'><a href="http://www.3dcoding.de/2008/06/matrixrechnung/" title="Introduction to Matrices">matrix</a></span></h2>
<p>Given the origin system with the axis vectors <img src='http://www.3dcoding.de/wp-content/latex/de8/de822fcb220246f77135fa660c2a6bf3-T-000000-0.png' alt='\left(\begin{array}{c}1 \\ 0 \\ 0 \end{array}\right)' title='\left(\begin{array}{c}1 \\ 0 \\ 0 \end{array}\right)' class='latex' /> and <img src='http://www.3dcoding.de/wp-content/latex/b4d/b4d6ca2728f87e660c4c4625f0ff72fc-T-000000-0.png' alt='\left(\begin{array}{c}0 \\ 1 \\ 0 \end{array}\right)' title='\left(\begin{array}{c}0 \\ 1 \\ 0 \end{array}\right)' class='latex' />, when we rotate these vectors around 30 degrees, we get the vectors <img src='http://www.3dcoding.de/wp-content/latex/c28/c287c43a99958d964f9da41946c080dc-T-000000-0.png' alt='\left(\begin{array}{c}\sqrt{\frac{3}{4}} \\ \frac{1}{2} \\ 0 \end{array}\right)' title='\left(\begin{array}{c}\sqrt{\frac{3}{4}} \\ \frac{1}{2} \\ 0 \end{array}\right)' class='latex' /> and <img src='http://www.3dcoding.de/wp-content/latex/4c6/4c649a7dd36a470a60340cfd3686d416-T-000000-0.png' alt='\left(\begin{array}{c}-\frac{1}{2} \\ \sqrt{\frac{3}{4}} \\ 0 \end{array}\right)' title='\left(\begin{array}{c}-\frac{1}{2} \\ \sqrt{\frac{3}{4}} \\ 0 \end{array}\right)' class='latex' /><br />
<span id="more-568"></span><br />
Surprisingly &#8211; or more precise: not surprisingly, <strong>the axis vectors are exactly the components of the matrix that applies the corresponding transformation!</strong></p>
<p>The system axis <img src='http://www.3dcoding.de/wp-content/latex/7ab/7ababf1cb02161388f066c6b98ad33a9-T-000000-0.png' alt='\left(\begin{array}{c}1 \\ 0 \\ 0\end{array}\right)' title='\left(\begin{array}{c}1 \\ 0 \\ 0\end{array}\right)' class='latex' /> and <img src='http://www.3dcoding.de/wp-content/latex/bbb/bbb7ea2371e84516b84ba253fdb0ebcd-T-000000-0.png' alt='\left(\begin{array}{c}0 \\ 1 \\ 0\end{array}\right)' title='\left(\begin{array}{c}0 \\ 1 \\ 0\end{array}\right)' class='latex' /> are contained in the unit matrix <img src='http://www.3dcoding.de/wp-content/latex/8cc/8cc1696fa1f7b3c42c832284b50da357-T-000000-0.png' alt='\left( \begin{array}{ccc}  1 &amp; 0 &amp; 0 \\  0 &amp; 1 &amp; 0 \\  0 &amp; 0 &amp; 1  \end{array} \right)' title='\left( \begin{array}{ccc}  1 &amp; 0 &amp; 0 \\  0 &amp; 1 &amp; 0 \\  0 &amp; 0 &amp; 1  \end{array} \right)' class='latex' /></p>
<p>The rotated axis <img src='http://www.3dcoding.de/wp-content/latex/161/161e3a20d19a32b481a8ab3f4717f48c-T-000000-0.png' alt='\left(\begin{array}{c}\sqrt{\frac{3}{4}} \\ \frac{1}{2} \\ 0\end{array}\right)' title='\left(\begin{array}{c}\sqrt{\frac{3}{4}} \\ \frac{1}{2} \\ 0\end{array}\right)' class='latex' /> and <img src='http://www.3dcoding.de/wp-content/latex/94f/94fbc170ea0e9ba0fdafc2418e5710d8-T-000000-0.png' alt='\left(\begin{array}{c}-\frac{1}{2} \\ \sqrt{\frac{3}{4}} \\ 0\end{array}\right)' title='\left(\begin{array}{c}-\frac{1}{2} \\ \sqrt{\frac{3}{4}} \\ 0\end{array}\right)' class='latex' /> are contained in the rotation matrix: <img src='http://www.3dcoding.de/wp-content/latex/f4f/f4fbd890862f846785d1a80583f7bba0-T-000000-0.png' alt='\left( \begin{array}{ccc}   \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 0 \\  \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; 0 \\  0 &amp; 0 &amp; 1  \end{array} \right)' title='\left( \begin{array}{ccc}   \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 0 \\  \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; 0 \\  0 &amp; 0 &amp; 1  \end{array} \right)' class='latex' /></p>
<p><strong>Not convinced that this is true?</strong> Then let us investigate what is happening when we apply the matrix transformation to a concrete point and verify the results visually:</p>
<p>The example point <img src='http://www.3dcoding.de/wp-content/latex/fc0/fc04493ffda59dcba5d88138ffd6a6e8-T-000000-0.png' alt='\left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)' title='\left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)' class='latex' /> will be transformed using the identity matrix and the rotation matrix:</p>
<img src='http://www.3dcoding.de/wp-content/latex/a93/a9336cc154fa5ccd18ec6fc7279aeea8-T-000000-0.png' alt='\left( \begin{array}{ccc} 1 &amp; 0 &amp; 0 \\ 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{array} \right)\left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)' title='\left( \begin{array}{ccc} 1 &amp; 0 &amp; 0 \\ 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{array} \right)\left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)' class='latex' />
<img src='http://www.3dcoding.de/wp-content/latex/a7c/a7cd7c933b6394190dec7e4567a70db6-T-000000-0.png' alt='\left( \begin{array}{ccc} \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 0 \\ \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{array} \right)\left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}\sqrt{3}-\frac{3}{2} \\ 1+\frac{3}{2}\sqrt{3} \\ 1\end{array}\right)\approx\left(\begin{array}{c}0,23\\3,59\\1\end{array}\right) ' title='\left( \begin{array}{ccc} \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 0 \\ \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{array} \right)\left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}\sqrt{3}-\frac{3}{2} \\ 1+\frac{3}{2}\sqrt{3} \\ 1\end{array}\right)\approx\left(\begin{array}{c}0,23\\3,59\\1\end{array}\right) ' class='latex' />
<p>You see, the identity matrix keeps the same point and the rotation matrix does the correct rotation as can be seen in a graph: the point is rotated around exactly 30 degrees in mathematical positive direction and that the <strong>rotated coordinate system still contains the point with the coordinates (2,3)</strong> (shown in green):</p>
<div id="attachment_595" class="wp-caption aligncenter" style="width: 594px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/graph.png" rel="lightbox[568]"><img class="size-large wp-image-595" title="Rotation of a coordinate system and point" src="http://www.3dcoding.de/wp-content/uploads/2011/10/graph-1024x732.png" alt="rotation a point equals rotation a coordinate system while keeping the same point coordinates" width="584" height="417" /></a><p class="wp-caption-text">Point coordinates stay the same when a coordinate system is rotated</p></div>
<p><strong>Note: The coordinates always stay the same, but only the coordinate system within they are used changes.</strong></p>
<p>So, for single matrices everything is clear: The matrix transforms a point and the matrix columns are the axis vectors of the system defined by the matrix. If the point is transformed, its coordinates change only seen from the origin system &#8211; within the transformed system they stay the same.</p>
<p>Now lets look at the concatenation of transformations.</p>
<h2>Part 2: Concatenation of two transformation matrices</h2>
<p>For this experiment, lets take a rotation matrix R and a translation matrix T.</p>
<p>We get the combined Matrix C using C=R*T. This matrix then contains both transformations: The rotation and the translation within a single matrix.</p>
<img src='http://www.3dcoding.de/wp-content/latex/908/9084eb9d1e8d4b61b1db632cee38e495-T-000000-0.png' alt='R=\left( \begin{array}{ccc} \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 0 \\ \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{array} \right)' title='R=\left( \begin{array}{ccc} \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 0 \\ \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{array} \right)' class='latex' />
<img src='http://www.3dcoding.de/wp-content/latex/e0b/e0b47c0011545cd2b764fab23dc8fb24-T-000000-0.png' alt='T = \left( \begin{array}{ccc} 1 &amp; 0 &amp; 3 \\ 0 &amp; 1 &amp; 2 \\ 0 &amp; 0 &amp; 1 \end{array} \right)' title='T = \left( \begin{array}{ccc} 1 &amp; 0 &amp; 3 \\ 0 &amp; 1 &amp; 2 \\ 0 &amp; 0 &amp; 1 \end{array} \right)' class='latex' />
<img src='http://www.3dcoding.de/wp-content/latex/b24/b2404d5d35ad77c2d04d5921c9a9d8b5-T-000000-0.png' alt='  C=\left( \begin{array}{ccc}  \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 3\sqrt{\frac{3}{4}}-1 \\  \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; \frac{3}{2}+2\sqrt{\frac{3}{4}} \\  0 &amp; 0 &amp; 1 \end{array} \right)  ' title='  C=\left( \begin{array}{ccc}  \sqrt{\frac{3}{4}} &amp; -\frac{1}{2} &amp; 3\sqrt{\frac{3}{4}}-1 \\  \frac{1}{2} &amp; \sqrt{\frac{3}{4}} &amp; \frac{3}{2}+2\sqrt{\frac{3}{4}} \\  0 &amp; 0 &amp; 1 \end{array} \right)  ' class='latex' />
<p>Using the combined matrix C to transform the point we get:</p>
<img src='http://www.3dcoding.de/wp-content/latex/857/85705550a4c2af214efc3e3f97d5ce74-T-000000-0.png' alt='  C \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)=\left(\begin{array}{c}  \frac{5}{2}\sqrt{3}-2\frac{1}{2} \\ \frac{5}{2}\sqrt{3}+2\frac{1}{2} \\ 1\end{array}\right)\approx\left(\begin{array}{c}1,83 \\ 6,83 \\ 1\end{array}\right)  ' title='  C \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)=\left(\begin{array}{c}  \frac{5}{2}\sqrt{3}-2\frac{1}{2} \\ \frac{5}{2}\sqrt{3}+2\frac{1}{2} \\ 1\end{array}\right)\approx\left(\begin{array}{c}1,83 \\ 6,83 \\ 1\end{array}\right)  ' class='latex' />
<div id="attachment_616" class="wp-caption aligncenter" style="width: 594px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/graph2.png" rel="lightbox[568]"><img class="size-large wp-image-616" title="Rotating a coordinate system, followed by a translation" src="http://www.3dcoding.de/wp-content/uploads/2011/10/graph2-1024x736.png" alt="Rotating a coordinate system, followed by a translation" width="584" height="419" /></a><p class="wp-caption-text">Rotating a coordinate system, followed by a translation</p></div>
<p>To compare this, lets transform the point with each single matrix after each other and try this with both orders:</p>
<p>(a) First R, then T:<br />
<img src='http://www.3dcoding.de/wp-content/latex/2b8/2b86a17b6c0cd32f6f9049b2f83fb3ac-T-000000-0.png' alt='R \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}\sqrt{3}-\frac{3}{2} \\ 3\sqrt{\frac{3}{4}}+1 \\ 1\end{array}\right)' title='R \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}\sqrt{3}-\frac{3}{2} \\ 3\sqrt{\frac{3}{4}}+1 \\ 1\end{array}\right)' class='latex' /><br />
<img src='http://www.3dcoding.de/wp-content/latex/091/0915e855eca84b7f7efdb826ec03752a-T-000000-0.png' alt='T \left(\begin{array}{c}\sqrt{3}-\frac{3}{2} \\ 3\sqrt{\frac{3}{4}}+1 \\ 1\end{array}\right) = \left(\begin{array}{c}\sqrt{3}+1\frac{1}{2} \\ \frac{3}{2}\sqrt{3}+3 \\ 1\end{array}\right)' title='T \left(\begin{array}{c}\sqrt{3}-\frac{3}{2} \\ 3\sqrt{\frac{3}{4}}+1 \\ 1\end{array}\right) = \left(\begin{array}{c}\sqrt{3}+1\frac{1}{2} \\ \frac{3}{2}\sqrt{3}+3 \\ 1\end{array}\right)' class='latex' /></p>
<p>(b) First T, then R:<br />
<img src='http://www.3dcoding.de/wp-content/latex/1bd/1bd0fca63d49664128f61967fdf37882-T-000000-0.png' alt='T \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}5 \\ 2 \\ 1\end{array}\right)' title='T \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right) = \left(\begin{array}{c}5 \\ 2 \\ 1\end{array}\right)' class='latex' /><br />
<img src='http://www.3dcoding.de/wp-content/latex/881/8817303e3e1af4eb91befff07e57d3f9-T-000000-0.png' alt='R \left(\begin{array}{c}5 \\ 2 \\ 1\end{array}\right) = \left(\begin{array}{c}\frac{5}{2}\sqrt{3}-2\frac{1}{2} \\ \frac{5}{2}\sqrt{3}+2\frac{1}{2} \\ 1\end{array}\right) = C \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)' title='R \left(\begin{array}{c}5 \\ 2 \\ 1\end{array}\right) = \left(\begin{array}{c}\frac{5}{2}\sqrt{3}-2\frac{1}{2} \\ \frac{5}{2}\sqrt{3}+2\frac{1}{2} \\ 1\end{array}\right) = C \left(\begin{array}{c}2 \\ 3 \\ 1\end{array}\right)' class='latex' /></p>
<p><em>Please note: the results we get in (b) are excatly the same as we got from the combined Matrix C above with C being R*T!</em></p>
<p>You might be surprised, but the order of transformations in (a), although this is the order in which the matrices are multiplied, does not result in the same point as the cumulated matrix C. The reason can be found when we recapture the fact, that <strong>matrix multiplications don&#8217;t change points, but coordinate systems</strong>.</p>
<p>So, R*T means the following: First, rotate the origin system using R &#8211; and then, <strong>within this rotated system</strong>, translate the system using T. <em>This is the difference to the calculation of points shown in (a)</em><strong>:</strong> There we get transformed points and these points are respective to the origin system (remember: point coordinates stay the same, only the system changes &#8211; changed point coordinates mean: We look at them from a different system)!<br />
When the points are then translated, this is done again within the origin system. The translation is completely different as it moves the point within the origin system and not in the rotated one!</p>
<p>It is therefore important to always look at the systems that transformation matrices build: They are multiplied in the natural, obvious order as they are applied.</p>
<p><strong>Example: Create a combined matrix that rotates points by 30 degrees around the point (4,5).</strong></p>
<p>To achieve this, the rotation should happen around the given point, which means we have to move the coordinate system first by applying a transformation matrix T(4,5). Then the rotation should be performed: R(30). Finally we need to undo the translation again, because this was a temporay translation to just change the point of rotation.This is achieved by T(-4,-5).</p>
<p>As a result, we get the combined Matrix C = T(4,5) * R(30) * T(-4,-5)</p>
<p>That is logical, isnt&#8217;t it?</p>
<p>I hope this post helps you as much as it helped me writing it and that matrices now lose a bit of their mystery (sorry in case you liked that mistery thingy) <img src='http://www.3dcoding.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> <!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2011/10/order-of-matrix-multipliation-and-its-effect-on-transformations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Main Character für die &#8220;Parrot Quest&#8221;</title>
		<link>http://www.3dcoding.de/2011/06/main-character-fur-die-parrot-quest/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=main-character-fur-die-parrot-quest</link>
		<comments>http://www.3dcoding.de/2011/06/main-character-fur-die-parrot-quest/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 19:52:56 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Gamedev]]></category>
		<category><![CDATA[Parrotengine]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=423</guid>
		<description><![CDATA[Das Spiel das ich als Demo für die ParrotEngine gerade erstelle benötigt natürlich einen Hauptdarsteller und wie der Name der Engine unschwer verrät wird es ein Papagei werden. Rechts seht ihr den aktuellen Stand des 3D Models. Ich erstelle alle &#8230; <a href="http://www.3dcoding.de/2011/06/main-character-fur-die-parrot-quest/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_424" class="wp-caption alignright" style="width: 253px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/parrot.png" rel="lightbox[423]"><img class="size-full wp-image-424" title="Der Hauptcharakter der Parrot Quest" src="http://www.3dcoding.de/wp-content/uploads/2011/10/parrot.png" alt="Der Hauptcharakter der Parrot Quest" width="243" height="270" /></a><p class="wp-caption-text">Der Hauptcharakter der Parrot Quest</p></div>
<p>Das Spiel das ich als Demo für die <a title="The Parrot Engine" href="http://www.3dcoding.de/the-parrot-engine/">ParrotEngine </a>gerade erstelle benötigt natürlich einen Hauptdarsteller und wie der Name der Engine unschwer verrät wird es ein Papagei werden. Rechts seht ihr den aktuellen Stand des 3D Models. Ich erstelle alle Modelle in <a href="http://www.blender.org">Blender</a>. Der Papagei ist aktuell bereits gerigged und animiert.<br />
Damit es voran geht, werde ich als erstes dieses Model verwenden um ein spielbares Level zu implementieren. Die Feinarbeiten kommen irgendwann später. Falls dies hier ein 3D-Artist liest und dieser fit in Blender ist, nehme ich auch gerne Hilfe an!</p>
<p>Die erste Testmap wird sehr simpel gestrickt sein. Auf dem Screenshot links sieht man den Weg der zurückgelegt werden muss. Links unten ist der Startpunkt (Player Spawn Point) und rechts der Bereich bei dessen Erreichen die Map als erfolgreich erledigt erkannt wird. Der Spieler wird diesen Bereich nicht verlassen können &#8211; auf diese Weise kann man sich später im Spiel nicht um Gegner und Hindernisse &#8220;herummogeln&#8221;. Geheimgänge, Abkürzungen und sonstige Geheimnisse müssen in einer Map gezielt eingebaut werden.</p>
<div id="attachment_425" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_mapedit_20110626.png" rel="lightbox[423]"><img class="size-medium wp-image-425" title="Screenshot des Mapeditors" src="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_mapedit_20110626-300x171.png" alt="Screenshot des Mapeditors" width="300" height="171" /></a><p class="wp-caption-text">Screenshot des Mapeditors</p></div>
<p>Um meine Engine nicht alleinig auf Jump&#8217;n Run Spiele auszurichten habe ich eine Zwischenschicht eingeführt: Das &#8220;JumpNRun Modul&#8221;. Dieses enthält neben dem auf diese Art Spiele spezialisierten Map-Editor auch weitere dafür benötigte Hilfsklassen. So bleibt die Engine zwar weniger &#8220;mächtig&#8221;, dafür aber allgemeingültig und kann später auch für eventuelle weitere Module verwendet werden. Ich denke da an soetwas wie ein &#8220;FirstPerson Modul&#8221; oder ein &#8220;Platform Modul&#8221;&#8230; doch eins nach dem anderen.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2011/06/main-character-fur-die-parrot-quest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resource Collections in der Parrotengine</title>
		<link>http://www.3dcoding.de/2011/06/resource-collections-in-der-parrotengine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=resource-collections-in-der-parrotengine</link>
		<comments>http://www.3dcoding.de/2011/06/resource-collections-in-der-parrotengine/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 13:21:00 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Parrotengine]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=420</guid>
		<description><![CDATA[Derzeit programmiere ich an einem Map-Editor. Dieser soll sowohl einfach zu bedienen, also auch vollständig bezüglich der Funktionalität sein. Dabei stellte sich mir das Problem wie ich sicherstellen kann, dass ein Spiel auf genau die gleichen Resourcen zugreifen kann wie &#8230; <a href="http://www.3dcoding.de/2011/06/resource-collections-in-der-parrotengine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Derzeit programmiere ich an einem Map-Editor. Dieser soll sowohl einfach zu bedienen, also auch vollständig bezüglich der Funktionalität sein. Dabei stellte sich mir das Problem wie ich sicherstellen kann, dass ein Spiel auf genau die gleichen Resourcen zugreifen kann wie der Editor: Schließlich werden die Elemente die im Editor in die Map platziert wurden auch vom Spiel benötigt wenn dieses die Map einladen und darstellen möchte.</p>
<div id="attachment_421" class="wp-caption alignleft" style="width: 228px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/diagramm_resource_collection.png" rel="lightbox[420]"><img class="size-medium wp-image-421" title="Struktur der Resource Collections" src="http://www.3dcoding.de/wp-content/uploads/2011/10/diagramm_resource_collection-218x300.png" alt="Struktur der Resource Collections" width="218" height="300" /></a><p class="wp-caption-text">Struktur der Resource Collections</p></div>
<p>Als Lösung für dieses Problem habe ich die Resource-Collections ins Leben gerufen. Es handelt sich hier um eine Datei im XML Format die eine Liste aller Resourcen enthält die ausgehend vom Ort der resource-collection.xml Datei erreichbar sind. Da die Engine bisher für alle Zugriffe auf Resourcen InputStreamSource-Objekte verwendet, nutzt das Konzept für die Collections diese natürlich ebenfalls. Das bedeutet, dass ein Programm, welches über irgendein InputStreamSource-Objekt an eine resource-collection.xml Datei kam, über genau das gleiche Objekt alle in der XML erwähnten Resource Objekte laden kann!</p>
<p>Die <a title="The Parrot Engine" href="http://www.3dcoding.de/the-parrot-engine/">Engine </a>selbst besitzt standardmäßig eine eigene ResourceCollection. Diese enthält neben dem Engine-Logo auch die Standard-Fonts, default-Texturen und Standard-Skyboxen. Damit Programme die die Engine nutzen den Satz an verfügbaren Resourcen ergänzen können gibt es das ResourceCollectionSet. Dieses enthält eine Liste von Resource-Collections.</p>
<p>Das ResourceCollectionSet kann jederzeit um weitere Resource-Collections ergänzt werden. Wird vom Spiel aus eine Resource angefordert, so geschieht das über die ReaderFacade:</p>
<pre class="brush: java; title: ; notranslate">
 ReaderFacade facade = engine.getReaderFacade();
 MeshPrototype m = facade.readMeshPrototype(&quot;meshes/mesh1.xml&quot;);
 </pre>
<p>Die Methodefacade.readMeshPrototype(&#8230;)ruft hier das ResourceCollectionSet auf und dieses sucht dann der Reihe nach in allen registrierten ResourceCollections nach &#8220;meshes/mesh1.xml&#8221;. Der erste Fundort wird dann genutzt um das Objekt zu laden.</p>
<p>Jede ResourceCollections kann dabei eine andere InputStreamSource besitzen: Netzwerk, ZIP-Archiv, lokales Fileystem, Klassenpfad,&#8230; alles ist hier erlaubt.</p>
<p>Um nun auf den eigentlichen Grund dafür zurückzukommen: Es genügt nun die Übergabe eines InputStreamSource Objekts sowie eine dafür gültige Pfadangabe zu einer resource-collection.xml um sicherzustellen, dass eine Menge von Resourcen genau definiert ist. Für die meisten Anwendungsfälle wird es wohl so sein, dass während der Entwicklungszeit das InputStreamSource Objekt eine Instanz vonDirectoryInputStreamSource ist, welches einfach auf ein Filesystem-Verzeichnis verweist. Später, in einem Release wird dies wohl eher ein Verweis auf ein ZIP oder JAR-Archiv sein.</p>
<p>Das ResourceCollectionSet-System ist derzeit nur im Subversion-Repository vorhanden. Es wird aber im nächsten Release der <a title="The Parrot Engine" href="http://www.3dcoding.de/the-parrot-engine/">Engine </a>enthalten sein zusammen mit Beispielprogrammen.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2011/06/resource-collections-in-der-parrotengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ParrotEngine 0.2 released</title>
		<link>http://www.3dcoding.de/2010/03/parrotengine-0-2-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=parrotengine-0-2-released</link>
		<comments>http://www.3dcoding.de/2010/03/parrotengine-0-2-released/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 18:48:45 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Gamedev]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Parrotengine]]></category>
		<category><![CDATA[Rendering]]></category>
		<category><![CDATA[Terrain]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=409</guid>
		<description><![CDATA[Ab sofort ist die Version 0.2 der 3D Parrot Engine verfügbar! Gegenüber der Vorversion wurde die grundlegende Struktur der Engine überarbeitet, das Renderverfahren flexibler gestaltet und eine Menge Performanceoptimierungen sowie Verbesserungen an der Klassenstruktur vorgenommen. <a href="http://www.3dcoding.de/2010/03/parrotengine-0-2-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_410" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/terrain02.png" rel="lightbox[409]"><img class="size-full wp-image-410" title="Terrain Rendering" src="http://www.3dcoding.de/wp-content/uploads/2011/10/terrain02.png" alt="Terrain Rendering" width="600" height="300" /></a><p class="wp-caption-text">Terrain Rendering</p></div>
<p>Ab sofort ist die Version 0.2 der 3D Parrot Engine verfügbar! Gegenüber der Vorversion wurde die grundlegende Struktur der Engine überarbeitet, das Renderverfahren flexibler gestaltet und eine Menge Performanceoptimierungen sowie Verbesserungen an der Klassenstruktur vorgenommen.</p>
<p>Dieses Release hat als Hauptaufgabe die Basisinfrastruktur der Engine so zu stabilisieren, dass eine feste Grundlage entsteht auf der alle weiteren Erweiterungen implementiert werden können ohne eine erneute Anpassung der Grundstruktur zu erfordern.</p>
<p>Mit dieser Version kommen nun auch einige Beispielprogramme um den Einstieg in die Programmierung mit der Engine zu erleichtern und auch um die Features zu demonstrieren. Das Build-System wurde komplett überarbeitet so dass nun ein einzelnes build.xml alle Aufgaben erledigen kann: Auch das Starten der Beispielprogramme.</p>
<p>Ein <a title="ParrotEngine – Getting Started" href="http://www.3dcoding.de/the-parrot-engine/parrotengine-getting-started/">Getting-Started Tutorial</a> zeigt, wie einfach mit der Entwicklung mit der Engine begonnen werden kann. Angefangen von der Einrichtung der Entwicklungsumgebung bis hin zum ersten lauffähigen Programm. <a title="The Parrot Engine" href="http://www.3dcoding.de/the-parrot-engine/">Die Downloads und weiteren Links</a> befinden sich wie gehabt auf der Hauptseite der Engine.</p>
<h2>RenderState Sortierung und Optimierung</h2>
<div id="attachment_411" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/renderstates02.png" rel="lightbox[409]"><img class="size-medium wp-image-411" title="Renderstate Verwaltung" src="http://www.3dcoding.de/wp-content/uploads/2011/10/renderstates02-300x150.png" alt="Renderstate Verwaltung" width="300" height="150" /></a><p class="wp-caption-text">Renderstate Verwaltung</p></div>
<p>Jedes Objekt einer Szene kann ein oder mehrere Materialien verwenden. Ein Material wird über einen RenderState repräsentiert, welcher neben den üblichen OpenGL Material-Settings auch alle Textureinstellungen, die Shader-Programme, En- und Disabled Eigenschaften, den zu verwendenden Polygon Mode, Blend Operationen und viele weitere Eigenschaften enthält. Bei jedem Wechsel des aktiven RenderStates werden nur die OpenGL calls ausgeführt die wirklich notwendig sind. Es ist außerdem nicht notwendig, dass irgendein Objekt weiß welche Einstellungen in OpenGL vorliegen bevor es sich zeichnet &#8211; durch das Setzen seines RenderStates kann es sicher sein, dass genau nur die von ihm geforderten Einstellungen aktiv sind.</p>
<div id="attachment_412" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/performancegraph02.png" rel="lightbox[409]"><img class="size-medium wp-image-412" title="Realtime Graphanzeige" src="http://www.3dcoding.de/wp-content/uploads/2011/10/performancegraph02-300x97.png" alt="Realtime Graphanzeige" width="300" height="97" /></a><p class="wp-caption-text">Realtime Graphanzeige</p></div>
<p>Ein Timer-Framework hilft dabei Performance-Engpässe zu erkennen und zu beseitigen.</p>
<h2>Shader-Support</h2>
<p>Die Engine unterstützt Vertex- und Fragmentshader in GLSL. Die Shader sind in die RenderStates eingebettet und werden so als Teil der Materialien angesehen. Die Shader können deklarativ mit Properties im Programm verknüpft werden. Auf diesem Weg können Parameter an die Shader übergeben werden.</p>
<h2>Console</h2>
<div id="attachment_413" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/console02.png" rel="lightbox[409]"><img class="size-medium wp-image-413" title="Steuerungskonsole" src="http://www.3dcoding.de/wp-content/uploads/2011/10/console02-300x150.png" alt="Steuerungskonsole" width="300" height="150" /></a><p class="wp-caption-text">Steuerungskonsole</p></div>
<p>Um zur Laufzeit eine gute Kontrolle über die Engine zu haben und auch um auf ein laufendes Programm direkt Einfluss zu nehmen, gibt es die Console. Sie wird mit der Taste &#8220;^&#8221; eingeblendet und verfügt unter anderem über eine Historie der Eingabezeilen, Scrollback-Funktion und auch eine Eingabehilfe mit der Tabulator-Taste. Es ist für jedes Objekt sehr einfach möglich <a title="Dokumentation der Console-Kommandos" href="http://www.3dcoding.de/the-parrot-engine/dokumentation-der-console-kommandos/">Variablen oder Kommandos</a> in der Console zu registrieren und diese damit zur Laufzeit aufrufbar zu machen. Die der Console bereitgestellten Variablen sind so implemetiert, dass <strong>kein Performanceverlust</strong> dadurch entsteht. Es besteht also kein Grund darin, mit den Console-Variablen sparsam umzugehen.</p>
<h2><a title="Frustum" href="http://www.3dcoding.de/2008/06/frustum/">Frustum Culling</a></h2>
<p>Jedes Objekt im Szenenbaum besitzt eine Kugel die es komplett einschließt. Bevor Objekte gezeichnet werden, wird zunächst diese Kugel auf Sichtbarkeit geprüft und erst wenn die Kugel zumindest teilweise den aktiven Frustum berührt, wird das Objekt selbst auch gezeichnet. Das <a title="GPU-basiertes Zeichnen von Terrains" href="http://www.3dcoding.de/2009/04/gpu-basiertes-zeichnen-von-terrains/">Terrain </a>wird sogar in viele kleine Teile zerlegt und diese werden dann geprüft &#8211; allerdings werden die Terrainteile in Blöcke und nicht in Kugeln eingefasst.</p>
<h2>Partikeleditor</h2>
<div id="attachment_414" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/particleeditor02.png" rel="lightbox[409]"><img class="size-medium wp-image-414" title="Der Partikelsystem-Editor" src="http://www.3dcoding.de/wp-content/uploads/2011/10/particleeditor02-300x199.png" alt="Der Partikelsystem-Editor" width="300" height="199" /></a><p class="wp-caption-text">Der Partikelsystem-Editor</p></div>
<p>Mit dem Partikeleditor kann komfortabel ein Partikelsystem aus mehreren Partikelströmen erzeugt werden. Der Editor unterstützt das Live-Verändern von Texturen, Bewegungseinstellungen, Farbverläufen, Größenänderungen, Schwerkraftverlauf, Emitterstärke und einiges mehr. Die so erzeugten Partikelsysteme können in einer XML-Datei exportiert und dann im eigenen Programm durch die Engine geladen in den Szenenbaum eingehangen werden.</p>
<h2>Fontcreator</h2>
<div id="attachment_415" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/fontcreator02.png" rel="lightbox[409]"><img class="size-medium wp-image-415" title="Der Bitmapfont-Creator" src="http://www.3dcoding.de/wp-content/uploads/2011/10/fontcreator02-300x150.png" alt="Der Bitmapfont-Creator" width="300" height="150" /></a><p class="wp-caption-text">Der Bitmapfont-Creator</p></div>
<p>Der Fontcreator erzeugt aus TTF-Fonts Schrifttexturen die als Bitmapfonts verwendet werden können.</p>
<h2>3D-TTF Text</h2>
<div id="attachment_416" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/text3d02.png" rel="lightbox[409]"><img class="size-medium wp-image-416" title="3D Fonts aus Truetype Fonts" src="http://www.3dcoding.de/wp-content/uploads/2011/10/text3d02-300x230.png" alt="3D Fonts aus Truetype Fonts" width="300" height="230" /></a><p class="wp-caption-text">3D Fonts aus Truetype Fonts</p></div>
<p>Die Engine kann aus TTF-Dateien 3D-Texte erzeugen. Die Qualität der Texte kann beeinflusst werden und somit ist eine Steuerung der Menge an Geometriedaten möglich die erzeugt werden. Die 3D-Texte sind nach ihrer Erstellung normale 3D-Objekte und auch mit Texturkoordinaten versehen, so dass die normalen Objektoperationen damit möglich sind.</p>
<h2><a title="GPU-basiertes Zeichnen von Terrains" href="http://www.3dcoding.de/2009/04/gpu-basiertes-zeichnen-von-terrains/">Terrain Rendering mit LOD</a></h2>
<div id="attachment_410" class="wp-caption alignleft" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/terrain02.png" rel="lightbox[409]"><img class="size-medium wp-image-410" title="Terrain Rendering" src="http://www.3dcoding.de/wp-content/uploads/2011/10/terrain02-300x150.png" alt="Terrain Rendering" width="300" height="150" /></a><p class="wp-caption-text">Terrain Rendering</p></div>
<p>Aus einer Heightmap in Verbindung mit einer optionalen Textur kann ein Terrain erzeugt werden. Das Terrain wird unterteilt in ein NxN Raster von Blöcken. Diese werden &#8211; je nach Entfernung vom Betrachter &#8211; in unterschiedlichen Levels-of-Detail (LOD) dargestellt um die Menge an zu zeichnenden Geometriedaten zu optimieren.</p>
<h2>Skybox</h2>
<p>Einer Szene kann eine Skybox zugewiesen werden &#8211; dadurch ist es einfach möglich einer Szene einen Hintergrund zu geben der sich entsprechend bei der Änderung der Blickrichtung so verhält, als würde er eine weite umliegende Welt darstellen.</p>
<h2><a title="Game-Tutorial 2 – Eingabeverarbeitung" href="http://www.3dcoding.de/2009/05/game-tutorial-2-eingabeverarbeitung/">Input Handling</a></h2>
<p>Über eine Abstraktionsschicht werden die Benutzereingaben gekapselt und vorverarbeitet. Die Eingaben landen in einer Queue die dann an die in dieser Queue registrierte Listener verteilt werden. Diese Listener erhalten dann die Möglichkeit exklusiv die Eingaben zu verarbeiten oder aber auch nur als Proxy zu fungieren und unverändert passieren zu lassen. Durch dieses Verfahren ist es einfach möglich eine Mouselook-Funktion für ein Programm zu implementieren: Einfach einen TurntableRotator instanzieren und in die Queue einhängen &#8211; wenn nun für jedes Frame der Frustum des TurntableRotators geholt und in die Engine gesetzt wird kann man sich schon mit der Maus frei umsehen.</p>
<h2>Endlicher Automat</h2>
<p>Zur Verwaltung von Spielzuständen und deren Wechsel untereinander ist ein endlicher Automat integriert.</p>
<h2>Audio-System</h2>
<p>Das integrierte Audio-System unterstützt das Abspielen von mehreren gleichzeitigen Sounds im WAV als auch im OGG-Format.</p>
<h2>Blender Export Script</h2>
<p>Zur Erstellung von 3D-Objekten ist ein Python Export-Skript für Blender bei der Engine dabei. Dieses Skript muss lediglich in den Skript-Path von Blender kopiert werden und ist anschließend in den Export-Modulen von Blender zu finden. Das Skript exportiert alle selektierten Objekte in einzelne XML-Dateien die jeweils den Namen des Objekts tragen. Wenn Texturen zugeordnet sind, werden diese ebenfalls exportiert. Empties (leere Objekte in Blender) landen als Marker Objekte in den exportierten Objektdateien &#8211; damit kann von Applikationen über den Namen des Markers auf deren Position und Ausrichtung innerhalb eines Objekts zugegriffen werden. Die Partikel-Demo nutzt dieses Feature zum Beispiel um die Position des Partikelsystems im Holzstapel zu bestimmen.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2010/03/parrotengine-0-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schnittpunkt eines Strahls mit einem Terrain</title>
		<link>http://www.3dcoding.de/2009/11/schnittpunkt-eines-strahls-mit-einem-terrain/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=schnittpunkt-eines-strahls-mit-einem-terrain</link>
		<comments>http://www.3dcoding.de/2009/11/schnittpunkt-eines-strahls-mit-einem-terrain/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 18:54:18 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[3D-Algorithms]]></category>
		<category><![CDATA[Collision]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=311</guid>
		<description><![CDATA[Zur Berechnung des Schnittpunkts eines Strahls mit einem Terrain ist es wichtig die Menge der zu prüfenden Dreiecke zu minimieren, da ein Terrain in der Regel aus sehr vielen Flächen besteht. Ein sehr guter und schneller Weg dies zu erreichen &#8230; <a href="http://www.3dcoding.de/2009/11/schnittpunkt-eines-strahls-mit-einem-terrain/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Zur Berechnung des Schnittpunkts eines Strahls mit einem Terrain ist es wichtig die Menge der zu prüfenden Dreiecke zu minimieren, da ein <a title="GPU-basiertes Zeichnen von Terrains" href="http://www.3dcoding.de/2009/04/gpu-basiertes-zeichnen-von-terrains/">Terrain </a>in der Regel aus sehr vielen Flächen besteht. Ein sehr guter und schneller Weg dies zu erreichen besteht darin, den Weg des Strahls mitzuverfolgen und alle auf dem Weg für einen Schnittpunkt infrage kommenden Dreiecke zu testen.</p>
<p><span id="more-311"></span>Der erste Schnittpunkt den wir finden ist so auf jeden Fall auch der dem Strahl-Startpunkt am nächsten liegende Punkt &#8211; was in der Regel der gesuchte Schnittpunkt ist.</p>
<p>Der Weg des Strahls wird verfolgt, indem sowohl dessen Eintritt in, als auch dessen Austritt aus dem Terrain in Heightmap-Koordinaten berechnet werden und zwischen diesen beiden Punkte mit dem <a href="http://de.wikipedia.org/wiki/Bresenham-Algorithmus">Bresenham-Algorithmus</a> eine gerade Linie gezogen wird.</p>
<p>So erhalten wir genau den Bereich, den der Strahl im Terrain zurücklegt und innerhalb dessen ein Schnittpunkt gefunden werden muss falls einer existiert:</p>
<div id="attachment_312" class="wp-caption aligncenter" style="width: 282px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/rayterrainintersection2.png" rel="lightbox[311]"><img class="size-medium wp-image-312" title="Den Strahl mit Bresenham verfolgen" src="http://www.3dcoding.de/wp-content/uploads/2011/10/rayterrainintersection2-272x300.png" alt="Den Strahl mit Bresenham verfolgen" width="272" height="300" /></a><p class="wp-caption-text">Den Strahl mit Bresenham verfolgen</p></div>
<p>Von der Seite betrachtet sieht man den Verlauf des Strahls und die Schnittpunkte mit dem Terrain:</p>
<div id="attachment_313" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/rayterrainintersection1.png" rel="lightbox[311]"><img class="size-medium wp-image-313" title="Seitenansicht der Strahlverfolgung" src="http://www.3dcoding.de/wp-content/uploads/2011/10/rayterrainintersection1-300x154.png" alt="Seitenansicht der Strahlverfolgung" width="300" height="154" /></a><p class="wp-caption-text">Seitenansicht der Strahlverfolgung</p></div>
<p>Die Kreise markieren jeweils den Ein- und Austrittspunkt des Strahls in die achsenparallele Bounding Box (AABoundingBox). Die Quadrate zeigen die so gefundenen Schnittstellen.</p>
<p>Sollte der Strahl innerhalb der Bounding Box beginnen, so wird der Startpunkt des Strahls als Startpunkt für die Strahlverfolgung verwendet.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2009/11/schnittpunkt-eines-strahls-mit-einem-terrain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feuer-Demo des Partikel-Systems</title>
		<link>http://www.3dcoding.de/2009/07/feuer-demo-des-partikel-systems/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=feuer-demo-des-partikel-systems</link>
		<comments>http://www.3dcoding.de/2009/07/feuer-demo-des-partikel-systems/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 21:08:34 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Rendering]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=405</guid>
		<description><![CDATA[Ich habe eine Webstart-Demo online gestellt die den aktuellen Stand des Partikel-Systems in der Parrot Engine zeigt. Das Bild zeigt ein aus Partikeln bestehendes Feuer. In der Engine gibt es bereits einen umfangreichen Partikel-Editor der das erstellte System per XML &#8230; <a href="http://www.3dcoding.de/2009/07/feuer-demo-des-partikel-systems/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_406" class="wp-caption alignleft" style="width: 222px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/particlefire2.png" rel="lightbox[405]"><img class="size-medium wp-image-406" title="Feuer mit dem neuen Partikelsystem" src="http://www.3dcoding.de/wp-content/uploads/2011/10/particlefire2-212x300.png" alt="Feuer mit dem neuen Partikelsystem" width="212" height="300" /></a><p class="wp-caption-text">Feuer mit dem neuen Partikelsystem</p></div>
<p>Ich habe eine Webstart-Demo online gestellt die den aktuellen Stand des Partikel-Systems in der Parrot Engine zeigt. Das Bild zeigt ein aus Partikeln bestehendes Feuer.</p>
<p>In der Engine gibt es bereits einen umfangreichen Partikel-Editor der das erstellte System per XML exportieren kann. Diese XML-Datei wird direkt von der Engine verarbeitet und das hierdurch definierte System kann anschließend direkt in den Szene-Graphen eingefügt werden. Das Zeichnen und simulieren des Systems steuert dann alles die Engine ganz automatisch.</p>
<p>Beim nächsten Release wird sowohl der Partikel-Editor schon mit dabei sein als auch diese Feuer-Demo und der Alienshooter. Ich hoffe auch, dass ich dazu kommen werde mit dem nächsten Release einiges an Dokumentation mitzuliefern: Eine Referenzdoku sowie ein &#8220;Getting-Started&#8221; sind wohl erstmal am dringensten.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2009/07/feuer-demo-des-partikel-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preview-Release des Alien-Shooters!</title>
		<link>http://www.3dcoding.de/2009/06/preview-release-des-alien-shooters/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=preview-release-des-alien-shooters</link>
		<comments>http://www.3dcoding.de/2009/06/preview-release-des-alien-shooters/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 08:37:36 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Gamedev]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=402</guid>
		<description><![CDATA[Das erste Preview-Release meines Alien-Shooters ist raus! Ihr könnt den Alien Shooter über Java WebStart starten (aktuell defekt, da JOGL Webstart Libraries nicht funktionieren) Spielinhalt Das Ziel des Spiels ist es so viele Punkte wie möglich durch das Abschiessen von &#8230; <a href="http://www.3dcoding.de/2009/06/preview-release-des-alien-shooters/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Das erste Preview-Release meines Alien-Shooters ist raus!</p>
<div id="attachment_403" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_intro2.png" rel="lightbox[402]"><img class="size-medium wp-image-403" title="Intro Screenshot" src="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_intro2-300x225.png" alt="Intro Screenshot" width="300" height="225" /></a><p class="wp-caption-text">Intro Screenshot</p></div>
<p>Ihr könnt den <del>Alien Shooter über Java WebStart starten</del> (aktuell defekt, da JOGL Webstart Libraries nicht funktionieren)</p>
<h2>Spielinhalt</h2>
<p>Das Ziel des Spiels ist es so viele Punkte wie möglich durch das Abschiessen von Aliens zu sammeln. Die Aliens steigen hinter einer Bergkette auf und überqueren das Spielgebiet bevor sie wieder verschwinden. Der Spieler hat während dieser Passage die Möglichkeit die Ufos abzuschiessen.</p>
<p>Zum Schiessen hat der Spieler eine Kanone mit zwei Rohren die jeweils abwechselnd eine Rakete abfeuern können. Raketen fliegen nicht unendlich schnell, so dass man etwas vorhalten sollte um die Ufos auch zu treffen.</p>
<p>Es gibt Extrapunkte wenn mehr als 70% der Schüsse ihr Ziel erreicht haben und wenn alle Ufos eines Levels erledigt wurden.</p>
<p>Das Spiel endet, wenn in einem Level nicht mindestens die geforderte Abschussquote erreicht wurde.</p>
<p>In der aktuellen Preview-Version gibt es derzeit nur eine Sorte Ufos und 5 Level. Die später folgende, fertige Version wird viele verschiedene Feinde, deutlich mehr Level und ggfls. auch Powerups und Sondermissionen beinhalten.</p>
<h2>Bedienung</h2>
<p>Die zum Spielen notwendigen Tasten werden stets eingeblendet. Außerdem benötigt ihr die Maus um die Kanone zu steuern und zu schiessen.</p>
<p>Während des Spiels kann mit &#8220;ESC&#8221; pausiert werden.</p>
<h2>Fehler gefunden?</h2>
<p>Falls irgendetwas nicht funktionieren sollte, dann sendet mir bitte die Datei &#8220;alienshooter.log&#8221; aus eurem Homeverzeichnis mit einer Beschreibung was ihr gemacht habt, was nicht funktierte und wie sich das geäußert hat.</p>
<p>Die Log-Datei findet ihr unter einem deutschen Windows XP unter C:/Dokumente und Einstellungen/BENUTZERNAME. Unter Vista findet ihr den Ordner unter C:/Users/BENUTZERNAME. Bei Vista ist es egal ob ihr eine deutsche oder englische Version benutzt.</p>
<p>Ich freue mich natürlich auch über Anregungen, Anfragen, Kritik, Tipps und alles andere an Feedback!</p>
<p>Viele Grüße und viel Spaß &#8211; Stefan<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2009/06/preview-release-des-alien-shooters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das Alien Shooter-Spiel nähert sich der Fertigstellung</title>
		<link>http://www.3dcoding.de/2009/06/das-alien-shooter-spiel-nahert-sich-der-fertigstellung/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=das-alien-shooter-spiel-nahert-sich-der-fertigstellung</link>
		<comments>http://www.3dcoding.de/2009/06/das-alien-shooter-spiel-nahert-sich-der-fertigstellung/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 07:41:39 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Gamedev]]></category>

		<guid isPermaLink="false">http://www.3dcoding.de/?p=396</guid>
		<description><![CDATA[Die letzten Tage waren vor allem mit der Arbeit an dem 3D-Font erfüllt. Hierzu habe ich die Convert-Funktion von Blender genutzt (Alt-C) um aus einem Font-Objekt ein Mesh zu erzeugen. Nachdem die Faceanzahl über den Decimate-Modifier verringert wurde und der &#8230; <a href="http://www.3dcoding.de/2009/06/das-alien-shooter-spiel-nahert-sich-der-fertigstellung/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Die letzten Tage waren vor allem mit der Arbeit an dem 3D-Font erfüllt. Hierzu habe ich die Convert-Funktion von Blender genutzt (Alt-C) um aus einem Font-Objekt ein Mesh zu erzeugen. Nachdem die Faceanzahl über den Decimate-Modifier verringert wurde und der Font per extrudieren in die Tiefe gezogen wurde, habe ich die Vorderseite manuell noch etwas interessanter gestaltet. Das manuelle Löschen der Vorderseite jedes Characters und durch eine manuell erzeugte, mit einer Kante versehenen auszutauschen war eine wahre Fleissarbeit&#8230;</p>
<div id="attachment_397" class="wp-caption aligncenter" style="width: 880px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_3dfont_blender.png" rel="lightbox[396]"><img class="size-full wp-image-397" title="Der 3D Font wird in Blender erstellt" src="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_3dfont_blender.png" alt="Der 3D Font wird in Blender erstellt" width="870" height="606" /></a><p class="wp-caption-text">Der 3D Font wird in Blender erstellt</p></div>
<p>Dieser Font kommt nun überall im Spiel zum Einsatz. Der neu erstellte Intro-Screen enthält diesen Font zweimal &#8211; jeweils mit einem anderen RenderState. Der Titel des Spiels ist mit einer Textur überzogen deren u/v Koordinaten über einen Fragment-Shader bewegt werden. Der Text unten &#8220;Press SPACE to start&#8221; entält lediglich einen sehr einfachen Lighting-Shader der einfache Beleuchtungseffekte erzeugt damit der Font räumlicher wirkt.</p>
<div id="attachment_398" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_intro.png" rel="lightbox[396]"><img class="size-full wp-image-398" title="Screenshot vom Intro Bildschirm" src="http://www.3dcoding.de/wp-content/uploads/2011/10/screenshot_intro.png" alt="Screenshot vom Intro Bildschirm" width="640" height="480" /></a><p class="wp-caption-text">Screenshot vom Intro Bildschirm</p></div>
<ul>
<li>Die Raketen die der Spieler abfeuern kann haben nun, nach der Optimierung des Partikelsystems auch eine Rauchwolke die sie hinterlassen.</li>
<li>Titelmusik ist implementiert (von http://audio.ibeat.org/)</li>
<li>Die Ufos haben nun auch einen Explosions-Sound wenn sie getroffen werden</li>
<li>Es gibt einen Radar der anzeigt wo gerade Ufos sind &#8211; der Spieler muss dann nicht so viel suchen</li>
<li>Ein Level des Spiels besteht aus mehreren Angriffswellen &#8211; definiert über XML-Dateien. So können einfach neue Levels hinzugefügt werden.</li>
</ul>
<p>Und es geht weiter&#8230;.<!-- PHP 5.x --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3dcoding.de/2009/06/das-alien-shooter-spiel-nahert-sich-der-fertigstellung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

