<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>Matrix3DEx Wiki Rss Feed</title><link>http://matrix3dex.codeplex.com/wikipage</link><description>Matrix3DEx Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=42</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements. So it supports affine and non-affine transformations.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt;     &lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=208965" alt="cubemania.jpg" title="cubemania.jpg" /&gt;   &lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=208967" alt="gogoracer.jpg" title="gogoracer.jpg" /&gt;&lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Great games&lt;/h1&gt;Dan Birch of vectorlight.net developed two great games using Matrix3DEx (see the screenshots above).&lt;br /&gt;&lt;a href="http://www.vectorlight.net/games/cubemania.aspx" class="externalLink"&gt;Cubemania&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a great and highly addictive rigid body physics game.&lt;br /&gt;&lt;a href="http://www.vectorlight.net/games/go_go_racer.aspx" class="externalLink"&gt;Go Go Racer!&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a nice 2.5D racing game.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Support it&lt;/h1&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=MEX6JGW8E56MQ"&gt;&lt;img style="border:none;" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif" alt="Donate" title="Donate" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flattr.com/thing/1952/Matrix3DEx"&gt;&lt;img style="border:none;" src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Thu, 17 Feb 2011 21:55:54 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110217095554P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=41</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements. So it supports affine and non-affine transformations.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt;     &lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=208965" alt="cubemania.jpg" title="cubemania.jpg" /&gt;   &lt;span class="unresolved"&gt;Cannot resolve image macro, invalid image name or id.&lt;/span&gt;&lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Great games&lt;/h1&gt;Dan Birch of vectorlight.net developed two great games using Matrix3DEx (see the screenshots above).&lt;br /&gt;&lt;a href="http://www.vectorlight.net/games/cubemania.aspx" class="externalLink"&gt;Cubemania&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a great and highly addictive rigid body physics game.&lt;br /&gt;&lt;a href="http://www.vectorlight.net/games/go_go_racer.aspx" class="externalLink"&gt;Go Go Racer!&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; is a nice 2.5D racing game.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Support it&lt;/h1&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=MEX6JGW8E56MQ"&gt;&lt;img style="border:none;" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif" alt="Donate" title="Donate" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flattr.com/thing/1952/Matrix3DEx"&gt;&lt;img style="border:none;" src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Thu, 17 Feb 2011 21:55:10 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110217095510P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=40</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements. So it supports affine and non-affine transformations.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Support it&lt;/h1&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=MEX6JGW8E56MQ"&gt;&lt;img style="border:none;" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif" alt="Donate" title="Donate" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flattr.com/thing/1952/Matrix3DEx"&gt;&lt;img style="border:none;" src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Thu, 22 Jul 2010 14:07:17 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100722020717P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=39</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Support it&lt;/h1&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=MEX6JGW8E56MQ"&gt;&lt;img style="border:none;" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif" alt="Donate" title="Donate" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flattr.com/thing/1952/Matrix3DEx"&gt;&lt;img style="border:none;" src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Mon, 07 Jun 2010 09:45:36 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100607094536A</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=38</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Support it&lt;/h1&gt;&lt;a href="http://flattr.com/thing/1952/Matrix3DEx"&gt;&lt;img style="border:none;" src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Fri, 14 May 2010 19:14:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100514071421P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=37</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Support it&lt;/h1&gt;&lt;a href="http://flattr.com/thing/1949/WriteableBitmapEx"&gt;&lt;img style="border:none;" src="http://api.flattr.com/button/button-static-50x60.png" alt="Flattr this" title="Flattr this" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Fri, 14 May 2010 19:13:28 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100514071328P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=36</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Fri, 19 Feb 2010 14:39:17 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100219023917P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=35</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Fri, 19 Feb 2010 14:31:57 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100219023157P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=34</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scaling and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Mon, 18 Jan 2010 21:37:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100118093737P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=33</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scale and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and provides some further information.&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Mon, 18 Jan 2010 21:35:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100118093525P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=32</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scale and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width, myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and explains the sample.&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Mon, 18 Jan 2010 21:13:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100118091325P</guid></item><item><title>Updated Wiki: Home</title><link>http://matrix3dex.codeplex.com/wikipage?version=31</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Description&lt;/h1&gt;The Matrix3DEx library is a collection of extension and factory methods for Silverlight&amp;#39;s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d%28VS.95%29.aspx" class="externalLink"&gt;Matrix3D struct&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3D struct represents a 4x4 matrix that is used in combination with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.matrix3dprojection%28VS.95%29.aspx" class="externalLink"&gt;Matrix3DProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; to apply more complex semi-3D scenarios to any UIElement than are possible with the simple &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.planeprojection%28VS.95%29.aspx" class="externalLink"&gt;PlaneProjection&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. This makes it possible to apply arbitrary model transformation matrices and perspective matrices to Silverlight elements.&lt;br /&gt;The Matrix3D struct is very minimalistic and has only a few &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d_members%28VS.95%29.aspx" class="externalLink"&gt;members&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. The Matrix3DEx library tries to compensate that with extension and factory methods for common transformation matrices that are easy to use like built in methods.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=Matrix3DEx&amp;DownloadId=101876" alt="screenshot.jpg" title="screenshot.jpg" /&gt; &lt;br /&gt;
&lt;h1&gt;Features&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Factory methods (&lt;span class="codeInline"&gt;Matrix3DFactory&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Translation, scale and rotation around x, y, z or any defined axis&lt;/li&gt;
&lt;li&gt;Perspective field of view and orthographic projection&lt;/li&gt;
&lt;li&gt;Camera (look-at) with position, target and up vector&lt;/li&gt;
&lt;li&gt;Support for left-handed and right-handed coordination systems&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Extension methods
&lt;ul&gt;&lt;li&gt;Calculation of the matrix&amp;#39; determinant&lt;/li&gt;
&lt;li&gt;Matrix transpose&lt;/li&gt;
&lt;li&gt;SwapHandedness to change from right-handed to left-handed coordination system and vice versa&lt;/li&gt;
&lt;li&gt;Dump of the values row by row into a formatted string &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math helper methods (&lt;span class="codeInline"&gt;MathHelper&lt;/span&gt; class)
&lt;ul&gt;&lt;li&gt;Angle conversion from degrees to radians and vice versa&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Live samples&lt;/h1&gt;Samples that come with the Matrix3DEx source code in action:&lt;br /&gt;The &lt;a href="http://dl.dropbox.com/u/2681028/CodeplexData/Matrix3DEx/Sample/Matrix3DExSampleTestPage.html" class="externalLink"&gt;Basic Sample&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; loads some photos asynchronously and randomizes the position vector of each one. The sample uses most of the Matrix3DEx features and has some Sliders and CheckBoxes to change the parameters. Uncheck the &amp;quot;Animate&amp;quot; CheckBox to disable the camera movement and click on an Image to select it. The translation, scaling and the rotation matrices of the selected element can be changed with the corresponding Sliders. You can move the camera, change the target and the &amp;quot;Field Of View&amp;quot; with the other Sliders or fix the camera target at the selected element.&lt;br /&gt;
&lt;h1&gt;Easy to use!&lt;/h1&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Create transformations&lt;/span&gt;

&lt;span style="color:Green;"&gt;// Translate by x = 5, y = 4, z = -10&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; translate = Matrix3DFactory.CreateTranslation(5, 4, -10);         

&lt;span style="color:Green;"&gt;// Rotate 30&amp;#176; around x-axis&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; rotateX = Matrix3DFactory.CreateRotationX(MathHelper.ToRadians(30));

&lt;span style="color:Green;"&gt;// Double the size on x-axis, invert y and don&amp;#39;t change z&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; scale = Matrix3DFactory.CreateScale(2, -1, 1);

&lt;span style="color:Green;"&gt;// Left-handed camera at the position x = 0, y = 5, z = 0 that looks to the negative z direction (z = -1)&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; lookAt = Matrix3DFactory.CreateLookAtLH(0, 5, 0, 0, 0, -1);

&lt;span style="color:Green;"&gt;// Left-handed perspective projection with a 45&amp;#176; field of view, a near view plane at 1 and a far view plane at 4000&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; aspectRatio = myCanvas.Width / myCanvas.Height;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; projection = Matrix3DFactory.CreatePerspectiveFieldOfViewLH(MathHelper.ToRadians(45), aspectRatio, 1, 4000);

&lt;span style="color:Green;"&gt;// Viewport transformation&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewport = Matrix3DFactory.CreateViewportTransformation(myCanvas.Width myCanvas.Height);


&lt;span style="color:Green;"&gt;// Combine transformations&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; world = scale * rotateX * translate;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; viewProjection = Matrix3DFactory.CreateViewportProjection(world, lookAt, projection, viewport);


&lt;span style="color:Green;"&gt;// Apply transformation to UIElement&lt;/span&gt;
myImageControl.Projection = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Matrix3DProjection { ProjectionMatrix = viewProjection };


&lt;span style="color:Green;"&gt;// Trace final matrix&lt;/span&gt;
myTextBlock.Text = viewProjection.Dump();
&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Additional Information&lt;/h1&gt;&lt;a href="http://kodierer.blogspot.com/2010/01/matrix3dex-10-when-planeprojection-is.html" class="externalLink"&gt;Matrix3DEx 1.0 - When PlaneProjection is not enough&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announced this project and explains the sample.&lt;br /&gt;
&lt;h1&gt;Credits&lt;/h1&gt;&lt;a href="http://rene-schulte.info" class="externalLink"&gt;Ren&amp;#233; Schule&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; coder and coordinator of this project.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>teichgraf</author><pubDate>Mon, 18 Jan 2010 20:39:41 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100118083941P</guid></item></channel></rss>