<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Graphic Stream : LOD</title><link>http://msmvps.com/blogs/valentin/archive/tags/LOD/default.aspx</link><description>Tags: LOD</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Smart Terrain Rendering with Xna using Billod algorithm</title><link>http://msmvps.com/blogs/valentin/archive/2008/09/30/smart-terrain-rendering-with-xna.aspx</link><pubDate>Tue, 30 Sep 2008 12:13:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1649604</guid><dc:creator>valentin</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=1649604</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2008/09/30/smart-terrain-rendering-with-xna.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;background-color:#ffff00;"&gt;Version Fran&amp;ccedil;aise &lt;a target="_blank" href="http://msdn.microsoft.com/fr-fr/directx/msdn.xna.billod.aspx"&gt;ici&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;If you&amp;#39;re a game developer you&amp;#39;ve already worked on terrain rendering. It is, in my opinion the critical point of a game. Not because conceptually speaking it is the most important visible thing on the screen but because it is the main factor playing on the performance and quality of your application. It is therefore important to use techniques designed to minimize the burden borne by your game to view the ground while preserving its quality display. This article shows a way that attempts to answer this question in XNA. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Conducting a study of game engine designed to help game developers in the Imagine Cup competition, I naturally preferred this important aspect in seeking a way to display a 3D world unlimited real size with an acceptable level of detail. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;There are many techniques for displaying world explained by interesting articles. These are often based on a compromise uncomfortable wearing a choice between the size of land or quality level. In addition, they are often prohibitive algorithms. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;This article does not appear as the only possible response to the display ground XNA but would just provide an effective solution running for this technology knowing that most of the examples existing on the Web are made in DirectX and OpenGL. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We will split our study in several phases: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;First we describe the problems posed by the display of land and explain the need for optimization. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We then describe the method used to cut our land into a QuadTree. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We will explain how we reduce the retail field at distance while keeping up its appearance nearby. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We will describe a more technical implementation of this technique &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Finally we will see possible optimizations offered to the reader. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The problem &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Let&amp;#39;s say we wanted to model a land about 10 km by&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;10km with a degree of detail about 1 meter (1 kilometer = 1000 meters). So we have (without optimization)&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;a grid of 100000 * 100000 to show. We have to specify that that each vertex of the grid has a memory size equal to approximately 40 bytes. It reaches&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;about 4 gigabytes of data to display. The hardware of a lambda PC cannot handle such loads memory. Another problem, such a field modeled in a grid rendering static demand of 200 million triangles per frame. This is a disaster. From the moment the size of the field becomes important and where we add the ground ingredients of usual games, as 3D models, an user interface, animations,&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;performance of a game can no longer follow. This is here, that we have to manage a smart rendering. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;It is therefore important that the CPU and / or GPU taken by the display field is as low as possible to keep processing time for other needs of the game. The virtual world offered by most modern games are huge and cannot be done with a simple static grid &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The need for optimization is therefore evident. I invite readers to visit http://ww.vterrain.org to discover some presentations techniques other than that presented here. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;If we had a specification to comply, we would have: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Keep the appearance of the ground up by reducing as much as possible the burden with its display. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Make the management of land by the code clean and accessible. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Using a technique efficient, simple and fast. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Respecting a QuadTree to optimize performance and meet the needs of treatment games. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article1.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article1small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Keep appearance with 100 times less resources, is a beautiful goal!. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The QuadTree &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The first step is to manage our future terrain through a QuadTree. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;A QuadTree is a data type tree in which each node can have up to four children. The Quadtrees are most often used to split a two-dimensional (3D abscissa and depth) by recursively subdivided into four knots. Each node has 4 children and so on. The route of such a tree is simple and takes on average the same time : for each level, there is a maximum of 4 tests to be &amp;quot;allowed&amp;quot; to navigate into lower level.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;This is important given the task before us here: &amp;quot;Show ground with maximum details using minimal resources.&amp;quot;. The goal is to minimize the course of such a tree through its hubs in making these tests smart and simple. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Principle &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The QuadTree (often used for rendering the field) provides an intelligent answer to the problem of optimization. First it loads the data only when needed. Then, the burden caused by the representation of a node on the screen depends on the depth of the node in the tree. Therefore, the sooner it is estimated that a node not be displayed in the course of a tree, the greater the optimization of display is realized (we limit the same time the number of triangles to display ). We will explain it all over this article. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article19.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article19.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;More on sinking into the tree, more precision displayed with refined detail. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The real question to be asked to optimize the display of our tree is &amp;quot;what tests should be performed to determine the appropriateness of displaying a node on the screen&amp;rdquo;. We will see this as soon as possible. For now let us concentrate on how we manage the tree in our code. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Display the tree &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Initially our terrain is only rendered by a single node (see picture above). The node size will be equals to the size of the terrain. A node on the screen corresponds to a surface composed of 9 square vertices: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;1. Nord North &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;2. Nord Est North East &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;3. Est East &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;4. Sud Est South East &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;5. Sud South &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;6. Sud Ouest South West &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;7. Ouest West &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;8. Nord Ouest North West &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;9. Centre Center &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article3.png"&gt;&lt;img height="273" width="273" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article3.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;A node is composed of 9 vertices &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The QuadTree will be based on a heightfield (a two-dimensional array containing all the heights of each vertex Y on the screen). Each vertex of each node in the QuadTree has a height whose value is drawn from the heightfield. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Initially, only the corner of&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a node are visible, namely: North East, South East, North West, South West. Its rendering is similar to the following picture: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article4.png"&gt;&lt;img height="273" width="273" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article4.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;The shaded vertices are visible vertices &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;These four vertices displayed allow us to draw two triangles form the surface of square knot. For each update of the terrain, for each node currently visible, we calculate the visibility of each of the vertices. Each update of a node is accompanied by a redrawing of triangles that make it up. he following picture explicit some possible configurations for a node: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article5.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article5small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The algorithm for this part would be: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;/ / For each of the vertices North, East, South, West &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;If ( !Vertex.Visible &amp;amp;&amp;amp; VertexTest()) &lt;/span&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Vertex.Visible = true ; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;Else if (Vertex.Visible &amp;amp;&amp;amp; !VertexTest()) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Vertex.Visible = false; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The test of this algorithm takes into account the distance of the vertex from the camera and the growing need for detail as the camera approached it. We will see the nature of this test later. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;In a second step it is necessary to calculate the visibility of children of current node. A node consists of four children as the next picture shows: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article6.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article6.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;Here we have shown the North East of child root node, then the child South East of it, then the child of the South East last child finally North West of it. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The more one penetrates deep into the QuadTree over the mesh tightens and will display a more detailed terrain. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The algorithm for this part at this stage of our study would be: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;// For each of the four children North West, North East, South West, South East &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;If ( !Child.Visible &amp;amp;&amp;amp; ChildTest()) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Child.Visible = true ; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;Else if (Child.Visible &amp;amp;&amp;amp; ! ChildTest()) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Child.Visible = false; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Once again, the test of this algorithm takes into account the distance to which the child and the growing need for detail as the camera approached it. We will see the nature of this test later. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;When a child is exposed, its vertices and his own children are subject to two algorithms that we have just seen. We are therefore in a principle of recursion. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We compute the triangles that&amp;rsquo;s makes a node by not taking into account the parts overshadowed by children: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article8.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article8.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;We note here that the vertices North and East of the parent shared with the vertices North West and South West of the child. We will see that later. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The basic principle of the Billod algorithm is relatively simple. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Vertices et enfants &amp;agrave; afficher sont soumis &amp;agrave; chaque mise &amp;agrave; jour du terrain &amp;agrave; un ensemble de tests qui d&amp;eacute;terminent leur visibilit&amp;eacute;. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Vertices and children are subjected, at each updated of the terrain, to a set of tests that determine their visibility. The display of a node node is a recursive set of instructions that&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;goes through the&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;QuadTree along the root node to each leaf node of each branch. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Improvements &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We talked previously shared vertices between a child and a parent. The previous image illustrates this point. This may cause an unpleasant graphic bug illustrated by the image below: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/image50.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/image50small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Or, with wireframe: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/image48.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/image48.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;This problem is due to the non-activation of a vertex in the neighboring node. The nodes affected by this bug are: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article10.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article10.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;So in reality: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article25.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article25.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt; &lt;span style="font-size:small;"&gt;The West vertex of the child red is activated but not the vertex of the yellow child. There is therefore a delta between the two sides of the two children. To resolve this bug simply validate the vertex of the child is yellow:
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article11.png"&gt;&lt;img height="273" width="273" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article11.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Finally we get a perfect continuity:
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/image49.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/image49.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt; &lt;span style="font-size:small;"&gt;Now imagine that the southern vertex of the yellow child becomes visible. The parent node has only two children north west and north east. Activating this vertex pose the same problem as before graph:
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article12.png"&gt;&lt;img height="273" width="273" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article12.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt; &lt;span style="font-size:small;"&gt;Unfortunately, unlike the previous case, there are no children in the South West. It is therefore necessary to create a child to this position (although the &amp;quot;ChildTest&amp;rdquo; of our algorithm for that child returns false) and to activate its North vertex: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article13.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article13.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The addition of southern vertex of the white child led to the creation of the Child South West and the activation of southern vertex parent node. The vertex South may itself cause the modification of neighboring nodes. There are, here, some cascading effects that are not really controllable but, fortunately, limited. The following image shows the impact of activation of several children deep into the QuadTree at the bottom right of the terrain. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article10.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article10.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We note that the nodes located at the opposite are impacted. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Managing nodes in the QuadTree &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Some years ago I read an excellent article by a person named Stan Melax author of an ingenious technique for calculating a dynamic aspect of a 3D model at different levels of resolution. The articles on progressive meshes are subject to the same laws as those on land: either the reduction algorithm is too complicated or it is inappropriate. Stan Melax found a clever way to solve this problem. He studies the cost the disappearance of each vertex by studying their impact on the overall shape. He is then able to gradually reduce the resolution of the 3D model by removing&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;vertices in a logical order with the less impact. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Its strength lies in the calculation of the cost of a vertex which proves to be a simple and effective. We will proceed the same way. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The curve : Element to remember &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;To explain simply&amp;nbsp;: &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;We measure a terrain to its forms. We measure a form to its curves. The question is then: how to define a curve ?. Answering this question would determine the locations of the terrain where we must keep an important retail level and those that can be degraded. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;There are many techniques to transform a curve into a mathematical function. We return in this case to the beginning problem: Do not overload the processor too much. We have seen, it is necessary to execute the formula found at all vertices and all children nodes. A formula that generates a lot of instructions will deteriorate application performance. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The solution is simple. We have said that our land is splitted into a set of nodes belonging to a tree. Each curve of the land therefore consists of nodes that are actually surfaces square whose size varies &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article2.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article2small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;br /&gt;The terrain is a set of curves visible on the screen. Each curve is an assembly of square knots coast to coast glued. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The normal, order of magnitude of a curve &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Plus la courbe est importante, plus les n&amp;oelig;uds qui la composent forment un angle important. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The greater the curve is, the greater the angles made by its nodes are important. Take for example a curve : &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article18.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article18.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;It shows all nodes glued side by side. At the place where the curve is really important we find nodes that form an angle. In contrast to where there is no curve, but a simple slope, nodes coast to coast appear to belong to the same plane. We noticed even more if we show each normals nodes: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article24.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article24.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We are now close to finding the formula! All the students know that the mathematical function that measures the angle between two vectors is the dot product. &lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article20.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article20small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;The inner product of two vectors represented by non-zero vectors A and B is the actual number ABcos (&amp;theta;) if the angle &amp;theta; is the angle formed between the two lines whose direction are represented by the two vectors. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The maximum angle that can be found in a curve of land as we conceive it tends to 90 degrees (90 degrees value cannot be achieved because nodes can&amp;rsquo;t overlap). Cos 90 equal 0 so we can infer that when the curve formed by the vectors is important, their dot product approach 0 (A * B * Cos (90) = A * B * 0 = 0). On the contrary if the value of inner product increases, is that the curve formed by the two nodes tend toward the &amp;quot;right&amp;quot; (A * B * Cos (0) = A * B * 1 = AB).&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;See this picture: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article16.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article16.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The inner product between the normal parent and child will return here a value far away from 0 : we are on a surface, certainly inclined, but plane. Needless to cut the node. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Consider now a pronounced curve : &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article23.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article23.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The angle between the three normals is more pronounced. The original node (symbolized by the black dotted line) should be divided into sub-nodes. We can found in this process a certain logic: a flat surface is easily modeled with few polygons. A curved surface ask for much. Here to complete the wireframe curve: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article17.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article17small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;Where the curve is more pronounced, our technique uses more primitives &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Activation &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Child Test method should compare the normal of the children to test with the normal of the parent node to which it belongs. If the angle between the two normal exceeds a threshold when the method returns true. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Disabling &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Disabling a child occurs when a series of factors are met: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The child has no longer visible vertices &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The child has more sub-children &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The test method returns false. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Enable/Disable switch node in the vertex &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Interpolated to real &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;La gestion de la visibilit&amp;eacute; des vertices ne suit pas la m&amp;ecirc;me logique que celle d&amp;eacute;crite pr&amp;eacute;c&amp;eacute;demment. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The management of the vertices visibility does not follow the same logic as that described above. Here there is no curves but delta.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Only vertices on the sides of a node are to be tested. So the North, East, South, West vertices. When a node is created, this vertices are not visible. But they are located between two vertices on node edge and so, we can deduce their height easily. Here is an example of node viewed from the side: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article21.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article21.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;It shows the vertices North West and South West enabled (visible)) and West&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertex disabled. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The West vertex seems to be on the right along the two summits. In real, it may not. For now we have interpolated (deducted) its position (If South West is at a height of 10 and North West at a height of 20, it is reasonable to assume that the West vertex will be at a height of 15). Yet in reality, it is may be at another height: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article22.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article22.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;There is a distance between the delta position of vertex West interpolated its actual position. This difference in height measures the degree of reality of the node currently displayed with a more detailed version. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;View node with only the 4 vertices summits displayed therefore does not adequately reflect the reality on the ground displayed by the node. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Way of activation &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The activation method is very simple, we only need to determine the Delta value (a simple difference of heights) and determine if it exceeds a threshold too. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Test of disabling &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Disabling a vertex is only when a series of factors are met: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The vertex is used by a child node &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The test method returns false. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Progressive Details &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;It was one of the prerequisites for our technology, we must optimize the display according to the camera position. At this point, our two functions tests (for vertices and children nodes) do not take into account the camera position and the position of the element to test. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We have seen in the two algorithms dedicated to the vertices and nodes, that test is performed to determine if a vertex or child should be displayed or not. The land must be displayed according to the camera position for the comfort of the player. The more an area of land is close to the camera the more it have to be detailed. It also aims to preserve up to the appearance of the terrain away with a minimum of vertices and gradually detail when the camera comes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article14.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article14small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Detail for progressive QuadTree &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;For the time the testing method is based on the angle made between the normal of a child with its parent.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This procedure is not necessarily relevant distance. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;If a few degrees angle is visible when you are close to the nodes that make up this angle is not necessarily detectable at a distance It is not necessary to activate the child. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Here is the implementation of this test method: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:#0000ff;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;private&lt;/span&gt; &lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; ChildTest(&lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt; childNormal, &lt;span style="color:#2b91af;"&gt;BoundingBox&lt;/span&gt; boundingBox, &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt; cameraPosition) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//by default, the four childs of the root node are visible. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Depth &amp;lt; 1) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//get the closest point to the camera and check the distance &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; distanceCameraToPoint = &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt;.Distance(GetBoundingBoxClosestPointToPoint(boundingBox, cameraPosition), cameraPosition); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//compute the dot product between parent normal and child normal &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; dotprod = 1 - &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt;.Dot(childNormal, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.CenterVertex.Value.Normal); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//check with the threshold &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (distanceCameraToPoint / &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ParentTree.QuadTreeDetail) &amp;lt; (dotprod); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;}&lt;/span&gt; &lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;By default nodes at the top of the tree are made visible. We then determine the distance between the camera position and the nearest point of it in the BoundingBox encompassing child. The dot product is then calculated. We test the division of this distance by an adjustable threshold is below the dot product. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Note that this method of testing may well be adapted to submit the QuadTree to another technique optimization. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Progressive detail for the vertex &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Again, the testing method for vertices does not take into account the distance to the camera. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;We must determine if the distance between the actual position of the vertex and its position interpolated exceeds a threshold configurable. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Here is the testing method: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; VertexTest(&lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt; vertexPosition, &lt;span style="color:#2b91af;"&gt;Sides&lt;/span&gt; side, &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt; cameraPosition) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//get the distance between interpolated height position and real height position &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; lengthToTest = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;._realToInterpolatedVertexHeight[(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)side]; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//get the distance from the camera position to the vertex position &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; distanceCameraToPoint = &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt;.Distance(vertexPosition, cameraPosition); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//check with the threshold &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; lengthToTest * &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ParentTree.VertexDetail &amp;gt; distanceCameraToPoint; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The delta between the two vertices (interpolated and real) is stored in memory. We then determine the distance between the vertex and the camera. A test is then conducted to determine if the Delta exceeds the threshold distance to the camera. Like earlier this test method may well be adapted to submit the vertices of each node to another technique optimization. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article15.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article15small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;A field at different level of detail, from left to right: 7500, 3000, 1500, 300 150 vertices &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Improvements &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Our algorithm at this stage works perfectly: it displays the details where they are relevant, frees up resources and uses a quadtree. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Remember that time, the relevance of viewing a node is measured using the dot product of its normal with normal direct its parent. This is rather good, but we can improve. The following pictures illustrate a graphic unpleasant bug that modifies the appearance of ground within walking distance:&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article60.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article60.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;In front of us: a slight bump on the ground &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article61.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article61.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;The hump has been truncated &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Note that the bump on the first visible image is greatly reduced by the mere fact of having moved slightly camera. But our algorithm has worked here perfectly. We simply validated a threshold requiring a node to be cut. So we need to reduce the implementation of our algorithm close to the camera. We will therefore introduce a second threshold that will represent what we mean by &amp;quot;proximity&amp;quot;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The new test function is thus as follows: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; ChildTest(&lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt; childNormal, &lt;span style="color:#2b91af;"&gt;BoundingBox&lt;/span&gt; childBoundingBox, &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt; cameraPosition) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//by default, the four childs of the root node are visible. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Depth &amp;lt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ParentTree.MinimalDepth) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//get the closest point to the camera and check the distance &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; distanceCameraToPoint = &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt;.Distance(GetBoundingBoxClosestPointToPoint(childBoundingBox, cameraPosition), cameraPosition); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//compute the dot product between parent normal and child normal &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; dotprod = 1 - &lt;span style="color:#2b91af;"&gt;Vector3&lt;/span&gt;.Dot(childNormal, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.CenterVertex.Value.Normal); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#008000;"&gt;//check with the threshold &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; ((distanceCameraToPoint &lt;b style="mso-bidi-font-weight:normal;"&gt;- &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ParentTree.QuadTreeDetailAtFront &lt;/b&gt;) / &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ParentTree.QuadTreeDetailAtFar) &amp;lt; (dotprod); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We now have two thresholds, a threshold of visibility for &amp;ldquo;near displays&amp;rdquo; to maximize the details close to the camera and a threshold of &amp;ldquo;far display&amp;rdquo; that manages the details beyond the previous threshold according to a affine function as we did until now. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The advantage is undeniable. For proof, just take a look at the picture below: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article58.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article58small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;I went to the center of the terrain, I stopped the implementation of the algorithm (similar to a pause in the Update of the QuadTree) and take some the altitude. We notice that the details seem to diminish when away from the center. This is indeed the case: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article59.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article59small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;At the center of the screen near the crater, the details are at maximum. If we were on the ground, we do not see any ground near bump be changed by moving the camera. On the contrary, the far away details keeps the overall look of the land. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;It&amp;#39;s not all, we are now able to generate a climate and geographical well known: a mountain line (sorry I do not know the English term for &amp;ldquo;ligne bleue&amp;rdquo;). Look at this picture: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article62.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article62small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;It is the blue line Vosges clearly visible from the north of &amp;ldquo;Franche-Comte&amp;rdquo; in France. Plus on regarde. The more one looks far more mist arises in a bluish tint. By applying our algorithm and a modified fog we are able to generate a skyline purified up to cut a new notch resources taken by the displayed terrain. Return on our field, but this time by being near the ground:&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article56.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article56small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We&amp;#39;ve added a blue fog to simulate this. The remote mountains are visible thanks to the difference in color the fog gives them. Now the same view but with a threshold of visibility at distance greatly reduced: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="font-size:8pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article57.png"&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.Billod/article57small.png" style="vertical-align:middle;border:2px solid black;" alt="" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We get a display similar but with 1300 primitives less! &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Code and optimization &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The code given with this article is deliberately sketchy for the sake of understanding. Son but est de tester la technique Billod Its purpose is to test the Billod technique described here &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;with no optimization. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Description of the &amp;quot;business&amp;quot; classes &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Four classes are really business: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The terrain is naturally managed by a class called Terrain. We will return later on its possible usefulness. Terrain is a container for Quadtrees. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;It represents the whole ground. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The tree is represented by an instance of QuadTree class. QuadTree represents a part of Terrain. It is a container of QuadNodes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The nodes of the tree are created using the QuadNode class. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;It is a container of TerrainVertex. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;QuadNode represents a node. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Finally the 9 vertices of a node are TerrainVertex. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Most treatment is within the class QuadNode. This has two important methods: Initialize and Update.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;The Initialize method handles load the node with all information related to its position in the QuadTree. It makes visible its four edges, it determines the neighboring nodes (for sharing vertices). It also calculates the deltas, normals, BoundingBox. It is called once every creation of a node. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The Update method performs tests on the four vertices &amp;quot;sides&amp;quot; (North, East, South, West) and four children on the potential (North West, North East, South West, South East) to each update of the tree . &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;This is the class QuadTree which initializes the first node and start treatment on the tree. Every x seconds (adjustable) it launches an asynchronous update on all the nodes instantiated to update the tree depending on the position of the camera. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The instantiation of a QuadTree is achieved by specifying the size of it, its depth and its location: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;QuadTree&lt;/span&gt; &lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;tree = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;QuadTree&lt;/span&gt;(treeDepth, rootNodeSize, location); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The structure TerrainVertex contains the vertex to display. A vertex can be shared on multiple nodes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The code of this four major classes has been simplified in the extreme and widely commented. If there are still black spots do not hesitate to contact me. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Update Thread &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;A quick and easy (dirty ?) solution has been &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;implemented to update the field. A BackgroundWorker is launched when you start the application and handle the updating of the field asynchronously. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;This procedure avoids any slowdown of the game during the update. The data displays (VertexBuffer and IndexBuffer) are stored in a stack and used in the Render method. In the example provided with this article, we do an update that every 4 seconds. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Optimizations &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Apart from improvements to the code, here are some ideas to increase the quality of reporting and the power of technology Billodes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;We do two courses of the shaft each Update (one to update the tree, the other to extract the list to display triangles). There &amp;#39;may be a point to improve here. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The updated every X seconds is not necessarily the best solution. There are several other possible avenues to update, for example when the camera is moved or predicting the movement of the player and update accordingly. Finally, it should be noted that the final status of a tree is not achieved in a single Update It may be preferable in some cases to await the final version of the tree by calling the Update method as many times as necessary. You shlould prefer update the tree by little part each frame.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Some thresholds for activation or deactivation of a child or a vertex are very low. We can consider that they will never be activated. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;When a node is cut or merged, or when a vertex changes state (visible / hidden), the transition is visible.It may be useful to cut this transition more gradual steps to soften the visual changes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Relying on the Terrain class. In this sample we render only a single tree. The Terrain class field can be a serious springboard to try to manage several trees that will be linked one to another.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;We load the entire Heightfield from the start by analyzing a black and white. It is an effective way to proceed to achieve an example but not to make a &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;game. It might be wise to store the array of heights in a file and read what the QuadTree needs at each Update. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The source code has not been optimized for readability. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;The example program &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;This program is just one example of a rapid implementation of the land Billodes. The business classes are quickly adaptable to individual needs. The project is XNA 3.0. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Il est toutefois adaptable au 2.0. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;However, it is adaptable to 2.0. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Commands to interact with the world are: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Mouse: Click to turn the camera. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Arrow keys: moving the camera in the current direction. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Key W: Wireframe Mode On / Off. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Page Up / Page Down: Change the Far Threshold Test. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Key left Shift + Page Up / Page Down: Near Threshold Test. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Left Key Shift + arrow keys: fast move. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:Symbol;mso-ansi-language:EN-US;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font-size:small;"&gt;&amp;middot;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Left Key Alt + arrow keys: moving slow. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;To test the Billod algorithm, simply move on the ground and studying the evolution of the field. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Note that it is possible to modify some parameters affecting the display using the configuration file of the application. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;You can reuse the source code as you want. I just ask to refer me in your &amp;quot;credits&amp;quot;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;References / Credits &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The Web site of Stan Melax: &lt;/span&gt;&lt;a href="http://www.melax.com/"&gt;&lt;span style="font-size:small;color:#0000ff;"&gt;http://www.melax.com&lt;/span&gt; &lt;/a&gt;&lt;span style="font-size:small;"&gt;. A very pragmatic man at the root of a technical Progressive Mesh very smart on which I based my algorithm. I take this article to thank him for his kindness and his exchange at the time or I was working on progressive meshes in XNA. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;quot;Continuous LOD Terrain Meshing Using Adaptive Quadtrees&amp;quot; by Thatcher Ulrich. A method quite similar to mine but more research-oriented to deltas. This is one of the few methods available on the web that can be used for a game. My algorithm has a QuadTree quite similar to his &amp;quot;Adaptive QuadTree&amp;quot; but his management heightfield is much more intelligent than mine. His details management is, in my opinion less &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;good than mine. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;The page Hugues Hoppe: http://research.microsoft.com/ ~ hoppe. One of the masters of the terrain rendering. Everything is so great but illegible for novices and not necessarily adapted to the world of video gaming. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;Virtual Terrain Project: http://www.vterrain.org/ . Website with a great set of publications around the management of terrain. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;And on a more personal way Mathieu Laussel, a French friend 3D modeler (engineering) with whom I realize an editor of the world and who kindly wait as I write this article. And Boris Driss student that like game development and with who, talking is very interresting. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;font-family:Segoe UI;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="font-size:14pt;line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;Downloads&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-size:small;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;You can downalod the C# project &lt;a target="_blank" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.ContentPipeline/8037.BilLOD.zip"&gt;here&lt;/a&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1649604" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/valentin.ContentPipeline/8037.BilLOD.zip" length="2323902" type="application/x-compressed" /><category domain="http://msmvps.com/blogs/valentin/archive/tags/Mesh/default.aspx">Mesh</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Coding/default.aspx">Coding</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Optimization/default.aspx">Optimization</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/LOD/default.aspx">LOD</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Progressive/default.aspx">Progressive</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/MultiResolutionMesh/default.aspx">MultiResolutionMesh</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Terrain/default.aspx">Terrain</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/XNA/default.aspx">XNA</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Maths+3D/default.aspx">Maths 3D</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Special+Effects/default.aspx">Special Effects</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Livres+blancs/default.aspx">Livres blancs</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/BilLOD/default.aspx">BilLOD</category></item><item><title>Annexe : Progressive Mesh en Xna</title><link>http://msmvps.com/blogs/valentin/archive/2007/04/05/annexe-progressive-mesh-en-xna.aspx</link><pubDate>Thu, 05 Apr 2007 14:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:757384</guid><dc:creator>valentin</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=757384</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2007/04/05/annexe-progressive-mesh-en-xna.aspx#comments</comments><description>&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;&lt;img style="WIDTH:24px;HEIGHT:24px;" height="24" src="http://msmvps.com/photos/valentin/images/887626/original.aspx" width="24" align="absMiddle" border="1" alt="" /&gt;&lt;font face="Arial"&gt;Retourner au &lt;/font&gt;&lt;a class="" href="http://msmvps.com/blogs/valentin/archive/2007/03/30/tutoriaux-xna-sommaire-g-n-ral.aspx"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Arial"&gt;sommaire des cours&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;Avant toutes choses je tiens&amp;nbsp;à remercier Stan Melax qui m&amp;#39;a gentiment aidé à passer son algorithme en DirectX et Xna et m&amp;#39;a laissé la possibilité d&amp;#39;utiliser pour ce cours&amp;nbsp;quelque&amp;nbsp;schémas qu&amp;#39;il avait réalisé.&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;L&amp;#39;utilisation de MRM est une véritable merveille pour accroître de manière significative les performances de ses applications. Le principe est simple&amp;nbsp;: transformer un model 3D détaillé et formé de très nombreux polygones en une version allégée utilisant moins de faces mais aillant un aspect aussi similaire que possible.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;Cette technique est la plupart du temps couplée avec la camera pour réduire proportionnellement la qualité du modèle 3D en fonction de la distance à laquelle il se trouve de la camera.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;Au final, nous pouvons ainsi grappiller des FPS et libérer le GPU en lui évitant d’afficher des modèles détaillés au loin, là ou une version grandement allégée donne le même résultat à l’écran. &lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;L&amp;#39;image suivante explicite cela :&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;&lt;img title="La porche a 25% donne le même affichage a grande distance que le modèle a 100%." style="WIDTH:650px;HEIGHT:172px;" height="172" alt="La porche a 25% donne le même affichage a grande distance que le modèle a 100%." src="http://msmvps.com/photos/valentin/images/458037/original.aspx" width="650" align="absMiddle" border="2" /&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;On y voir l&amp;#39;affichage d&amp;#39;une voiture sous différentes résolutions (le poucentage indiqué au dessus de chaque modèle correspond au nombre de vertices utilisé par rapport à l&amp;#39;original). Le modèle à 10% reste tout à fait acceptable et similaire à l&amp;#39;original. Il est donc tout à fait imaginable de l&amp;#39;utiliser à grande distance à la place d&amp;#39;un modèle plus &amp;quot;complet&amp;quot; et plus lourd à manipuler.&lt;/em&gt;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;em&gt;&lt;font face="verdana,geneva"&gt;Les MRM&amp;nbsp; (multi resolution mesh) occupent une place prépondérante dans les moteurs 3D : Utilisés pricipalement pour libérer du traitement GPU sur l’affichage des objets lointains&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;il est aussi employé&lt;/span&gt; dans l&amp;#39;occlusion culling (l&amp;#39;occlusion consiste à supprimer de l&amp;#39;affichage les objets qui sont cachés par d&amp;#39;autres objets nous y reviendrons dans un autre post).&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;/em&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/font&gt;&lt;em&gt;&lt;font face="Verdana"&gt;Nous allons donc dans ce cours chercher un moyen pour&amp;nbsp;créer&amp;nbsp;et utiliser des MRM dans nos applications. Ce moyen, c&amp;#39;est bien evidemment un algorithme qui va etre en mesure de calculer la réduction du nombre de vertices dans une forme 3D en sauvegardant au maximum son aspect général lors de cette transformation.&lt;/font&gt;&amp;nbsp;&lt;/em&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="4"&gt;L&amp;#39;algorithme&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="3"&gt;&lt;strong&gt;Une complexité qui rebute&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Si on se tourne vers les moteurs de recherche sur le net (live.com, google.fr) à l&amp;#39;aide des mots clés &amp;quot;&lt;i style="mso-bidi-font-style:normal;"&gt;MRM algorithme&lt;/i&gt;&amp;quot; on trouve un grand nombre&amp;nbsp;de travaux de chercheurs et de passionnés sur ce sujet. Pourtant la plupart des algorithmes qu&amp;#39;on y trouve sont inexploitables : soit ils sont trop gourmants en calculs et donc inexploitable en temps réel, soit le resultat change l&amp;#39;aspect de la forme 3D ou bien encore la complexité est telle qu&amp;#39;il est tout bonnement incompréhensible.&amp;nbsp;Quelques pasionnés ont toutefois trouvé un moyen de réaliser des réductions de résolutions relativement simplement. Nous retiendrons ainsi&amp;nbsp;la méthode&amp;nbsp;utilisé par Stan Melax parce qu&amp;#39;à priori la meilleure et, cerise sur le gâteau, l&amp;#39;une des plus simples. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana" size="3"&gt;&lt;strong&gt;Réduction par Fusion de Meshs&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Melax se base lui-même sur les travaux de H.Hoppes, un développer de MSR (Microsoft Research) dont est issue vraisemblablement l&amp;#39;algorithme se trouvant derrière la classe ProgressiveMesh de Direct3D. Cet algorithme vise a réduire la complexité d&amp;#39;un model 3D par l&amp;#39;intermédiaire de fusions de vertices. Le principe est trivial : à chaque réduction de résolution on fusionne deux vertices (que nous nommerons ici u et v).S&amp;#39;ensuit :&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;La suppression des triangles qui possèdent à la fois les vertices &lt;i style="mso-bidi-font-style:normal;"&gt;u&lt;/i&gt; et &lt;i style="mso-bidi-font-style:normal;"&gt;v&lt;/i&gt;.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;La mise à jour des triangles qui utilisaient &lt;i style="mso-bidi-font-style:normal;"&gt;u&lt;/i&gt; sur l&amp;#39;un de leurs trois points afin qu&amp;#39;ils utilisent &lt;i style="mso-bidi-font-style:normal;"&gt;v&lt;/i&gt; à la place.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;La suppression du vertex &lt;i style="mso-bidi-font-style:normal;"&gt;u&lt;/i&gt;.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&lt;img title="A chaque réduction de complexité, deux vertices u et v sont sélectionnés et l&amp;#39;un deux est &amp;quot;fusionné&amp;quot; avec l&amp;#39;autre (ici respectivement u et v). " style="WIDTH:476px;HEIGHT:766px;" height="766" alt="A chaque réduction de complexité, deux vertices u et v sont sélectionnés et l&amp;#39;un deux est &amp;quot;fusionné&amp;quot; avec l&amp;#39;autre (ici respectivement u et v). " src="http://msmvps.com/photos/valentin/images/458021/original.aspx" width="476" /&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;Le schéma ci-dessus explicite tout cela. La figure A montre l&amp;#39;état du modèle avant la baisse de résolution. La figure B montre le même modèle après la&amp;nbsp;fusion de deux de ces vertices. Le modèle garde son aspect mais en utilisant un vertex et deux faces en moins.&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Ce processus est répété jusqu&amp;#39;à atteindre le nombre de vertices ou de faces voulu.&lt;/font&gt;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="3"&gt;Choix de u et v&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Cette méthode est relativement simple sur le papier et réduit effectivement sans grandes difficultés un model 3D. Il ne faut pourtant pas crier victoire trop vite : comme dit précédemment, il est primodial que le model &amp;quot;réduit&amp;quot; garde une apparence similaire au model complexe originel. Il convient donc de choisir avec intelligence les sommets u et v à fusionner afin de provoquer la plus fine modification visuelle à l&amp;#39;écran. L&amp;#39;image suivante illustre celà :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;img title="Le choix du vertex est important !" style="WIDTH:673px;HEIGHT:510px;" height="510" alt="Le choix du vertex est important !" src="http://msmvps.com/photos/valentin/images/464808/original.aspx" width="673" align="middle" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="1"&gt;&lt;em&gt;Le choix du sommet à supprimer est important pour garder une apparence aussi similaire que possible à l&amp;#39;original (image extraite de l&amp;#39;article de Stan Melax avec l&amp;#39;aimable autorisation de l&amp;#39;auteur)&lt;/em&gt;&lt;/font&gt;&lt;font size="1"&gt;.&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;C&amp;#39;est là ou le bat blesse : la plupart des algorithmes propose pour ce choix des calculs lourds et inutilisables en temps réel. Sur ce point, Stan Melax a montré son savoir faire. Il part d&amp;#39;un principe élémentaire : les surfaces coplanaires ne demandent pas autant de vertices pour être rendue à l&amp;#39;écran que les surfaces avec un relief prononcé (comme les courbes). Il est plus facile de réduire la complexité des premières, que celle des secondes. Le coût pour la disparition d&amp;#39;un sommet pourrait se traduire ainsi : c&amp;#39;est le résultat de la multiplication de la taille du sommet par l&amp;#39;importance dans la courbe sur laquelle il se trouve. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Pour la fusion uv, visant à déplacer &lt;em&gt;u&lt;/em&gt; vers &lt;em&gt;v&lt;/em&gt; nous avons l&amp;#39;algorithme :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Calculer la taille du sommet (distance &lt;em&gt;u&lt;/em&gt; à &lt;em&gt;v&lt;/em&gt;).&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Déterminer l&amp;#39;ensemble des triangles qui possède à la fois &lt;em&gt;u&lt;/em&gt; et &lt;em&gt;v&lt;/em&gt;.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Pour chacun des triangles connectés à u :&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Calculer le produit orthonormé de la normal du triangle courant avec chacun des triangles qui possèdent à la fois &lt;em&gt;u&lt;/em&gt; et &lt;em&gt;v&lt;/em&gt;. En extraire le plus petit produit.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Calculer le plus gros des plus petits produits : C&amp;#39;est la coùt de la fusion.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;La formule mathématique pour calculer ce cout est la suivante est la suivante :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="1"&gt;&lt;img title="where Tu is the set of triangles that contain u and Tuv is the set of triangles that contain both u and v." style="WIDTH:670px;HEIGHT:90px;" height="90" alt="where Tu is the set of triangles that contain u and Tuv is the set of triangles that contain both u and v." src="http://msmvps.com/photos/valentin/images/464803/original.aspx" width="670" align="middle" /&gt;&lt;br /&gt;&lt;/font&gt;&lt;i&gt;&lt;font size="1"&gt;où Tu &lt;/i&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="1"&gt;est l&amp;#39;ensemble des triangles qui possèdent &lt;/font&gt;&lt;i&gt;&lt;font size="1"&gt;u &lt;/i&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="1"&gt;and &lt;/font&gt;&lt;i&gt;&lt;font size="1"&gt;Tuv &lt;/i&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="1"&gt;l&amp;#39;ensemble des triangles&amp;nbsp;qui contiennent à la fois&amp;nbsp;&lt;/font&gt;&lt;i&gt;&lt;font size="1"&gt;u et&lt;/i&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&lt;font size="1"&gt; &lt;/font&gt;&lt;i&gt;&lt;font size="1"&gt;v &lt;/i&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="1"&gt;&lt;font face="verdana,geneva"&gt;&lt;em&gt;(image extraite de l&amp;#39;article de Stan Melax avec l&amp;#39;aimable autorisation de l&amp;#39;auteur)&lt;/em&gt;&lt;font size="1"&gt;.&lt;/font&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Le principe peut se résumer ainsi : on parcourt tous les triangles connectés à &lt;em&gt;u&lt;/em&gt;. Il est nécessaire,&amp;nbsp;pour chacun de ces triangles, d&amp;#39;analyser le cout de la fusion avec&amp;nbsp;&lt;em&gt;v&lt;/em&gt;. On calcul celà&amp;nbsp;en analysant l&amp;#39;impacte de&amp;nbsp;la transformation des triangles afin de déterminer l&amp;#39;ampleur de la modification. Il y&amp;#39;a deux types de modifications : Soit les triangles sont connectés uniquement à u, et, dans ce cas ils sont modifiés pour être reliés à v, soit les triangles sont liés à u et v à la fois et doivent etre supprimés du modèle. La figure A et B au début de cette annexe illustre celà parfaitement.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;strong&gt;&lt;font face="verdana,geneva" size="4"&gt;Passons aux choses sérieuses&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Pour l&amp;#39;heure la classe &lt;font face="Courier New" color="#008080"&gt;ProgressiveMesh&lt;/font&gt; que vous pouvez reprendre est industrialisable mais est encore améliorable : &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Il reste à&amp;nbsp;associer un poid à chaque vertex pour la transformation. &lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;A réaliser un tris sur la&amp;nbsp;liste de vertices pour classer par ordre de coût de transformation.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;A réaliser des méthodes d&amp;#39;optimisation&amp;nbsp;comme dans la classe Mesh de Direct3DX&amp;nbsp;(fusionner les vertices qui sont assez proches pour ne faire qu&amp;#39;un).&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;Passons maintenant au code.&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Celui-ci se trouve à l&amp;#39;intérieur d&amp;#39;une DLL nommée ArcaneEngine.Objects.&amp;nbsp;Deux types de données&amp;nbsp;nous interesse&amp;nbsp;:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font face="Courier New" color="#008080"&gt;ProgressiveMesh&amp;lt;T&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Resolution&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;La création d&amp;#39;un mesh progressif et son affichage se fait en trois étapes.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Tout d&amp;#39;abord la création de l&amp;#39;objet (étape pouvant être asynchrone) en passant au constructeur la liste des vertices qui composent le mesh, la liste des indices pour relier les vertices et enfin les poids associés aux vertices (un tableau de booléens pour l&amp;#39;heure)&amp;nbsp;:&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font face="courier new,courier"&gt;&lt;font color="#008080" size="2"&gt;ProgressiveMesh&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:FR;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;VertexPositionNormalTexture&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; mesh = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;ProgressiveMesh&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:FR;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;VertexPositionNormalTexture&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;(vertices, ints, null);&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Puis le chargement des buffers 3D lorsque le device a été créé&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;mesh.Load(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="courier new,courier"&gt;&lt;font color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;font size="2"&gt;._device);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Enfin l&amp;#39;affichage du mesh&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font face="courier new,courier" color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="courier new,courier"&gt;.mesh.Render();&lt;/font&gt; &lt;/p&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;La gestion des MRM est beaucoup plus simple qu&amp;#39;avec la classe de Direct3DX. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Revenons sur la généricité de la classe. Le développeur doit indiquer un argument de spécificité a la classe générique &lt;font face="Courier New" color="#008080"&gt;ProgressiveMesh&lt;/font&gt; (ici &lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:FR;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;VertexPositionNormalTexture&lt;/span&gt;). Il s&amp;#39;agit en fait de la classe utilisée pour le type de vertices.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;A partir de cet argument, la classe pourra extraire les positions de chaque vertices et, avec les indices, calculer les différentes résolutions. Elle pourra en outre extraire le format des vertices pour l&amp;#39;affichage, elle pourra aussi renvoyer à l&amp;#39;utilisateur pour chaque resolution les buffers et array de vertices actuellement affichés.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Pour changer la résolution deux choix. Soit vous utilisez la propriété &lt;em&gt;NumberOfVertices&lt;/em&gt; pour indiquer directement le nombre de vertices a afficher. Soit vous utilisez la property &lt;em&gt;Resolution&lt;/em&gt; en donnant un membre de l&amp;#39;énumération :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:EN-GB;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;enum&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Resolution&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;No resolution : no mesh rendered.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;None = 0,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;No resolution : no mesh rendered.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Dynamic = -1,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Ten percents of the mesh&amp;#39;s vertices used to render it.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Lowest = 10,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Twenty five percents of the mesh&amp;#39;s vertices used to render it.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Low = 25,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Fivety percents of the mesh&amp;#39;s vertices used to render it.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Medium = 50,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Seventy five percents of the mesh&amp;#39;s vertices used to render it.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;High = 75,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;One hundred percents of the mesh&amp;#39;s vertices used to render it.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Full vertices are used.&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Full = 100&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Le changement de la résolutiond&amp;#39;un mesh demande un leger temps de calcul à priori invisible à l&amp;#39;écran.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Nous n&amp;#39;analyserons pas ici le code qui reste assez simple. A l&amp;#39;intérieur de la classe &lt;font face="Courier New" color="#008080"&gt;ProgressiveMesh&lt;/font&gt;&amp;nbsp;se trouve la region &amp;quot;&lt;font size="2"&gt;Multi resolution computing&lt;/font&gt;&amp;quot;&amp;nbsp; qui contient les méthodes liées au calcul de la resolution. La méthode&amp;nbsp;&lt;font size="2"&gt;ComputeEdgeCostAtVertex détermine le cout de la fusion d&amp;#39;un vertex, la méthode &lt;font size="2"&gt;Collapse réalise cette fusion et &lt;font size="2"&gt;MinimumCostEdge permet de trouver le vertex ayant le coût le plus bas pour une fusion. A noter que la classe &lt;font face="Courier New" color="#008080"&gt;ProgressiveMesh&lt;/font&gt;&amp;nbsp;possède deux types internes : Vertex et Triangle qui permettent d&amp;#39;opérer sur les vertices et les faces plus facilement.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font face="verdana,geneva"&gt;Une analyse du code par vos propres moyens devrait eclaircir tous les points encore obscurs à vos yeux.&amp;nbsp; N&amp;#39;hesitez pas a poster des commentaires pour toutes questions.&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;A l&amp;#39;intérieur de la classe &lt;font face="Courier New" color="#008080"&gt;Game1&lt;/font&gt; se trouve le code qui montre comment utiliser notre classe &lt;font color="#008080"&gt;&lt;font face="Courier New"&gt;ProgressiveMesh&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;. L&amp;#39;application principale contient en outre un ensemble de classes statiques &lt;font face="verdana,geneva"&gt;qui contiennent des ensembles de vertices et d&amp;#39;indices permettant de charger un MRM. Elles héritent toutes de l&amp;#39;interface IData qui permet une utilisation générique de ces dernières.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva" size="4"&gt;&lt;strong&gt;Les liens&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;font face="verdana,geneva"&gt;Evidemment en&lt;/font&gt; première place le site de Stan Melax&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;a href="http://www.melax.com/polychop/"&gt;&lt;font face="verdana,geneva"&gt;http://www.melax.com/polychop/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Ensuite le site de Hugues Hoppes&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;a href="http://research.microsoft.com/~hoppe/"&gt;&lt;font face="verdana,geneva"&gt;http://research.microsoft.com/~hoppe/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;(déprimant parcequ&amp;#39;on voit qu&amp;#39;il fait des trucs super, mais on comprend rien)&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="4"&gt;&lt;strong&gt;Sample&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;
&lt;p&gt;&lt;img title="telecharger" style="WIDTH:24px;HEIGHT:24px;" height="24" alt="telecharger" src="http://www.adcworks.com/images/content/icon-download.gif" width="24" align="middle" /&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Verdana"&gt;&amp;nbsp;Vous pouvez télécharger les trois&amp;nbsp;samples &lt;/font&gt;&lt;a class="" href="http://msmvps.com/files/folders/valentin/entry757367.aspx" target="_blank"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Verdana" color="#006ff7"&gt;ici&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" color="#000000"&gt;.&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;strong&gt;&lt;font face="verdana,geneva" size="4"&gt;Conclusion&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;L&amp;#39;application au final se présente ainsi :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;img style="WIDTH:604px;HEIGHT:474px;" height="474" src="http://msmvps.com/photos/valentin/images/757272/original.aspx" width="604" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;L&amp;#39;interface graphique est rudimentaire mais nous l&amp;#39;améliorerons avec l&amp;#39;arrivée de l&amp;#39;annexe portant sur l&amp;#39;UI. Les touches Page Haut et Page Bas permettent de passer d&amp;#39;une résolution à une autre. Les touches + et - permettent de modifier la resolution plus finnement en changeant le nombre de vertices affichés. La souris permet de déplacer la camera autour du mesh affiché. Enfin la touche espace permet de changer de modèle. L&amp;#39;application affiche&amp;nbsp;6 modèles :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Beethoven&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Fourmi&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Un terrain&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Porsche&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Vache&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Lapin&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;A noter que le modèle terrain sert à voir l&amp;#39;utilité du tableau de poids passé au constructeur. Sans ce poid, la portion de terrain &amp;quot;s&amp;#39;arrondit&amp;quot; au fil de la réduction de résolution en perdant ainsi tout son aspect. Notez de même que le modèle fourmi montre les limites de notre système sur les formes 3D disposant de peu de vertices ...&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;A bientôt sur ce Blog !&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;Valentin Billotte&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;N&amp;#39;hesitez surtout pas à me faire part de vos incomprehensions afin de pemettre d&amp;#39;améliorer ce cours pour le rendre plus accessible aux autres (trèèèès important)!&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;img title="telecharger" style="WIDTH:24px;HEIGHT:24px;" height="24" alt="telecharger" src="http://www.adcworks.com/images/content/icon-download.gif" width="24" align="middle" /&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Verdana"&gt;&amp;nbsp;Vous pouvez télécharger les trois&amp;nbsp;samples &lt;/font&gt;&lt;a class="" href="http://msmvps.com/files/folders/valentin/entry757367.aspx" target="_blank"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Verdana" color="#006ff7"&gt;ici&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" color="#000000"&gt;.&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;img style="WIDTH:24px;HEIGHT:24px;" height="24" src="http://msmvps.com/photos/valentin/images/887626/original.aspx" width="24" align="absMiddle" border="1" alt="" /&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;Retourner au &lt;/font&gt;&lt;a class="" href="http://msmvps.com/blogs/valentin/archive/2007/03/30/tutoriaux-xna-sommaire-g-n-ral.aspx"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;sommaire des cours&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=757384" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Mesh/default.aspx">Mesh</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Coding/default.aspx">Coding</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Optimization/default.aspx">Optimization</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/LOD/default.aspx">LOD</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Progressive/default.aspx">Progressive</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/MultiResolutionMesh/default.aspx">MultiResolutionMesh</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Resolution/default.aspx">Resolution</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/XNA/default.aspx">XNA</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Maths+3D/default.aspx">Maths 3D</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Special+Effects/default.aspx">Special Effects</category></item><item><title>XNA Tutorial 8 : Les textures</title><link>http://msmvps.com/blogs/valentin/archive/2007/02/12/xna-tutorial-8-les-textures.aspx</link><pubDate>Mon, 12 Feb 2007 08:52:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:570799</guid><dc:creator>valentin</dc:creator><slash:comments>42</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=570799</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2007/02/12/xna-tutorial-8-les-textures.aspx#comments</comments><description>&lt;font face="verdana,geneva"&gt;&lt;strike&gt;&lt;em&gt;
&lt;p&gt;&amp;lt; en construction / under construction&amp;gt;&lt;/em&gt;&lt;/strike&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;img style="WIDTH:24px;HEIGHT:24px;" height="24" src="http://msmvps.com/photos/valentin/images/887626/original.aspx" width="24" align="absMiddle" border="1" alt="" /&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Arial"&gt;Retourner au &lt;/font&gt;&lt;a class="" href="http://msmvps.com/blogs/valentin/archive/2007/03/30/tutoriaux-xna-sommaire-g-n-ral.aspx"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;" face="Arial"&gt;sommaire des cours&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt;&amp;nbsp;&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Notre premier chapitre consacré aux textures : un vaste, un très vaste sujet et au combien important dans le développement 3D. Le texturing est sans aucun doute l&amp;#39;élément le plus important pour donner du réalisme et de l&amp;#39;interet à un projet 3D. Nul doute qu&amp;#39;après cet apprentissage, nos petites productions n&amp;#39;auront plus rien à voir avec ce que nous faisions jusque là !&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Nous suivrons trois phases dans cet apprentissage : &lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="verdana,geneva"&gt;Faire connaissance avec le texturing en apprennant les notions de base.&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="verdana,geneva"&gt;Faire connaissance avec le blending de filtrage, de mipmapping, de blending et de multitexturing.&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="verdana,geneva"&gt;Opérer sur les textures.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="4"&gt;Texture&amp;nbsp;?&lt;/font&gt;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="Textecourant1er" style="MARGIN:0cm 0cm 1pt;"&gt;&lt;font face="verdana,geneva"&gt;Aucun rapport avec la définition du dictionnaire. La texture est une image qui est plaquée sur un triangle. Il s’agit donc d’un objet à deux dimensions. Nous pourrions la comparer à une surface collée sur un objet 3D pour lui donner un habillage réaliste. XNA comme DirectX autorise toute sorte de taille de texture. En interne il les découpera en images carrés dont le nombre de pixels est une puissance de 2 (16,32,256, …). Dans tous les cas il faut toujours se rappeler que pour&amp;nbsp;la majorité des matériels installés sur les machines,&amp;nbsp;les textures les plus rapides à manipuler font une taille de 256 par 256 et plus la taille de la texture est importante, plus il faudra de temps GPU&amp;nbsp;pour les manipuler.&lt;/font&gt;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="Textecourant1er" style="MARGIN:0cm 0cm 1pt;"&gt;&lt;font face="verdana,geneva"&gt;Si les données affichées à l’écran sont nommées pixels, les données d’une texture sont nommée texels (pour &amp;quot;texture element&amp;quot;). &lt;/font&gt;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="Textecourant1er" style="MARGIN:0cm 0cm 1pt;"&gt;&lt;font face="verdana,geneva"&gt;DirectX dans le chargement s’avère très polyvalent et peut lire un grand nombre de type de fichiers images, à savoir PNG, JPG, BMP et TGA.&lt;/font&gt;&lt;/p&gt;
&lt;p class="Textecourant1er" style="MARGIN:0cm 0cm 1pt;"&gt;&lt;font face="verdana,geneva"&gt;Dans tous les cas le format d’image n’influence rien pour les performances de jeu. Chaque image étant traduite dans un format interne à Direct3D lors de son chargement. Notons enfin que les textures peuvent être générée à la volée à partir d’un accès mémoire.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="3"&gt;&lt;strong&gt;Coordonnées de texture&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Voilà une notion qui peut étonner au premier abord : Une coordonnée de texture permet de spécifier une position dans la texture. Dans la mesure où, dans une texture, l’espace est en 2D, seules deux valeurs sont nécessaire pour spécifier une position : U et V. U représente l’abscisse, à savoir le nombre d’unités à parcourir horizontalement et V qui représente le nombre d’unités verticales (ordonnées) à parcourir. Leurs valeurs oscillent entre 0 et 1 (des valeurs supérieure peuvent être données pour répéter une texture, nous verrons cela plus tard). Le point supérieur gauche de la texture est donc le (0,0) et le point inférieur droit (1,1) pour (U, V). Le schéma ci-dessous explicite tout cela avec la texture que nous allons employer dans notre premier exemple.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:650px;HEIGHT:520px;" height="520" src="http://msmvps.com/photos/valentin/images/571451/original.aspx" width="650" align="absMiddle" border="2" alt="" /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Verdana" size="1"&gt;&lt;u&gt;Les coordonnées de textures.&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;font size="3"&gt;&lt;strong&gt;Placage de textures&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Les coordonnées de textures sont donc une notion simple qui s’apparente aux bases mathématiques de la géométrie dans l’espace mathématique. Toutes les coordonnées (UV) pour le placage sur une forme 3D seront associées à chaque vertex qui la compose.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Pour plus de simplicité nous allons mettre de coté le cube qui servait à tous nos exemples depuis plusieurs cours pour revenir au carré utilisé dans le tutoriel 3. &lt;/font&gt;&lt;font face="Verdana"&gt;Dans ce programme un carré est formé de 4 vertices associés à une couleur et une position X, Y, Z comme ci-dessous.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="Un programme simple déjà vu qui affiche un carré." style="WIDTH:650px;HEIGHT:520px;" height="520" alt="Un programme simple déjà vu qui affiche un carré." src="http://msmvps.com/photos/valentin/images/571474/original.aspx" width="650" align="absMiddle" border="2" /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Verdana" size="1"&gt;&lt;u&gt;Un programme simple déjà vu qui affiche un carré.&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Associons maintenant un troisième type de valeur : les coordonnées de texture nommée ici tu et tv. Nous allons afficher sur ce carré notre texture en entier. Le point haut gauche aura donc la coordonnée de texture (0,0), le point haut droit (1,0) le point bas gauche (0,1) et enfin le point bas droite (1,1). Simple donc. Nous aurons :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="La texture entière occupe la surface du carré." alt="La texture entière occupe la surface du carré." src="http://msmvps.com/photos/valentin/images/571475/original.aspx" align="absMiddle" border="2" /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;La texture entière occupe la surface du carré.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Essayons maintenant de n’afficher que la moitié haut droite de la texture, à savoir la partie :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:32px;HEIGHT:32px;" height="32" src="http://msmvps.com/photos/valentin/images/571476/original.aspx" width="32" align="absMiddle" border="2" alt="" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Nous aurons donc pour caractéristiques des 4 vertices :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:650px;HEIGHT:520px;" height="520" src="http://msmvps.com/photos/valentin/images/571537/original.aspx" width="650" align="middle" border="2" alt="" /&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;Essayons pour continuer de n’afficher que la moitié basse de la texture :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:64px;HEIGHT:32px;" height="32" src="http://msmvps.com/photos/valentin/images/571538/original.aspx" width="64" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Les caractéristiques seront :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:650px;HEIGHT:520px;" height="520" src="http://msmvps.com/photos/valentin/images/571539/original.aspx" width="650" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Autre exemple, affichons le centre du carré à savoir :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:41px;HEIGHT:32px;" height="32" src="http://msmvps.com/photos/valentin/images/571573/original.aspx" width="41" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;nous aurons :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:650px;HEIGHT:520px;" height="520" src="http://msmvps.com/photos/valentin/images/571572/original.aspx" width="650" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Finissons sur une tâche plus compliquée (rassurez vous seulement d’un chouïa).&amp;nbsp; Nous n&amp;#39;allons pas prendre une portion de la texture de manière a avoir des coordonnées &amp;quot;ronde&amp;quot; (à savoir 0.5 ou 1) mais une portion complétement aléatoire. Il va donc nous falloir calculer la valeur exacte de la texture, prendre le pourcentage et reporter la valeur entre 0 et 1.&amp;nbsp;Mettons au hasard le point haut gauche de la source au texel (12,16). Pour une texture de (64,64),&amp;nbsp;converti en pourcentage nous avons : 18.75% en abscisse (12/64*100) et 25% en ordonnée soit donc en coordonnées de texture 0.1875 pour tu et 0.25 pour tv. Faisons de même pour les 3 autres coins. Au final nous avons :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:650px;HEIGHT:520px;" height="520" src="http://msmvps.com/photos/valentin/images/571572/original.aspx" width="650" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Terminons enfin sur la répétition de textures. Jusqu’à présent les valeurs de tu et tv étaient comprises entre 0 et 1. Que ce passe t’il si ces valeurs dépassent 1 ? XNA, lors du mappage va répéter la texture suivant le pourcentage donné par les coordonnées ;&amp;nbsp; Si tu vaut 1.5 la texture sera copiée entièrement avec la moitié d’une texture sur l’abscisse. Si tv vaut 3, alors sur l’ordonnée nous aurons trois textures copiées. Le dernier schéma de ce point illustre cela très bien :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:650px;HEIGHT:520px;" height="520" src="http://msmvps.com/photos/valentin/images/571580/original.aspx" width="650" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Notons aussi que les valeurs négatives données à tu et tv inverseront le mappage de la texture. XNA permet d’autres interprétations dans le cas ou tu et tv dépassent la valeur 1 (nous verrons cela plus loin dans ce chapitre).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Passons maintenant aux choses concrètes.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="4"&gt;&lt;strong&gt;Textures et XNA&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;font size="3"&gt;&lt;strong&gt;Préparer notre projet&amp;nbsp;à l&amp;#39;utilisation de textures...&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Jusqu&amp;#39;à présent, la seule manière que nous avions pour ajouter des couleurs à un scène 3D étant de créer autant de vertices que de couleurs associées. Nous allons utiliser maintenant un moyen bien plus puissant et efficace en associant chaque vertices à une coordonnée de texture comme vu dans le point précédent. Nous reprendrons un projet relativement similaire à celui utilisé pour le chapitre 4 consacré aux matrices. Revenez quelques instants sur le code qu&amp;#39;il contient avant de continuer plus en avant. Notre but sur ce cours est d&amp;#39;afficher un carré à l&amp;#39;écran et,&amp;nbsp;en utilisant un format de vertice adapté, y plaquer une texture. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;La première étape consiste à définir 6 vertices pour les deux triangles formant le carré. Sachant que nous n&amp;#39;utilisons plus de couleur nous ne pouvons plus utiliser le type &lt;span style="COLOR:teal;"&gt;VertexPositionColor&lt;/span&gt;. Nous utiliserons à la place un nouveau type de vertex : &lt;span style="COLOR:teal;"&gt;VertexPositionTexture&lt;/span&gt;. *&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Remarque : Nous avons déjà abordé les structure de format de vertices comme &lt;span style="COLOR:teal;"&gt;VertexPositionTexture&lt;/span&gt;&amp;nbsp;ou comme &lt;span style="COLOR:teal;"&gt;VertexPositionColor&lt;/span&gt;. Ces formats permettent d&amp;#39;associer à un vertex différentes informations (comme la position, la couleur, les coordonnées de &amp;nbsp;texture ...). Vous vous demandez&amp;nbsp;peut être comment XNA peut il savoir quel type de données (couleur, texture, ...) est associé aux vertices qu&amp;#39;on lui donne&amp;nbsp;? Il utilise tout simple le contenu de la propriété que chaque structure de format doit posséder. Pour plus d&amp;#39;information à ce sujet et pour créer vos propres formats rendez vous ici.&lt;/font&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Changez la déclaration du tableau de vertices ainsi :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;VertexPositionTexture&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;[] vertices;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Vient maintenant la création de chacun des vertices :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;VertexPositionTexture&lt;/span&gt;&lt;img src="http://msmvps.com/emoticons/emotion-14.gif" alt="Devil" /&gt;;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;//triangle 1, face devant&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[0].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-10f, 0f, -10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[0].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(0f, 0f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[1].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-10f, 0f, 10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[1].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(0f, 1f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[2].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(10f, 0f, 10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[2].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(1f, 1f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;//triangle 2, face devant&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[3].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-10f, 0f, -10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[3].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(0f, 0f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[4].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(10f, 0f, 10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[4].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(1f, 1f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[5].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(10f, 0f, -10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[5].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(1f, 0f);&lt;/span&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;On remarque ici une première différence avec nos programmes précédents : plus de couleur mais une coordonnée de texture associée&amp;nbsp;à chaque vertex. Le vertex 0 se trouve en haut à gauche du carré. La coordonnée (U,V) associée est donc (0, 0). On ancrera donc la partie supérieure gauche de la texture sur ce vertex. Le second vertex&amp;nbsp;se trouve en haut à droite sa coordonnée est donc&amp;nbsp; (0, 0). La partie supérieure droite va être ancrée sur lui. Ainsi de suite pour les 4 autres vertices. C&amp;#39;est exactement ce que nous avons vu au tout début de ce chapitre.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Nous devons aussi spécifier à notre effet que nous ne manipulons plus des vertices colorés, mais texturés. Pour cela modifiez la ligne :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.effect.CurrentTechnique = effect.Techniques[&lt;span style="COLOR:maroon;"&gt;&amp;quot;Colored&amp;quot;&lt;/span&gt;];&lt;/span&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;en&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.effect.CurrentTechnique = effect.Techniques[&lt;span style="COLOR:maroon;"&gt;&amp;quot;Textured&amp;quot;&lt;/span&gt;];&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Il a été vu précédemment que le device où est affiché notre jeu (la carte graphique principale donc) a besoin de connaître le type de vertices utilisé (c&amp;#39;est à dire leur format). Il est donc nécessaire dans la méthode de dessin de modifier la ligne :&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;.graphics.GraphicsDevice.VertexDeclaration = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexDeclaration&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.graphics.GraphicsDevice, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColor&lt;/span&gt;&lt;font color="#000000"&gt;.VertexElements);&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;en&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.graphics.GraphicsDevice.VertexDeclaration = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;VertexDeclaration&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.graphics.GraphicsDevice, &lt;span style="COLOR:teal;"&gt;VertexPositionTexture&lt;/span&gt;.VertexElements);&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;A ce stade, l&amp;#39;application, à l&amp;#39;exécution affiche un magnifique carré ... noir ! Tout est normal : nous n&amp;#39;avons pas encore utilisé de texture et nous n&amp;#39;utilisons plus de couleur.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="3"&gt;&lt;strong&gt;Ajout de textures au projet...&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Nous utiliserons la texture prise en exemple précédemment :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="Notre texture" style="WIDTH:64px;HEIGHT:64px;" height="64" alt="Notre texture" src="http://msmvps.com/photos/valentin/images/574354/original.aspx" width="64" align="absMiddle" border="2" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Celle-ci, nommée &lt;em&gt;&amp;quot;texture.jpg&amp;quot;&lt;/em&gt;&amp;nbsp;se trouve à la racine du répertoire HuitiemeChapitre. Ajoutez là en cliquant droit sur le nom du projet et en selectionnant &amp;quot;ajouter un élément existant&amp;quot; : &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="Cliquez droit sur le projet et selectionnez &amp;quot;Ajouter un élément existant&amp;quot;" style="WIDTH:741px;HEIGHT:570px;" height="570" alt="Cliquez droit sur le projet et selectionnez &amp;quot;Ajouter un élément existant&amp;quot;" src="http://msmvps.com/photos/valentin/images/574355/original.aspx" width="741" align="absMiddle" border="2" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Dans la fenetre qui s&amp;#39;ouvre, choisissez &amp;quot;Content Pipeline&amp;quot; dans la combobox de choix de type de contenu et selectionnez le fichier texture.jpg. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="WIDTH:601px;HEIGHT:393px;" height="393" src="http://msmvps.com/photos/valentin/images/574357/original.aspx" width="601" align="absMiddle" border="2" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Après validation&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&lt;img style="WIDTH:323px;HEIGHT:209px;" height="209" src="http://msmvps.com/photos/valentin/images/574358/original.aspx" width="323" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;Déclarez&amp;nbsp;un&amp;nbsp;object de type &lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Texture2D&lt;/span&gt; dans la classe &lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Game1&lt;/span&gt;.&amp;nbsp;&lt;/font&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="courier new,courier"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Texture2D&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; texture;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;C&amp;#39;est cet objet qui va nous permettre de manipuler les textures dans notre application. Rendez vous maintenant dans la méthode &lt;font face="Courier New"&gt;LoadGraphicsContent &lt;/font&gt;: Il nous faut y&amp;nbsp;charger la texture mais aussi spécifier à notre effet que nous associons cette texture à l&amp;#39;affichage des vertices. Nous procédons comme ceci :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;protected&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;override&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; LoadGraphicsContent(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt;&lt;font color="#000000"&gt; loadAllContent)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (loadAllContent)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;// TODO: Load any ResourceManagementMode.Automatic content&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;texture&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;effect.Parameters[&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;xTexture&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;].SetValue(texture);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;// TODO: Load any ResourceManagementMode.Manual content&lt;/span&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;L&amp;#39;objet content de type &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;ContentManager&lt;/font&gt;&lt;/span&gt;&amp;nbsp;s&amp;#39;occupe des ressources du jeu en évitant au développeur d&amp;#39;avoir à se soucier de leur gestion. La méthode Load, générique est son seul membre réellement interessant. Elle renvoie un objet du type spécifié en généricité à partir du path ressource donné. Ici :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Courier New"&gt;texture = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;texture&amp;quot;&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Nous indiquons la spécificité sur le type &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Texture2D&lt;/font&gt;&lt;/span&gt;&amp;nbsp;et donnons en path la string &lt;span style="COLOR:maroon;"&gt;&lt;font face="Courier New"&gt;&amp;quot;texture&amp;quot;&lt;/font&gt;&lt;/span&gt;. Nous ne donnons pas l&amp;#39;extension &amp;quot;.jpg&amp;quot; car la méthode Load prend le nom AssetName. Pour voir sa valeur, selectionnez la texture dans le projet et appuyez sur F4 (ou cliquez droit sur ce fichier et faites Propriété). Dans la fenêtre d&amp;#39;outil qui s&amp;#39;ouvre le champs AssetName contient la string &amp;quot;texture&amp;quot;. Vous pouvez toujorus changer cette valeur pour donner un nom explicite, mais faites attention à bien vous y retrouver lorsque vous avez plusierus centaines de fichiers ressources !&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Si vous lancez l&amp;#39;application vous obtenez maintenant :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:617px;HEIGHT:559px;" height="559" src="http://msmvps.com/photos/valentin/images/574419/original.aspx" width="617" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Voila nous avons terminé ! Comme exercice revenez sur le premier point de ce chapitre où l&amp;#39;ont voit différentes manière de texturer un carré. Appliquez ces différentes possibilités à votre programme pour les tester.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;&lt;img title="telecharger" style="WIDTH:24px;HEIGHT:24px;" height="24" alt="telecharger" src="http://www.adcworks.com/images/content/icon-download.gif" width="24" align="middle" /&gt;&amp;nbsp;Vous pouvez télécharger le sample, les deux moteurs et les exercices &lt;a class="" href="http://msmvps.com/files/folders/valentin/entry582110.aspx" target="_blank"&gt;ici&lt;/a&gt;&lt;font face="times new roman,times" color="#000000"&gt;.&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;strong&gt;Ajout de textures et de couleurs&amp;nbsp;au projet...&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;font face="Verdana"&gt;Avant de passer aux choses sérieuses, nous allons tenter d&amp;#39;associer trois données à chaque vertex :&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;La position bien évidemment&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;La texture &lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Une couleur&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Nous utiliserons pour cela la structure de format de vertex &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;VertexPositionColorTexture&lt;/font&gt;&lt;/span&gt;&amp;nbsp;en lieu et place de &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;VertexPositionTexture&lt;/font&gt;&lt;/span&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;La déclaration des vertices sera modifiée de manière a spécifier le champs color comme auparavant :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;img src="http://msmvps.com/emoticons/emotion-14.gif" alt="Devil" /&gt;;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;//triangle 1, face devant&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[0].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-10f, 0f, -10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[0].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(0f, 0f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[0].Color = &lt;span style="COLOR:teal;"&gt;Color&lt;/span&gt;.Green;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[1].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-10f, 0f, 10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[1].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(0f, 1f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[1].Color = &lt;span style="COLOR:teal;"&gt;Color&lt;/span&gt;.Red;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[2].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(10f, 0f, 10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[2].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(1f, 1f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[2].Color = &lt;span style="COLOR:teal;"&gt;Color&lt;/span&gt;.Yellow;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;//triangle 2, face devant&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[3].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-10f, 0f, -10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[3].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(0f, 0f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[3].Color = &lt;span style="COLOR:teal;"&gt;Color&lt;/span&gt;.Green;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[4].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(10f, 0f, 10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[4].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(1f, 1f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[4].Color = &lt;span style="COLOR:teal;"&gt;Color&lt;/span&gt;.Red;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[5].Position = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(10f, 0f, -10f);&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[5].TextureCoordinate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;(1f, 0f);&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;vertices[5].Color = &lt;span style="COLOR:teal;"&gt;Color&lt;/span&gt;.Yellow;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Faites bien attention à remplacer partout &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;VertexPositionTexture&lt;/font&gt;&lt;font face="Verdana" color="#000000"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Si vous lancez cette nouvelle version du programme, vous obtenez la même sortie qu&amp;#39;auparavant : et pour cause, notre fichier effet ne permet pas de gérer les vertices qui possèdent&amp;nbsp;à la fois une coordonnée de texture et une couleur. Deux possibilités face à ce problème : chercher un fichier effet qui permet cela, ou utiliser celui de base inclu dans le framework. C&amp;#39;est cette seconde option que nous utiliserons pour sa simplicité.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;La classe &lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;BasicEffect&lt;/span&gt;&lt;/font&gt;&lt;font face="Verdana"&gt; est une classe qui encapsule en interne un fichier effet (.fx) pratiquement identique à celui que nous utilisions jusque là. Elle&amp;nbsp;offre une interface objet simple et intuitive pour paramétrer la façon dont les vertices sont affichés à l&amp;#39;écran. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Remarque : Pourquoi ne pas avoir directement utilisé cette classe au tout début de notre apprentissage&amp;nbsp;? Pour des raisons de compréhension : lorsqu&amp;#39;on travaille à&amp;nbsp;trop haut niveau les API nous cachent se qui se passe réellement dans les couches basses des fonctionnalités utilisées. On se trouve souvent ainsi confrontés à des bugs incompréhensibles faute de connaissances techniques... Ce qui a été appris jusqu&amp;#39;ici sera très utile lorsque nous aborderons le chapitre sur les effets.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;Supprimez toutes les références vers la classe &lt;font face="Courier New" color="#008080"&gt;Effect&lt;/font&gt; et son instance &lt;font face="courier new,courier"&gt;effect&lt;/font&gt; du programme. Ajoutez la déclaration suivante dans la classe &lt;font face="Courier New" color="#008080"&gt;Game1&lt;/font&gt; :&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;BasicEffect&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; effect;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;Dans la méthode Initialize ajoutez le code suivant :&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;BasicEffect&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.graphics.GraphicsDevice, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.VertexColorEnabled = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.TextureEnabled = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.View = viewMatrix;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.Projection = projectionMatrix;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.World = &lt;span style="COLOR:teal;"&gt;Matrix&lt;/span&gt;.Identity;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;Nous pouvons en convenir : le code est réellement plus simple ; Ecrire :&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.View = viewMatrix;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.Projection = projectionMatrix;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.World = &lt;span style="COLOR:teal;"&gt;Matrix&lt;/span&gt;.Identity;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;est plus lisible que&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.Parameters[&lt;span style="COLOR:maroon;"&gt;&amp;quot;xView&amp;quot;&lt;/span&gt;].SetValue(viewMatrix);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.Parameters[&lt;span style="COLOR:maroon;"&gt;&amp;quot;xProjection&amp;quot;&lt;/span&gt;].SetValue(projectionMatrix);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.Parameters[&lt;span style="COLOR:maroon;"&gt;&amp;quot;xWorld&amp;quot;&lt;/span&gt;].SetValue(&lt;span style="COLOR:teal;"&gt;Matrix&lt;/span&gt;.Identity);&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;Les deux premières instructions&amp;nbsp;indiquent que les vertices affichés à l&amp;#39;écran gèrent à la fois la couleur et les textures :&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.VertexColorEnabled = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.TextureEnabled = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;Reste a affecter la dite texture dans la méthode &lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;LoadGraphicsContent&lt;/span&gt; de cette manière :&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;effect.Texture = texture;&lt;/span&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;Si vous lancez maintenant l&amp;#39;application le résultat est meilleur :&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;img style="WIDTH:612px;HEIGHT:480px;" height="480" src="http://msmvps.com/photos/valentin/images/577894/612x480.aspx" width="612" align="absMiddle" border="2" alt="" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;La couleur de chaque texel de la texture a été &amp;quot;aditionnée&amp;quot; à la couleur du pixel du carré issue de la couleur du vertex sous jacent.&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;Pour la suite de nos applications nous utiliserons la classe &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;BasicEffect&lt;/font&gt;&lt;font face="Verdana" color="#000000"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="COLOR:teal;"&gt;&lt;font face="Verdana" color="#000000"&gt;&lt;font face="Verdana"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;&lt;img title="telecharger" style="WIDTH:24px;HEIGHT:24px;" height="24" alt="telecharger" src="http://www.adcworks.com/images/content/icon-download.gif" width="24" align="middle" /&gt;&amp;nbsp;Vous pouvez télécharger le sample, les deux moteurs et les exercices &lt;a class="" href="http://msmvps.com/files/folders/valentin/entry582110.aspx" target="_blank"&gt;ici&lt;/a&gt;&lt;font face="times new roman,times" color="#000000"&gt;.&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Verdana" size="4"&gt;&lt;strong&gt;Passons aux choses sérieuses...&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Nous allons maintenant modifier la classe Cube du chapitre précédent afin de lui faire afficher une texture. Il lui sera aussi ajouté un objet de type&amp;nbsp;&lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;BasicEffect&lt;/font&gt;&lt;/span&gt; afin de mettre la gestion de l&amp;#39;affichage des vertices au niveau du cube et non au niveau de tous les cubes. De même, pour changer un peu,&amp;nbsp;une nouvelle texture (qui devrait rappeller de bon souvenirs) sera utilisée:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:256px;HEIGHT:256px;" height="256" src="http://msmvps.com/photos/valentin/images/581524/original.aspx" width="256" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;La classe Cube va contenir deux nouveaux champs : &lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; _texture;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:teal;"&gt;BasicEffect&lt;/span&gt; _effect;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;et deux nouvelles propriétés :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Gets the cube&amp;#39;s effect.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;BasicEffect&lt;/span&gt;&lt;font color="#000000"&gt; Effect&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Gets or sets the cube&amp;#39;s texture.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; Texture&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._texture;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._texture = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.Texture = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p&gt;Une méthode &lt;font face="Courier New"&gt;InitializeEffect&lt;/font&gt;&amp;nbsp;est ajoutée pour initialiser notre effet :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; InitializeEffect()&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._effect = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;BasicEffect&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._device, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._effect.VertexColorEnabled = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._effect.TextureEnabled = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La méthode &lt;font face="Courier New"&gt;Render&lt;/font&gt; est modifiée en conséquence :&lt;/p&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; Render()&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.Begin();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;EffectPass&lt;/span&gt;&lt;font color="#000000"&gt; pass &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;in&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.CurrentTechnique.Passes)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pass.Begin();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.Vertices[0].SetSource(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._vertexBuffer, 0, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;.SizeInBytes);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.Indices = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._indexBuffer;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.VertexDeclaration = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexDeclaration&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;.VertexElements);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.DrawIndexedPrimitives(&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;PrimitiveType&lt;/span&gt;&lt;font color="#000000"&gt;.TriangleList, 0, 0, 24, 0, 12);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pass.End();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.End();&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p&gt;Le code de la classe&amp;nbsp;est maintenant largement simplifié. Il ne nous reste plus qu&amp;#39;à modifier la déclarations des 8 vertices du cube pour leur donner à chacun, une coordonnée de texture.&amp;nbsp;En fait il y&amp;#39;a ici un problème. Nous avons 8 vertices pour 6 faces et donc 12 triangles. Donc chaque vertex du cube est utilisé pour plusieurs faces. L&amp;#39;image suivant illustre le problème :&lt;/p&gt;
&lt;p&gt;&lt;img title="Le vertex rouge est utilisé par plusieurs face" style="WIDTH:264px;HEIGHT:248px;" height="248" alt="Le vertex rouge est utilisé par plusieurs face" src="http://msmvps.com/photos/valentin/images/581854/original.aspx" width="264" align="absMiddle" border="2" /&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;u&gt;Le vertex rouge est utilisé par plusieurs face&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Si on prend le vertex surmonté d&amp;#39;un point rouge, on remarque que celui-ci appartient à trois faces :&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La rouge pâle&lt;/li&gt;
&lt;li&gt;La jaune pâle&lt;/li&gt;
&lt;li&gt;La bleue pâle&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Comment donner à ce vertex une coordonnée de texture dans ces conditions ? Pour la face rouge, ce vertex se trouve en bas à droite il aurait donc la coordonnée (1,1), or pour la face jaune il est en haut à droite et possède donc l&amp;#39;emplacement (1,0) sans parler de la face bleue dans laquelle il a la coordonnée (0,0) soit haut gauche. En fait chaque point du cube (au total&amp;nbsp;8 points) appartiennent à 3 faces. Il est donc nécessaire de créer non pas 8 vertices pour un cube mais 24 : chaque face possèdera ses propres vertices non partagés avec les autres faces, nous avons 6 faces de 4 vertices donc 24 vertices. Il ne s&amp;#39;agit pas ici d&amp;#39;une regression ; nous ne revenons pas au cube du &lt;a class="" href="http://msmvps.com/blogs/valentin/archive/2007/01/17/xna-tutorial-5-les-matrices-et-les-transformations.aspx" target="_blank"&gt;tutoriel 5&lt;/a&gt; qui possédait 36 vertices. La méthode&amp;nbsp;&lt;font face="Courier New"&gt;InitializeVertices&lt;/font&gt; se présente désormais ainsi :&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; InitializeVertices()&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;[] vertices = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;[24];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;//face devant&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[0].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 0f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[0].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[0].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[1].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 0f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[1].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[1].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[2].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 0f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[2].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[2].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[3].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 0f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[3].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[3].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;//face derrière&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[4].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 1f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[4].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[4].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[5].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 1f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[5].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[5].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-14.gif" alt="Devil" /&gt;.Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 1f, 0f);&lt;/font&gt;&lt;span style="COLOR:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-14.gif" alt="Devil" /&gt;.Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-14.gif" alt="Devil" /&gt;.TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[7].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 1f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[7].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[7].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;//face gauche&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-29.gif" alt="Music" /&gt;.Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 1f, 0f);&lt;/font&gt;&lt;span style="COLOR:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-29.gif" alt="Music" /&gt;.Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-29.gif" alt="Music" /&gt;.TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[9].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 1f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[9].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[9].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[10].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 0f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[10].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[10].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[11].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 0f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[11].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[11].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;//face droite&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[12].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 0f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[12].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[12].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[13].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 0f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[13].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[13].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[14].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 1f, 1f);&lt;/font&gt;&lt;span style="COLOR:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[14].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[14].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[15].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 1f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[15].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[15].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;//face haut&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[16].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 0f, 1f);&lt;/font&gt;&lt;span style="COLOR:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[16].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[16].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[17].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 1f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[17].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[17].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[18].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 1f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[18].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[18].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[19].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 0f, 1f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[19].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[19].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;//face bas&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[20].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 0f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[20].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[20].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[21].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(1f, 1f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[21].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[21].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[22].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 1f, 0f);&lt;/font&gt;&lt;span style="COLOR:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[22].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[22].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[23].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(0f, 0f, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[23].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[23].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.IsObjectOriginInCubeCenter)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; i = 0; i &amp;lt; 24; i++)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.Position += &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(-0.5f, -0.5f, -0.5f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._vertexBuffer = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexBuffer&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;),&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;24,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceUsage&lt;/span&gt;&lt;font color="#000000"&gt;.WriteOnly,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;&lt;font color="#000000"&gt;.Automatic);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._vertexBuffer.SetData(vertices);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt; 
&lt;p&gt;A noter la présence du bloc :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.IsObjectOriginInCubeCenter)&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; i = 0 ; i &amp;lt; 24 ; i++)&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.Position += &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;(-0.5f, -0.5f, -0.5f);&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;J&amp;#39;ai rajouté sur demande de certains d&amp;#39;entre vous une propriétée nommée qui permet de préciser si le centre du cube doit coincider avec l&amp;#39;origine du repère de l&amp;#39;objet (pour plus d&amp;#39;information allez voir &lt;a class="" href="http://msmvps.com/blogs/valentin/archive/2007/02/05/azrr.aspx" target="_blank"&gt;ici&lt;/a&gt;). L&amp;#39;origine se trouve par défaut sur le vertice 0, pour mettre l&amp;#39;origine au centre du cube il me suffit de déplacer tous les vertices de 0.5f unités car le cube a une taille de 1. Modifiez la méthode d&amp;#39;affichage pour indiquer que vous gérez non plus 8 vertices mais 24. Au lancement vous obtenez&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="On aurait presque envie de donner un coup de tête à la mario :)" style="WIDTH:612px;HEIGHT:480px;" height="480" alt="On aurait presque envie de donner un coup de tête à la mario :)" src="http://msmvps.com/photos/valentin/images/581984/612x480.aspx" width="612" align="absMiddle" border="2" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;(je reviendrais dans une annexe sur la manière de faire des mouvements amples et fluides pour ses objets dans une annexe prochainement).&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;&lt;span style="COLOR:teal;"&gt;&lt;font face="Verdana" color="#000000"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;&lt;img title="telecharger" style="WIDTH:24px;HEIGHT:24px;" height="24" alt="telecharger" src="http://www.adcworks.com/images/content/icon-download.gif" width="24" align="middle" /&gt;&amp;nbsp;Vous pouvez télécharger le sample, les deux moteurs et les exercices &lt;a class="" href="http://msmvps.com/files/folders/valentin/entry582110.aspx" target="_blank"&gt;ici&lt;/a&gt;&lt;font face="times new roman,times" color="#000000"&gt;.&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Verdana" size="4"&gt;&lt;strong&gt;A ce stade de nos connaissances nous pouvons ...&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;L&amp;#39;information qui suit est à prendre avec des pincette mais elle donne toutefois une idée assez précise du niveau de nos connaissances à ce stade de notre apprentissage. Une partie de ceux qui lisent ces lignes ont sans doute déjà joué à l&amp;#39;un des épisode de la série à succès Tomb Raider (l&amp;#39;auteur de cours XNA a pour sa part joué aux version 1, 2, 3, 4). Nous sommes maintenant capable de réaliser des mondes tous à fait similaires à celui présenté par la capture d&amp;#39;écran ci-dessous :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;a class="" href="http://msmvps.com/photos/valentin/images/582003/original.aspx" target="_blank"&gt;&lt;img style="WIDTH:640px;HEIGHT:480px;" height="480" src="http://msmvps.com/photos/valentin/images/582003/640x480.aspx" width="640" align="absMiddle" border="2" alt="" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Regardez attentivement cette image. Vous verrez qu&amp;#39;en fait, ce monde n&amp;#39;est constitué que de formes cubiques comme nous savons très bien les faire maintenant : des cubes, des cubes coupés sur leur diagonale, des cubes coupés en leur milieu etc. C&amp;#39;est là toute l&amp;#39;ingéniosité et toute la puissance du moteur de Core/Eidos : reproduire n&amp;#39;importe quelle architecture/géographique à l&amp;#39;aide de ces formes. Les mouvements de Lara sont&amp;nbsp;d&amp;#39;ailleur soumi à une seule unité de mesure : la taille d&amp;#39;un cube. Ce principe assez proche des jeux de plateforme 2D permet de gérer les collisions et&amp;nbsp;les déplacements très facilement et de créer des formes à l&amp;#39;écran simplement. Core/Eidos peut donc créer des mondes et développer un moteur beaucoup plus rapidement que des moteurs complexes comme celui de World Of Warcraft (que nous reproduirons à la fin de cet apprentissage).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Si le temps nous le permet nous essayerons de reproduire un monde à base de cubes.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="4"&gt;&lt;strong&gt;Les filtres&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="3"&gt;&lt;strong&gt;Introduction&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Tous ceux qui ont travaillé avec des programmes d’édition d’images comme paint shop pro ou photoshop sont familiers des effets de pixellisation. On obtient cet effet désagréable lorsqu’on réduit la taille d’une image selon un rapport impair. Résultat : de nombreux &lt;/font&gt;&lt;font face="verdana,geneva"&gt;détails sont perdus et la qualité de l&amp;#39;image s&amp;#39;en ressent. Pour éviter cela, les bons programmes d’édition d’images proposent différentes techniques de réduction ou d&amp;#39;augmentation de taille d&amp;#39;image aussi nommées filtrage pour réduire au minimum les pertes dues au changement de taille. XNA aussi.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Pour mieux comprendre, voici un exemple concrêt : Quand&amp;nbsp;XNA affiche une primitive, il plaque un modèle 3-D sur un écran 2-D. Si la primitive&amp;nbsp;possède une texture,&amp;nbsp;XNA doit utiliser cette dernière&amp;nbsp;afin de créer une couleur pour chaque Pixel de ce modèle en utiliser une valeur de couleur de la texture. C&amp;#39;est ce&amp;nbsp;processus qu&amp;#39;on appelle filtrage de texture.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Quand une opération de filtre de texture est effectuée, la texture utilisée est &amp;quot;magnifiée&amp;quot; (agrandie)&amp;nbsp;ou &amp;quot;minifiée&amp;quot; (réduite). En d&amp;#39;autres termes, elle est plaquée sur une primitive qui est plus grande ou plus petite que sa propre taille. La magnification d&amp;#39;une texture peut avoir comme conséquence l&amp;#39;utilisation d&amp;#39;un seul texel (point de couleur dans une texture) pour colorer un grand nombre&amp;nbsp;de Pixel à l&amp;#39;écran. L&amp;#39;image résultante peut être volumineuse et pixelisée. La Minification d&amp;#39;une texture au contraire signifie souvent qu&amp;#39;un Pixel simple se substitue à plusieurs&amp;nbsp;texels. L&amp;#39;image résultante peut être trouble . Pour résoudre ces problèmes, se mélanger des couleurs de texel doit être effectué pour arriver à une couleur pour le Pixel.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;XNA tout comme DirectX fournit&amp;nbsp;plusieurs types de filtrage de texture (lineaire, anisotropic, gaussien ...)&amp;nbsp;et un système de mipmapping (notion sur laquelle nous reviendrons plus loin). Si vous ne choisissez aucun filtre, XNA emploie une technique appelée nearestpoint sampling (en gros : choix du texel le plus proche). &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Chaque type de filtrage de texture a des avantages et des inconvénients. Par exemple, le filtrage linéaire de texture peut produire des bords déchiquetés ou un aspect volumineux dans l&amp;#39;image finale. Cependant, c&amp;#39;est un filtre très simple et rapide à mettre en place à faible coùt de mémoire. Le filtrage anisotrope demande plus de temps processeur et beaoucp plus de mémoire.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;L’exemple suivant dans le jeu Might and Magic le montre bien : &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="— La maison vue de loin est belle …" style="WIDTH:640px;HEIGHT:480px;" height="480" alt="— La maison vue de loin est belle …" src="http://msmvps.com/photos/valentin/images/600889/original.aspx" width="640" align="absMiddle" border="2" /&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;u&gt;La maison vu de loin est belle ...&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img title="— … mais quand on s’approche … tout est pixellisé et … hideux" style="WIDTH:640px;HEIGHT:480px;" height="480" alt="— … mais quand on s’approche … tout est pixellisé et … hideux" src="http://msmvps.com/photos/valentin/images/600903/original.aspx" width="640" align="absMiddle" border="2" /&gt;&amp;nbsp;&lt;br /&gt;&lt;u&gt;&lt;font size="1"&gt;... mais quand on s’approche ... tout est pixellisé et ... hideux le jeu à l&amp;#39;époque, manquait d&amp;#39;un bon filtre de texture... &lt;/font&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Might and Magic dans sa version 6 (NDA : la meilleure version) n&amp;#39;était pas très avancé graphiquement parlant. Le jeu manquait en autres choses d&amp;#39;un bon filtrage de texture. La première image montre un batiment dans la ville de Sorpigal. Vu de loin, la texture qui est plaquée sur ce batiment semble normale, mais comme le montre la seconde image, si l&amp;#39;on s&amp;#39;approche, un filtre nearest point sampling est effectué pour créer une magnification : on agrandit énormément la texture. En ressort alors un très désagréable effet de pixelisation. Dans la première image, la surface visible du batiment est d&amp;#39;environ 300*200. On s&amp;#39;approche donc de la taille de cette texture : l&amp;#39;affichage est donc optimal. Dans la seconde image la surface d&amp;#39;affichage pour la texture passe a 450*350 et ce pour n&amp;#39;afficher que 8%&amp;nbsp;de la texture ! &lt;/font&gt;&lt;font face="Verdana"&gt;L&amp;#39;utilisation d&amp;#39;un bon filtrage permet d&amp;#39;éviter cet effet pixélisé horrible.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="3"&gt;&lt;strong&gt;Et Xna dans tout ça ?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;XNA offre au développeurs&amp;nbsp;5 filtrages (tous énuméré dans le type&amp;nbsp;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;TextureFilter&lt;/span&gt;) :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&amp;nbsp; 
&lt;table class="" cellpadding="0"&gt;

&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;b&gt;Membre&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;a class="" title="GaussianQuad" name="GaussianQuad"&gt;&lt;/a&gt;GaussianQuad&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;Un filtre 4-sample Gaussien pour la magnification ou la minification.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;a class="" title="PyramidalQuad" name="PyramidalQuad"&gt;&lt;/a&gt;PyramidalQuad&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;Un filtre 4-sample pour la magnification ou la minification.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;a class="" title="Anisotropic" name="Anisotropic"&gt;&lt;/a&gt;Anisotropic&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;Un filtre de texture anisotrope utilisé pour la magnification ou la minification. Les filtres anisotrope compensent la distorsion représentent par &amp;nbsp;l&amp;#39;angle &amp;nbsp;du polygone à mapper et la position de la caméra.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;a class="" title="Linear" name="Linear"&gt;&lt;/a&gt;Linear&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;Un filtre de texture anisotrope utilisé pour la magnification ou la minification. Une moyenne pondérée de 2x2 texels autour du texel concerné est utilisé.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;a class="" title="Point" name="Point"&gt;&lt;/a&gt;Point&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;Un filtre de texture point utilisé pour la magnification ou la minification. Le texel avec les coordonnées les plus proches du pixel voulu est utilisé.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;
&lt;p&gt;&lt;a class="" title="None" name="None"&gt;&lt;/a&gt;None&lt;/p&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p&gt;Aucun filtre.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C&amp;#39;est la propriété &lt;font face="Courier New"&gt;SamplerStates&lt;/font&gt; de l&amp;#39;objet &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;GraphicsDevice&lt;/font&gt;&lt;/span&gt; qui va nous permettre de spécifier le filtrage à appliquer en minification et/ou en magnification.&lt;br /&gt;Si nous voulons appliquer un filtre anisotrope en mignification et lineaire en magnignification nous ferons :&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.graphics.GraphicsDevice.SamplerStates[0].MinFilter = &lt;span style="COLOR:teal;"&gt;TextureFilter&lt;/span&gt;.Anisotropic;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.graphics.GraphicsDevice.SamplerStates[0].MagFilter = &lt;span style="COLOR:teal;"&gt;TextureFilter&lt;/span&gt;.Linear;&lt;/span&gt; 
&lt;p&gt;&lt;br /&gt;...pas très compliqué. Nous utilisons ici la propriété &lt;font face="Courier New"&gt;SamplerStates&lt;/font&gt; comme un tableau tout simplement parcequ&amp;#39;il est possible de plaquer plusieurs textures sur un même polygone (jusqu&amp;#39;à 8 textures). Nous appliquons ici nos filtres&amp;nbsp;&lt;font face="Courier New"&gt;MinFilter&lt;/font&gt; et &lt;font face="Courier New"&gt;MagFilter&lt;/font&gt;&amp;nbsp;sur la première texture (0). La classe &lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;SamplerState&lt;/span&gt;&amp;nbsp;possède de nombreux membres pour la gestion de l&amp;#39;affichage des textures à l&amp;#39;écran. Nous les verrons tous dans ce chapitre.&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Verdana" size="3"&gt;&lt;strong&gt;Un exemple concrêt&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Rien de mieux pour bien comprendre l&amp;#39;effet d&amp;#39;un filtre à l&amp;#39;écran que de développer un exemple. Nous reprendrons le dernier projet pour y effectuer quelques menues modifications. Voici ce que nous allons faire : un cube va être affiché en gros plan. Il tournera sur lui-même a vitesse très réduite de sorte de bien mettre en évidence les différents filtres que nous appliquerons. Les filtres seront selectionnés au clavier : la touche &amp;#39;A&amp;#39; pour anisotope, &amp;#39;L&amp;#39; pour linéaire, &amp;#39;P&amp;#39; pour point, &amp;#39;G&amp;#39; pour Gaussian, &amp;#39;Q&amp;#39; pour Pyramidal, &amp;#39;N&amp;#39; pour aucun. Si la touche Shift est appuyée en même temps, le filtre s&amp;#39;applique en magnification, sinon, en minification.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;En fait le sample sera rapide à écrire, nous n&amp;#39;allons ajouter qu&amp;#39;une vingtaine d&amp;#39;instructions. Première étape, la classe &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Cube&lt;/font&gt;&lt;/span&gt;. Ajout de deux membres et deux propriétés associées pour sauvegarder le filtre en magnification et minification :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;TextureFilter&lt;/span&gt; _minfilter;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;TextureFilter&lt;/span&gt; _magfilter;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;TextureFilter&lt;/span&gt; MagTextureFilter&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;get&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._magfilter;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;set&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._magfilter = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;TextureFilter&lt;/span&gt; MinTextureFilter&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;get&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._minfilter;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;set&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._minfilter = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Seconde étape : Application des filtres dans la méthode Render :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Render the cube on the device.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; Render()&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.Begin();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;EffectPass&lt;/span&gt;&lt;font color="#000000"&gt; pass &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;in&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.CurrentTechnique.Passes)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pass.Begin();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.SamplerStates[0].MinFilter = _minfilter;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.SamplerStates[0].MagFilter = _magfilter;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.Textures[0] = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Texture;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.Vertices[0].SetSource(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._vertexBuffer, 0, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;.SizeInBytes);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.Indices = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._indexBuffer;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.VertexDeclaration = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexDeclaration&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;.VertexElements);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device.DrawIndexedPrimitives(&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;PrimitiveType&lt;/span&gt;&lt;font color="#000000"&gt;.TriangleList, 0, 0, 24, 0, 12);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pass.End();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._effect.End();&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p&gt;C&amp;#39;est terminé ! La classe &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Game1&lt;/font&gt;&lt;/span&gt;&amp;nbsp;a bien entendu été modifiée pour pouvoir affecter au cube le filtre voulu suivant la touche clavier appuyée. A l&amp;#39;exécution, l&lt;/font&gt;&lt;font face="Verdana"&gt;&amp;#39;application se présente ainsi :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:612px;HEIGHT:480px;" height="480" src="http://msmvps.com/photos/valentin/images/605793/612x480.aspx" width="612" align="absMiddle" border="2" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;En jouant avec les touches a, A, l, L, p, P, g, G,&amp;nbsp;q, Q, n ou N on peut facilement voir les différences de qualité entre tous les filtres suivant les angles de vue et la distance du cube. Les deux images suivants explicite cela. En mode point, le cube en courte distance donne l&amp;#39;affichage pixélisé suivant&amp;nbsp;:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;a class="" title="Mode point (cliquez pour agrandir)" href="http://msmvps.com/photos/valentin/images/605822/original.aspx"&gt;&lt;img title="Mode point" style="WIDTH:297px;HEIGHT:480px;" height="480" alt="Mode point" src="http://msmvps.com/photos/valentin/images/605822/297x480.aspx" width="297" border="2" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Le zoom sur la face du cube en mode point montre bien l&amp;#39;effet de pixalisation. Maintenant la même face en anisotropie :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;a class="" title="Le filtre anisotropic. Cliquez pour agrandir" href="http://msmvps.com/photos/valentin/images/605826/original.aspx"&gt;&lt;img title="La même face en anisotropie" style="WIDTH:297px;HEIGHT:480px;" height="480" alt="La même face en anisotropie" src="http://msmvps.com/photos/valentin/images/605826/297x480.aspx" width="297" align="absMiddle" border="2" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;donne un bien meilleur résultat visual.&amp;nbsp; &lt;/font&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Cet exemple n&amp;#39;est qu&amp;#39;une première approche des filtres. Il met en évidence l&amp;#39;importance qu&amp;#39;ils revettent pour le design et l&amp;#39;aspect de nos productions. C&amp;#39;est aussi un élément important à prendre en compte si l&amp;#39;on veut rendre son jeu accessible à tous, un filtre gourmant comme l&amp;#39;anisotrope doit être un choix et non une obligation.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Pour cela vous devez toujours vérifier avant toute chose que la machine sur laquelle tourne votre application supporte&amp;nbsp;la technologie ou la fonctionnalité que vous voulez utiliser. D&amp;#39;une manière générale faites donc toujours des tests par rapport à la propriété &lt;font face="Courier New"&gt;GraphicsDeviceCapabilities&lt;/font&gt;&amp;nbsp;de l&amp;#39;objet &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;GraphicsDevice&lt;/font&gt;&lt;/span&gt;. Cette propriété de type &lt;font color="#008080" size="2"&gt;GraphicsDeviceCapabilities&lt;/font&gt;&amp;nbsp;contient un ensemble de booléean et d&amp;#39;énumération indiquant toutes les fonctionnalités et technologies supportés par le matériel en rapport avec le device courant. Pour savoir si l&amp;#39;anisotrop est supporté, faites un test sur :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.graphics.GraphicsDevice.GraphicsDeviceCapabilities .TextureFilterCapabilities.SupportsMagnifyAnisotropic&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.graphics.GraphicsDevice.GraphicsDeviceCapabilities.TextureFilterCapabilities.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;pour la magnification et sur :&lt;/font&gt;&lt;/p&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.graphics.GraphicsDevice.GraphicsDeviceCapabilities .TextureFilterCapabilities.SupportsMinifyAnisotropic&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Verdana"&gt;pour la minification. &lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Remarque : une annexe sera écrite prochainement et consacrée uniquement à l&amp;#39;importance des tests sur les capacités du matériel avant l&amp;#39;exécution.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;De même (mais là nous voyons vraiment loin) il est préférable de proproser les fonctionnalités poussées comme ce filtre dans un menu d&amp;#39;option.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="4"&gt;&lt;strong&gt;Le mip mapping&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;em&gt;Mip vient du latin Multum in parvo, qui signifie « beaucoup de choses dans un petit endroit ».&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="3"&gt;&lt;strong&gt;&amp;nbsp;Principe&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;Le mipmapping est une technique visant à améliorer l&amp;#39;affichage des textures sur les polygones en prennant en compte la distance comprise entre le dit polygone et la position de la caméra. &lt;/font&gt;&lt;font face="verdana,geneva"&gt;Le niveau de détail des textures est adapté à la distance de l&amp;#39;objet. Ainsi, un objet proche de la caméra&amp;nbsp;affichera des textures en haute résolution tandis qu&amp;#39;un objet situé au loin sera plaqué avec une texture de petite taille. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Chaque texture utilisée dans un processus de mip mapping&amp;nbsp;est appellé &amp;quot;niveau de&amp;nbsp;MIP map&amp;quot; ou LOD (pour Level Of Detail). Elles sont choisies suivant la distance à la caméra. La technique du&amp;nbsp;MIP mapping consiste à envoyer au GPU des textures de résolutions décroissantes qui seront utilisées à la place de la texture originale. Le choix de la texture ayant la taille la plus adaptée s&amp;#39;effectue selon la distance du point de vue de l&amp;#39;objet texturé et le niveau de détails nécessaire. Le GPU n&amp;#39;a alors plus qu&amp;#39;à appliquer les bonnes textures sur les bons objets suivant leur éloignement, réadaptant la texture chaque fois que l&amp;#39;objet se rapproche. La texture utilisée lors du rendu sera alors celle dont la résolution est la plus proche de celle de l&amp;#39;objet sur l&amp;#39;image projetée. &lt;/font&gt;&lt;font face="Verdana"&gt;Chaque niveau doit avoir pour hauteur et largeur la moitié de la hauteur et largeur du niveau précédent. Le dernier niveau a bien évidemment au moins un coté égal à 1.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Par exemple, d&amp;#39;une image d&amp;#39;une taille de 256x256 pixels seront produits les mêmes images aux résolutions de 128x128 pixels, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2 et 1x1. Si la taille de l&amp;#39;objet sur l&amp;#39;image projetée à l&amp;#39;écran est de 30x30 pixels, la texture utilisée sera alors celle de résolution 32x32 pixels.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Le filtrage joue ici un rôle primodial en évitant de &lt;/font&gt;&lt;font face="verdana,geneva"&gt;voir les &amp;quot;sauts&amp;quot; lors du passage d&amp;#39;une texture à l&amp;#39;autre, grâce à une transition progressive.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;Quel est l&amp;#39;interet de du mip mapping ? Si cette technique est gourmande en mémoire vidéo (elle consomme un tiers de mémoire en plus), elle est plus rapide&amp;nbsp;: La diminution du nombre de texels à traiter et des opérations de filtrages en temps réel de la texture permettent un rendu plus rapide de l&amp;#39;image. De plus le choix des différents niveaux de mipmap peut être laissé à l&amp;#39;apprecciation du développeur :&amp;nbsp;Souvent laisser votre machine opérer pour voir les filtres peut donner un résultat qui s&amp;#39;avère desastreux et ce, même avec les meilleures techniques de filtrage. Prennez l&amp;#39;exemple de l&amp;#39;image suivante qui pourrait se trouver dans un de vos jeu :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:367px;HEIGHT:424px;" height="424" src="http://msmvps.com/photos/valentin/images/609099/original.aspx" width="367" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Le message qu&amp;#39;elle véhicule est clair : tirer sur la cible fait perdre le joueur. Si nous laissons la machine gérer le mip mapping et la réduction de la texture nous pouvons obtenir le résultat suivant &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:184px;HEIGHT:212px;" height="212" src="http://msmvps.com/photos/valentin/images/609100/original.aspx" width="184" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;C&amp;#39;est cette texture qui pourrait etre plaqué sur une forme 3D se trouvant loin du joueur. Celui-ci ne voyant pas le message tirera à coup sur. En fait l&amp;#39;algorythme de réduction d&amp;#39;image ne se préoccupe pas de l&amp;#39;information que l&amp;#39;image porte dans le mesure où il ne peut la quantifier. Il ne prend donc pas en compte l&amp;#39;importance de laisser le texte visible après une réduction n&amp;#39;est donc pas pris en compte dans le calcul du filtre. Si ce n&amp;#39;est pas la machine qui effectue cette tâche mais une personne, celle-ci peut réduire l&amp;#39;image de manière intelligente en gardant l&amp;#39;information visible au maximum :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:184px;HEIGHT:212px;" height="212" src="http://msmvps.com/photos/valentin/images/609101/original.aspx" width="184" align="absMiddle" border="2" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="3"&gt;&lt;strong&gt;Paramétrage du Mipmapping&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;Deux paramètres peuvent intervenir dans l&amp;#39;affichage d&amp;#39;une texture mipmappée : Le MaxAnisotropy et le MipMapLevelOfDetailBias.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="verdana,geneva"&gt;MaxAnisotropy&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;L’anysotropie est un filtre intelligent et assez gourmant en ressource (bien qu’il soit souvent intégré au hardware des cartes graphiques). Il se base sur l’aspect graphique de l’objet sur lequel on plaque la texture. Les texels ne sont pas tirés d’une forme symétrique, mais plutôt en utilisant un motif irrégulier ajusté à la perspective (on parle de figure anisotropique). Le nombre de texels pris en compte pour ce filtrage détermine la qualité de celui-ci. Avec le filtrage anisotropique 1x, on prend 8 texels. Le niveau maximum est 16x, les plus courants sont 2x (16 texels), 4x (32 texels), 8x (64 texels) et 16x (128 texels). Plus la valeur de MaxAnisotropy est importante, et plus le niveau de filtrage est élevé, et forcement, plus le temps de calcul augmente (et ceci de manière exponentielle…). &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="verdana,geneva"&gt;MipMapLevelOfDetailBias&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Il arrive que pour la beauté du jeu il faille garder un LOD plus longtemps que prévu en retardant le passage à un LOD inférieur lorsque la caméra s’éloigne par exemple. C’est le LOD bias qui permet de réaliser cette opération. Si une surface s’éloigne de l’utilisateur, augmenter le LOD bias revient à retarder l’utilisation du LOD inférieur. Au contraire, en diminuant sa valeur, on passe plus rapidement aux LOD inférieurs.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;font size="3"&gt;&lt;strong&gt;Après la théorie, la pratique !&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;Il est temps de passer aux choses sérieuses. Le sample que nous allons réaliser ici aura pour but de mettre en évidence le mipmaping et les impacts des différents filtres. Nous allons réaliser pout cela un damier de&amp;nbsp;64 cases sur&amp;nbsp;64 cases. Chaque case sera associée à une texture &amp;quot;mipmappée&amp;quot;. La camera pourra se déplacer sur ce damier et nous pourrons ainsi voir, en se déplaçant l&amp;#39;évolution des textures sur les différentes cases. Nous aurons trois types de textures : des textures de couleur qui permettrons d&amp;#39;apprecier facilement le passage entre deux LOD, des textures représentant un sol pavé pour voir en réel ce que nos choix produisent, une texture damier pour apprécier la qualité des filtres.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;La première étape consiste donc à créer ce qui va être notre premier terrain de jeu. A ce stade de nos connaissances il y a ici&amp;nbsp;aucune difficulté&amp;nbsp;: ayant déjà développé des applications affichants un carré,&amp;nbsp;nous sommes largement en mesure de créer un monde constitué de 64 carrés sur 64 carrés. Ouvrez le projet nommé &amp;quot;TroisiemeProjetMipmap&amp;quot;. Une nouvelle classe&lt;/font&gt;&amp;nbsp;&lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Region&lt;/font&gt;&lt;/span&gt; &lt;font face="verdana,geneva"&gt;fait son apparition. Elle sera chargé de la création et de l&amp;#39;affichage d&amp;#39;un terrain. Elle possède un seul vertexbuffer et un seul indexbuffer. Le vertexbuffer contiendra les 64*64 cases du terrain, sachant que chaque case possède 4 vertices. La&amp;nbsp;méthode&lt;/font&gt; &lt;font face="Courier New"&gt;InitializeVertices&lt;/font&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;se présente comme suit&amp;nbsp;:&lt;/font&gt; &lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; InitializeVertices()&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;float&lt;/span&gt;&lt;font color="#000000"&gt; caseSize = 16;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;[] vertices = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;[_numberOfVertices];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; index = 0;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; j = 0; j &amp;lt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._depth; j++)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; i = 0; i &amp;lt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._width; i++)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(i * caseSize, j * caseSize, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index +1 ].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(i * caseSize + caseSize, j * caseSize, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index +1 ].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index +1 ].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 0);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index + 2].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(i * caseSize + caseSize, j * caseSize - caseSize, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index + 2].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index + 2].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(1, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index + 3].Position = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector3&lt;/span&gt;&lt;font color="#000000"&gt;(i * caseSize, j * caseSize - caseSize, 0f);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index + 3].Color = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.Color;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;vertices[index + 3].TextureCoordinate = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Vector2&lt;/span&gt;&lt;font color="#000000"&gt;(0, 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;index+=4;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._vertexBuffer = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexBuffer&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;VertexPositionColorTexture&lt;/span&gt;&lt;font color="#000000"&gt;),&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_numberOfVertices,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceUsage&lt;/span&gt;&lt;font color="#000000"&gt;.WriteOnly,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;&lt;font color="#000000"&gt;.Automatic);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._vertexBuffer.SetData(vertices);&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Les membres depth et width représentent la profondeur et la largeur du monde (ils possèdent donc pour valeur 64 chacun donc). La double boucle&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;parcours le monde de jeu sur chaque ligne et chaque colonne en créant un carré à chaque fois. La valeur&lt;/font&gt; caseSize&amp;nbsp;représente &lt;font face="verdana,geneva"&gt;la taille d&amp;#39;un carré. Rien de compliqué ici. La méthode&lt;/font&gt;&amp;nbsp;&lt;font face="Courier New"&gt;InitializeIndices&lt;/font&gt; &lt;font face="verdana,geneva"&gt;est la suivante :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; InitializeIndices()&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;[] indices = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;[_numberOfIndices];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt; index = 0;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt; indexCase = 0;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; j = 0; j &amp;lt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._depth; j++)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; i = 0; i &amp;lt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._width; i++)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;indices[index] = indexCase;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;indices[index + 1] = (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;)(indexCase + 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;indices[index + 2] = (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;)(indexCase + 3);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;indices[index + 3] = (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;)(indexCase + 1);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;indices[index + 4] = (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;)(indexCase + 2);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;indices[index + 5] = (&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;)(indexCase + 3);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;index += 6;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;indexCase += 4;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._indexBuffer = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;IndexBuffer&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._device,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;short&lt;/span&gt;&lt;font color="#000000"&gt;),&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_numberOfIndices,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceUsage&lt;/span&gt;&lt;font color="#000000"&gt;.WriteOnly,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;&lt;font color="#000000"&gt;.Automatic);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._indexBuffer.SetData(indices);&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Nous spécifions 6 indices pour chaque carrés (une case équivaut à deux triangles de 3 points). Rien de vraiment compliqué là encore. Terminons sur cette classe en ajoutant qu&amp;#39;une propriété&lt;/font&gt; TextureMipMapFilter &lt;font face="verdana,geneva"&gt;a été ajoutée afin de pouvoir spécifier&amp;nbsp;un filtre mipmap depuis la classe&lt;/font&gt; &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Game1&lt;/font&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Chaque texture utilisée sera un mipmap composé de 6 LODs (256*256, 128, 60, 32, 16 et enfin 8). De la même façons que le premier projet de ce chapitre nous allons incorporer les LODs de chaque texture dans le projet. La texture colorée possédera les LOD suivants :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;img style="WIDTH:800px;HEIGHT:600px;" height="600" src="http://msmvps.com/photos/valentin/images/609218/original.aspx" width="800" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;chaque couleur permettra de bien discerner les niveaux de mip map utilisé. La texture de sol utilisera les LOD suivants:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;img style="WIDTH:800px;HEIGHT:600px;" height="600" src="http://msmvps.com/photos/valentin/images/609244/original.aspx" width="800" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Chaque LOD a été placé dans un répertoire du projet nommé MipMapTextures de la même façon que pour le premier projet de ce chapitre. C&amp;#39;est la classe&lt;/font&gt; &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Game1&lt;/font&gt;&lt;/span&gt; &lt;font face="verdana,geneva"&gt;qui va former&amp;nbsp;les trois&amp;nbsp;textures composée de 6 LODs. Dans celle-ci se trouvent trois méthodes similaires nommées&lt;/font&gt; &lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:FR;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;GenerateMipmap&lt;/span&gt;, &lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:FR;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;GenerateMipmapTexture&lt;/span&gt;&amp;nbsp;et &lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;mso-ansi-language:FR;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;GenerateMipmapCase&lt;/span&gt; &lt;font face="verdana,geneva"&gt;respectivement pour la texture colorée, de sol et de damier. A noter qu&amp;#39;on aurait pu ici factoriser le code en une seule méthode, mais pour des raisons de compréhension, cela n&amp;#39;a pas été fait. Ces trois méthodes étant similaires, nous n&amp;#39;en verrons qu&amp;#39;une :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; GenerateMipmap()&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; mainTexture = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.graphics.GraphicsDevice,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;256, 256,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;6,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceUsage&lt;/span&gt;&lt;font color="#000000"&gt;.Dynamic,&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;SurfaceFormat&lt;/span&gt;&lt;font color="#000000"&gt;.Color, &lt;/font&gt;&lt;span style="COLOR:green;"&gt;//std 32 bits mode&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;&lt;font color="#000000"&gt;.Manual);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; texture256 = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\256&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; texture128 = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\128&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; texture064 = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\64&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; texture032 = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\32&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; texture016 = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\16&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt; texture008 = content.Load&amp;lt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(&lt;/font&gt;&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\8&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[] array = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[256 * 256];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture256.GetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(array);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(0, &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;&lt;font color="#000000"&gt;, array, 0, array.Length, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;&lt;font color="#000000"&gt;.None);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;array = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[128 * 128];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture128.GetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(array);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(1, &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;&lt;font color="#000000"&gt;, array, 0, array.Length, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;&lt;font color="#000000"&gt;.None);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;array = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[64 * 64];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture064.GetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(array);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(2, &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;&lt;font color="#000000"&gt;, array, 0, array.Length, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;&lt;font color="#000000"&gt;.None);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;array = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[32 * 32];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture032.GetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(array);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(3, &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;&lt;font color="#000000"&gt;, array, 0, array.Length, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;&lt;font color="#000000"&gt;.None);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;array = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[16 * 16];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture016.GetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(array);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(4, &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;&lt;font color="#000000"&gt;, array, 0, array.Length, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;&lt;font color="#000000"&gt;.None);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;array = &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;[8 * 8];&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture008.GetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(array);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(5, &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;&lt;font color="#000000"&gt;, array, 0, array.Length, &lt;/font&gt;&lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;&lt;font color="#000000"&gt;.None);&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_sampleMipmapColor = mainTexture;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Cette méthode charge dans une variable locale nommée 6 LOD. Si quelque chose vous semble obscur de les explications suivent, reportez vous à la présentation du premier projet au tout début de ce chapitre. La première instruction&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; mainTexture = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.graphics.GraphicsDevice,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;256, 256,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;6,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceUsage&lt;/span&gt;.Dynamic,&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;SurfaceFormat&lt;/span&gt;.Color, &lt;span style="COLOR:green;"&gt;//std 32 bits mode&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;.Manual);&lt;/span&gt; 
&lt;p&gt;&lt;font face="verdana,geneva"&gt;créé la texture qui va contenir les LOD. Nous n&amp;#39;utilisons pas la classe Content pour la créer et nous aurons donc à la gérer nous même (nous reviendrons sur ce point plus loin). Une référence vers le device est bien évidemment donnée ainsi qu&amp;#39;une taille de 256*256. C&amp;#39;est à dire la taille du premier Level Of Detail. La valeur 6 représente le nombre de LOD que nous utilisons&lt;/font&gt;.&amp;nbsp;&lt;font face="Courier New"&gt;&lt;span style="COLOR:teal;"&gt;ResourceUsage&lt;/span&gt;.Dynamic&lt;/font&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;indique que nous laissons&amp;nbsp;le driver décider ou placer le buffer contenant les données de la texture. En général si il y&amp;#39;a la place, celui-ci est placé dans la mémoire AGP, sinon dans la mémoire vidéo, sinon en dernier cas dans la RAM. Un bon jeu sais&amp;nbsp;se référer à la taille mémoire pour placer les textures les plus&amp;nbsp;utilisées en AGP et les autres moins importantes dans la RAM afin d&amp;#39;optimiser les affichages (nous vérrons celà dans la quatrième partie de cet apprentissage).&amp;nbsp;Le paramètre&lt;/font&gt;&amp;nbsp;&lt;font face="Courier New"&gt;&lt;span style="COLOR:teal;"&gt;SurfaceFormat&lt;/span&gt;.Color&lt;/font&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;indique simplement que&amp;nbsp;la texture aura un format de type 32 bits standard (ARGB : 8bits pour l&amp;#39;alpha, 8 pour la composante Rouge, 8 pour le vert et 8 pour le bleu, soit 256 variations par composantes). Enfin &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;.Manual&lt;/font&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;précise que nous gérons nous même la vie de la texture (a nous de la recréer lorsqu&amp;#39;elle est &amp;quot;perdue&amp;quot;. Vient ensuite le chargement des 6&amp;nbsp;LODs :&lt;/font&gt;&amp;nbsp; &lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; texture256 = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\256&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; texture128 = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\128&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; texture064 = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\64&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; texture032 = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\32&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; texture016 = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\16&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt; texture008 = content.Load&amp;lt;&lt;span style="COLOR:teal;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:maroon;"&gt;&amp;quot;MipmapTextures\\8&amp;quot;&lt;/span&gt;);&lt;/span&gt; 
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Rien de compliqué ici. La valeur&lt;/font&gt;&amp;nbsp;&lt;font face="Courier New" color="#800000"&gt;&amp;quot;256&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;est le nom Asset de la texture et&lt;/font&gt; &lt;span style="COLOR:maroon;"&gt;&lt;font face="Courier New"&gt;&amp;quot;MipmapTextures&amp;quot;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;le path vers celle-ci (voir premier projet au début de ce chapitre).&amp;nbsp;Les instructions qui suivent créént le Mipmap. Mais qu&amp;#39;est ce qu&amp;#39;un Mipmap sur le plan technique ? Il s&amp;#39;agit (pour parler simplement) d&amp;#39;une sorte de liste chainée. Chaque texture à l&amp;#39;intérieur possède pour taille la moitiée de son prédécesseur et est deux fois plus grande que son successeur directe. La première texture de cette liste à la taille la plus importante, la dernière la plus petite. Cette liste va être &amp;quot;ratachée&amp;quot; à une texture qui va faire office de &amp;quot;pointeur&amp;quot;. Suivant le degré de détail voulue, la texture va pointer sur telle ou telle élément de la liste.&amp;nbsp;Créer cette structure en Xna/C# est relativement aisé. Il nous suffit d&amp;#39;associer une texture (notre pointeur) à un ensemble de buffers correspondant aux différents LODs. C&amp;#39;est les méthodes&amp;nbsp;GetData et&amp;nbsp;SetData qui vont nous permettre cela. Prenons exemple du chargement du buffer correspondant au troisième LOD :&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;array = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;[64 * 64];&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;texture064.GetData&amp;lt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&amp;gt;(array);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mainTexture.SetData&amp;lt;&lt;span style="COLOR:blue;"&gt;uint&lt;/span&gt;&amp;gt;(2, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;, array, 0, array.Length, &lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;.None);&lt;/span&gt; 
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;Première instruction, nous créeons un array de uint (entier non signés) qui va faire office de&amp;nbsp;buffer. La seconde instruction charge ce buffer à partir des données de la texture&amp;nbsp;ayant pour taille 64 par 64. Enfin, la troisième instruction associe ce buffer au troisième LOD (index 2) de la texture &amp;quot;pointeur&amp;quot; (&lt;/font&gt;&lt;font face="Courier New"&gt;mainTexture&lt;/font&gt;&lt;font face="verdana,geneva"&gt;). Le premier paramètre de&amp;nbsp; correspond au niveau de LOD voulu, le second correspond à un objet de type&lt;/font&gt; &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;Rectangle&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;pour indiquer la zone du buffer que nous remplissons (ici&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;&lt;font face="Courier New"&gt;null&lt;/font&gt;&lt;/span&gt; &lt;font face="verdana,geneva"&gt;donc nous chargeons tout le buffer). Nous passons ensuite le buffer lui-même, indiquons à partir de quel index nous le lisons et sa taille. Le dernier paramètre de type&lt;/font&gt; &lt;span style="COLOR:teal;"&gt;&lt;font face="Courier New"&gt;SetDataOptions&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;spécifie la manière dont on écrase le buffer déjà associé à ce LOD (si il y&amp;#39;en a un) : supprimé,&amp;nbsp;comblé ou&amp;nbsp;surchargé (soit respectivement&lt;/font&gt;&amp;nbsp;&lt;span style="FONT-SIZE:10pt;COLOR:teal;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;SetDataOptions&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;.Discard, &lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;.NoOverwrite, &lt;span style="COLOR:teal;"&gt;SetDataOptions&lt;/span&gt;.None&lt;/span&gt;&lt;font face="verdana,geneva"&gt;).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;La partie LOD de notre programme est terminée ! Ne reste plus qu&amp;#39;à gérer le déplacement sur le terrain de jeu et la modification des différents filtres à l&amp;#39;aide des touches clavier. Pour cela, une simple analyse de la méthode&lt;/font&gt;&amp;nbsp;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Update&lt;/span&gt; &lt;font face="verdana,geneva"&gt;vous suffira à ce stade de cos connaissances. Avant de lancer le programme, jetez juste un oeil à la méthode&lt;/font&gt; &lt;font face="Courier New"&gt;LoadGraphicsContent&lt;/font&gt;&amp;nbsp;:&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; Load your graphics content.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If loadAllContent is true, you should&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; load content from both ResourceManagementMode pools.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Otherwise, just&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; load ResourceManagementMode.Manual content.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;param name=&amp;quot;loadAllContent&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Which type of content to load.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;protected&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;override&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; LoadGraphicsContent(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt;&lt;font color="#000000"&gt; loadAllContent)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (loadAllContent)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;// TODO: Load any ResourceManagementMode.Manual content&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.GenerateMipmapTexture();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.GenerateMipmap();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;.GenerateMipmapCase();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._terrain.Texture = _sampleMipmapColor;&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Nous y plaçons le chargement de nos textures. Dans la mesure ou les 3 mipmaps sont chargés à l&amp;#39;aide de l&amp;#39;option&lt;/font&gt;&amp;nbsp;&lt;font face="Courier New"&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;.Manual&lt;/font&gt; &lt;font face="verdana,geneva"&gt;ce chargement se fait à l&amp;#39;extérieur du bloc conditionnel&lt;/font&gt; &amp;quot;&lt;font face="Courier New"&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (loadAllContent)&lt;/font&gt;&amp;quot;. &lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Il y&amp;#39;a deux&amp;nbsp;types d&amp;#39;appel à cette méthode dans&amp;nbsp;la vie d&amp;#39;une application Xna : le premier appel lors du lancement de l&amp;#39;application passe à cette méthode la valeur&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;&lt;font face="Courier New"&gt;true&lt;/font&gt;&lt;/span&gt;.&amp;nbsp;&lt;font face="verdana,geneva"&gt;De ce fait toutes les ressources sont chargés à la fois dans le bloc&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;&lt;font face="Courier New"&gt;if&lt;/font&gt;&lt;/span&gt; &lt;font face="verdana,geneva"&gt;et à l&amp;#39;extérieur. Le second appel intervient lorsqu&amp;#39;il y&amp;#39;a perte de ressources (après un redimentionnement ou une &amp;nbsp;réduction&amp;nbsp;de la fenêtre ... tout ce qui peut obliger le device graphique&amp;nbsp;à s&amp;#39;occuper d&amp;#39;une autre application au détriment de la notre), à ce moment là, Xna passe à la méthode&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;&lt;font face="Courier New"&gt;false&lt;/font&gt;&lt;/span&gt;.&amp;nbsp;&lt;font face="verdana,geneva"&gt;Seules les ressources en dehors du bloc conditionnel sont donc chargés : à ce stade les ressources&lt;/font&gt; &lt;font face="Courier New"&gt;&lt;span style="COLOR:teal;"&gt;ResourceManagementMode&lt;/span&gt;.Automatic&lt;/font&gt;&amp;nbsp;&lt;font face="verdana,geneva"&gt;ont déjà été rechargée automatiquement.Dans la même sens nous devons gérer nous même la libération de ces ressources dans la méthode&lt;/font&gt; &lt;font face="Courier New"&gt;UnloadGraphicsContent&lt;/font&gt;&amp;nbsp;:&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; Unload your graphics content.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If unloadAllContent is true, you should&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; unload content from both ResourceManagementMode pools.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Otherwise, just&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; unload ResourceManagementMode.Manual content.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Manual content will get&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; Disposed by the GraphicsDevice during a Reset.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;param name=&amp;quot;unloadAllContent&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;Which type of content to unload.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;protected&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;override&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt; UnloadGraphicsContent(&lt;/font&gt;&lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt;&lt;font color="#000000"&gt; unloadAllContent)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (unloadAllContent == &lt;/font&gt;&lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;content.Unload();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._sampleMipmapAuto.Dispose();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._sampleMipmapColor.Dispose();&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;font color="#000000"&gt;._sampleMipmapTexture.Dispose();&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;là encore à l&amp;#39;extérieur du bloc conditionnel.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Pour preuve déplacez les quatres instructions de la méthode de chargement dans le bloc&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;&lt;font face="Courier New"&gt;if&lt;/font&gt;&lt;/span&gt;. &lt;font face="verdana,geneva"&gt;Lancez le programme et agrandissez la fenêtre : vous obtiendez une belle erreur spécifiant que le programme essaye d&amp;#39;accéder à une texture supprimée. Et pour cause au redimentionnement de la fenêtre les textures sont perdues et sont donc libérée de la mémoire. Lorsque le programme reprend la main il essaye d&amp;#39;utiliser ces textures pour l&amp;#39;affichage et plante forcement. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="3"&gt;&lt;strong&gt;L&amp;#39;application&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Les touches de l&amp;#39;application sont les suivantes :&amp;nbsp; la touche &amp;#39;A&amp;#39; pour anisotope, &amp;#39;L&amp;#39; pour linéaire, &amp;#39;P&amp;#39; pour point, &amp;#39;G&amp;#39; pour Gaussian, &amp;#39;Q&amp;#39; pour Pyramidal, &amp;#39;N&amp;#39; pour aucun. Si la touche Shift est appuyée en même temps, le filtre s&amp;#39;applique en magnification, sinon, en minification. Si la touche Alt est appuyée, le filtre s&amp;#39;applique au Mipmap. Les touches fléchées permettent de se déplacer dans le monde. Les touches Page Haut et Page Bas permettent de prendre de l&amp;#39;altitude et de redescendre. Enfin les touche + et - augmentent le paramètre MaxAnisotropy (voir plus haut). Les mêmes touches avec Shift appuyé modifient le LodBias (voir plus haut). La touche espace ajoute une grille qui permet de bien discerner les cases du terrain de jeu (en fait le terrain est affiché une deuxième fois en mode WireFrame). Enfin les touches F1, F2, F3 affichent respectivement les texture de couleur, sol, damier.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Au lancement de l&amp;#39;application, vous obtenez l&amp;#39;affichage suivant :&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622545/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Magnifiquement ... rouge, et pour cause : le mipmap n&amp;#39;est pas activé (None). Dans ce cas, le programme n&amp;#39;utilise que le LOD 0 qui correspond à la texture 256*256 qui est rouge. Appuyez sut les touches Alt et A pou lancer le mipmapping avec le filtre anisotropique. L&amp;#39;écran se change en :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622580/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;Les différentes strates que vous voyez là correspondent aux 6 textures de LOD que nous avons chargée. On remarque parfaitement que suivant la distance à la caméra, les différentes cases du terrain de jeu affichent une texture adaptée à leur taille à l&amp;#39;écran :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622649/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Maintenant en maintenant la touche Shift appuyée appuyez sur la touche + (Add). Ceci a pour conséquence d&amp;#39;augmenter le Bias et donc le passage au LOD suivant :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622651/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Shift avec la touche - (Substract) réduit au contraire le Bias et prolonge la vie du LOD 0 :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622652/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Le filtre mipmap que nous avons utilisé ici (Anisotropique) est sans doute le meilleur. Le passage d&amp;#39;un Lod à un autre se fait de manière progressive et douce. Prennez un chouïa d&amp;#39;altitude à l&amp;#39;aide de la touche Page Haut. Si vous affichez la grille à l&amp;#39;aide de la touche Espace vous rendrez compte que cette transition ne dépend absolument pas&amp;nbsp;de la case mais bien de la distance du &amp;quot;point&amp;quot; dans l&amp;#39;espace qui recoit la texture à la caméra :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622670/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Pour comprendre la puissance du filtre anisotropique, changez le filtre en filtre Point en appuyant sur les touches Alt + P. L&amp;#39;affichage qui apparait alors est rédibitoire ... :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622671/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Passons à un autre type de texture, la texture sol. Appuyez sur la touche F2 et annulez tout mipmaping à l&amp;#39;aide de la combinaisons Alt +&amp;nbsp; N. Vous obtenez l&amp;#39;affichage suivant :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622693/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Aucun mipmapping et aucun filtre en mignification donne un résultat plus que décevant. Améliorons tout cela : Ajoutez un mipmapping avec filtre point (combinaison Alt + P) :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622695/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;L&amp;#39;affichage est meilleur mais comme le montrent les deux lignes rouges nous voyons parfaitement les lignes de transition entre un Lod et un autre (avec la texture de couleur c&amp;#39;est encore plus flagrant). Et pour cause : le filtre point pour le mipmapping est des plus simples : lorsqu&amp;#39;il y&amp;#39;a besoin de faire une transition vers un autre LOD il utilise directement les texels de la texture voulue sans essayer de rendre la transition progressive. Si vous vous déplacez à l&amp;#39;aide des touches fléchées vous remarquez encore mieux cette transition. Nous pouvons toujours appliquer un filtre lineaire en mignification (touche L) :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622712/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;mieux, mais la transition est toujours visible... Si on applique maintenant un filtre linaire pour le mipmapping (Alt + L), le rendu est quasi parfait : &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622696/original.aspx" width="635" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;On parle dans le cas du mipmapping avec filtre linaire de &amp;quot;filtrage trilineaire&amp;quot;. Ce filtrage effectue une moyenne progressive entre les texels des textures concernées par la transitions d&amp;#39;un LOD à un autre. Même si vous vous déplacez, vous ne verrez pas la transition d&amp;#39;un LOD à un autre. A noter que le filtre trilinaire ou le filtre anisotropique donnent pratiquement le même résultat dans la mesure où nous affichons des formes relativement &amp;quot;droites&amp;quot;.&lt;/p&gt;
&lt;p&gt;Revenez à un affichage sans filtre (touche N et shift N) et sans mipmapping (touche Alt + N). Affichez la texture Damier avec F3 :&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622749/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;On voit que l&amp;#39;affichage n&amp;#39;arrive absolument pas a gérer les lignes horizontales et verticales de la texture. Combien même vous affichez un filtre Linaire en mignification et magnification on garde un affichage desastreux.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622750/original.aspx" width="635" border="2" alt="" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;mais si vous appliquez un&amp;nbsp;filtre mipmapping en anisotropie l&amp;#39;affichage est parfait :&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="WIDTH:635px;HEIGHT:634px;" height="634" src="http://msmvps.com/photos/valentin/images/622751/original.aspx" width="635" align="absMiddle" border="2" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana"&gt;Nous en avons terminé avec le mipmapping. Un point très important pour la fluidité et la beauté de nos applications 3D. Continuez à vous familiariser avec cette application qui met parfaitement en évidence les filtres de mignification et magnification et les filtres de mipmapping.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva" size="4"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&lt;span style="COLOR:teal;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:teal;"&gt;&lt;font color="#000000"&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;&lt;font face="verdana,geneva"&gt;&lt;img title="telecharger" style="WIDTH:24px;HEIGHT:24px;" height="24" alt="telecharger" src="http://www.adcworks.com/images/content/icon-download.gif" width="24" align="middle" /&gt;&amp;nbsp;Vous pouvez télécharger le sample, les deux moteurs et les exercices &lt;/font&gt;&lt;a class="" href="http://msmvps.com/files/folders/valentin/entry582110.aspx" target="_blank"&gt;&lt;font face="verdana,geneva"&gt;ici&lt;/font&gt;&lt;/a&gt;&lt;font face="verdana,geneva" color="#000000"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font face="verdana,geneva"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;img style="WIDTH:24px;HEIGHT:24px;" height="24" src="http://msmvps.com/photos/valentin/images/887626/original.aspx" width="24" align="absMiddle" border="1" alt="" /&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;Retourner au &lt;/font&gt;&lt;a class="" href="http://msmvps.com/blogs/valentin/archive/2007/03/30/tutoriaux-xna-sommaire-g-n-ral.aspx"&gt;&lt;font style="BACKGROUND-COLOR:#ffff00;"&gt;sommaire des cours&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;/font&gt;&lt;/span&gt;&lt;em&gt;&lt;strike&gt;&lt;font face="verdana,geneva"&gt;&amp;lt;/ en construction / under construction&amp;gt;&lt;/font&gt;&lt;/strike&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;"&gt;&lt;font face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=570799" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Texture/default.aspx">Texture</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Coding/default.aspx">Coding</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/LOD/default.aspx">LOD</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Blend/default.aspx">Blend</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/XNA/default.aspx">XNA</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Special+Effects/default.aspx">Special Effects</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Filter/default.aspx">Filter</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Mipmap/default.aspx">Mipmap</category></item><item><title>Les MipMaps</title><link>http://msmvps.com/blogs/valentin/archive/2007/01/12/les-mipmaps.aspx</link><pubDate>Fri, 12 Jan 2007 13:06:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:486055</guid><dc:creator>valentin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=486055</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2007/01/12/les-mipmaps.aspx#comments</comments><description>&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Les mipmaps permettent une amélioration flagrante de la qualité de rendu des textures en fonction de leur distance par rapport à la position de la caméra qui filme la scène. Prenons la place d’un programme de jeu qui veut afficher un mur. Ce dernier utilisera un cube avec une texture de mur. Etant très maniaque ce programmeur va utiliser une texture de grande qualité afin d’obtenir un mur réaliste. Certes pour une vue de près l’effet voulu sera réussit, mais imaginez le gâchis pour une vue de loin&amp;nbsp;: non seulement Direct3D va tenter d’afficher la forme avec une texture importante, en réduisant sa taille arbitrairement le tout pour un rendu moyen. Quelle perte de performance et de qualité&amp;nbsp;!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Il aurait mieux valu, lorsque la caméra s’éloigne faire en sorte que une texture deux fois moins grande soit utilisée. Moins grande certes mais réalisée par le programmeur ou selon les désires du programmeur&amp;nbsp;! &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Pourquoi créer ses propres textures alors&amp;nbsp;les filtres pouvaient aisément réduire une image. Tout simplement parce que les filtres ne sont pas intelligents&amp;nbsp;: ils réalisent leur tâche bêtement sans se soucier du contenu de la texture ni de l’information qu’elle véhicule. Faites ce test&amp;nbsp;: ouvrez votre logiciel de dessin, créez une image avec un texte et réduisez le de 50% avec un filtre bilinéaire.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Vous obtenez quelque chose de la sorte&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;IMG src="http://msmvps.com/photos/valentin/images/486000/original.aspx" align=absMiddle border=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Times size=3&gt;Figure&amp;nbsp;1 — En bas 50% en bilinéaire&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;L’altération de l’information est flagrante&amp;nbsp;! Aucun filtre ne peut avoir une vue globale de la texture dans la mesure où ils travaillent au niveau des pixels. Dans le même sens aucun filtre ne peut quantifier l’information véhiculée par la texture et tenter de la sauvegarder au détriment des informations moins importantes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;L’homme, lui, le peut … A lui de créer les différentes textures correspondant à cette perte d’information. Il doit déterminer à partir de quel point le message de la texture devient illisible et créer une nouvelle texture adaptée qui continue à donner le message dans une nouvelle échelle. Au processus de mipmapping de substituer la texture originelle par la nouvelle texture plus petite quand cela devient nécessaire.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times size=3&gt;&lt;IMG style="WIDTH:467px;HEIGHT:272px;" height=272 src="http://msmvps.com/photos/valentin/images/486003/original.aspx" width=467 align=absMiddle border=2&gt;&lt;BR&gt;Figure 2 — La texture réduite à la main est plus lisible.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H2 style="MARGIN:14pt 0cm 8pt;"&gt;&lt;FONT face=Times size=3&gt;1 Présentation&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;L’ensemble des textures successivement réduites forme un Mipmap. MIP correspond à «&amp;nbsp;Multi in parvo&amp;nbsp;» en latin, c'est-à-dire «&amp;nbsp;de nombreuse chose au même endroit&amp;nbsp;». Chaque texture de cet ensemble est un niveau de MIPmap ou LOD (Level Of Detail). Chaque niveau doit avoir pour hauteur et largeur la moitié de la hauteur et largeur du niveau précédent. Le dernier niveau a bien évidemment au moins un coté égal à 1. Sachant que la taille conseillée pour une texture est de 256 pixels il y’a donc au maximum 9 LOD (256 puis&amp;nbsp;128 puis 64, 32, 16, 8, 4, 2 et 1).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Times&gt;Le mipmapping est très utile dans la mesure ou il permet de préserver l’information dans le sens voulu par le développeur mais aussi en évitant à la carte graphique l'affichage de grosses textures lorsque ce n'est pas nécessaire.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN:22pt 0cm 12pt;"&gt;&lt;SPAN style="mso-ansi-language:FR;"&gt;&lt;FONT face=Times&gt;&lt;FONT size=2&gt;Filtre trilinéaire et mipmapping&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Les transitions entre les différents LOD sont souvent visibles lorsqu’on regarde au loin. Le processus de mipmapping est heureusement capable de filtrer deux niveaux de mipmap consécutif pour en calculer la moyenne de couleur. La transition devient pratiquement invisible. Il s’agit là du filtre bilinéaire, mais, dans la mesure où il porte sur une transition entre deux texture on parle de filtrage trilinéaire.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 style="MARGIN:22pt 0cm 12pt;"&gt;&lt;SPAN style="mso-ansi-language:FR;"&gt;&lt;FONT face=Times size=2&gt;LOD bias&lt;/FONT&gt;&lt;/SPAN&gt;&lt;A class="" title=_ftnref1 style="mso-footnote-id:ftn1;" href="http://msmvps.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn1" name=_ftnref1&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN style="mso-special-character:footnote;"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:15pt;FONT-FAMILY:Times;mso-ansi-language:EN-US;mso-fareast-font-family:'Times New Roman';mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;&lt;FONT size=2&gt;[1]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT size=5&gt;&lt;FONT face=Times&gt;&lt;SPAN style="mso-ansi-language:FR;"&gt; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Il arrive que pour la beauté du jeu il faille garder un LOD plus longtemps que prévu en retardant le passage à un LOD inférieur lorsque la caméra s’éloigne. C’est le LOD bias qui permet de réaliser cette opération. Si une surface s’éloigne de l’utilisateur, augmenter le LOD bias revient à retarder l’utilisation du LOD inférieur. Au contraire, en diminuant sa valeur, on passe plus rapidement aux LOD inférieurs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&lt;STRONG&gt;2. Notre Sample&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT size=2&gt;Pour mettre en évidence tout ce que nous venons d’apprendre, rien de tel qu’un bon exemple en 3D. Tout comme le code précédent, nous allons faire en sorte de pouvoir modifier toutes les propriétés liées au mipmapping par l’intermédiaire des touches F1 à F8. Un mipmap est un ensemble de texture dont la taille décroît. Il est nécessaire de créer cet ensemble. Pour cela les textures suivantes seront utilisées :&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/P&gt;&lt;IMG style="WIDTH:800px;HEIGHT:600px;" height=600 src="http://msmvps.com/photos/valentin/images/486026/original.aspx" width=800 align=absMiddle border=2&gt; 
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT size=2&gt;Figure 3—Textures de couleurs...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Times&gt;Il s’agit d’une série d’image en couleur dont la taille décroît. Les couleurs permettront d’aisément discerner les différents LOD lors des modifications effectuées par l’utilisateur dans le programme. De plus pour avoir une idée plus précise du rendu à l’écran, un autre mipmap sera utilisé, cette fois ci pas de couleur, mais un motif&amp;nbsp;: un sol pavé.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&lt;IMG style="WIDTH:800px;HEIGHT:600px;" height=600 src="http://msmvps.com/photos/valentin/images/486025/original.aspx" width=800 align=absMiddle border=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Times&gt;Figure 4— …Textures de sol.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Pour l’affichage, un plan fixe formé de 25*25 cases sera dessiné à l’écran. De même , un petit moteur de déplacement à la manière des Quake like sera programmé dans le but de pouvoir déplacer la caméra et admirer les conséquences sur les modifications de LOD.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Prêt&amp;nbsp;? C’est parti&amp;nbsp;!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;3. Etude du code source&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Le fichier principal commence par la déclaration de deux structures&amp;nbsp;: une structure Vertex définissant les propriétés des vertex utilisés dans le programme, et une énumération nommée Filtres qui nous permettra de donner un nom aux filtres voulus par l’utilisateur dans le programme.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Vient ensuite la déclaration de 4 Textures&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// Texture pour le mipmapping&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;Texture textureMipMappingCouleur;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// Texture pour le mipmapping&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;Texture textureMipMappingSolContour;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// Texture pour le mipmapping&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;Texture textureMipMappingSolPur;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;/// Texture pour le mipmapping actuellement utilisée&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;Texture texture;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;TEXT-INDENT:0cm;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Ces textures sont en fait des mipmap. Elles posséderont différents LOD. En fait une texture simple est un mipmap avec un seul LOD&amp;nbsp;: le niveau 0. Nous aurons un mipmap pour l’étude sur les textures colorisées, un mipmap pour l’étude sur des textures de sol avec contour, et encore un pour les textures de sol sans contour. La dernière texture est en fait le mipmap actuellement affiché par le programme. Il pointera sur l’un des trois mipmap précédemment énumérés.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Terminons les déclarations par différentes variables de sauvegarde des paramétrages de l’utilisateur dans sa découverte du mipmapping&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// Filtres de base, on commence en linéaire&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;Filtres&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;magFilterType&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;= Filtres.Linear;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;Filtres&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;minFilterType&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;= Filtres.Linear;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;Filtres&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;mipFilterType&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;= Filtres.Linear;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// Niveau d'anisotropy&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;int&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;anisotropy&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;= 1;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// Level de détail à utiliser&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;float mipMapLodBias = 0.0f;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// Inidique qu'une mise à jour doit être faite&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;bool mettreAJour = true;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Trois variables de type Filtre pour les filtres utilisés avec la magnification, minification et le mipmap. Le niveau de l’anisotropie, la valeur du LOD bias. Un booléen enfin pour déterminer si l’utilisateur a modifié quelque chose.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Ce sont ChargementTexturesEtMipMap() et ChargementTexturesMipMap() qui vont initialiser les mipmap.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;La première se présente ainsi&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/// Charge les mipmap couleur, sol contour, et sol pur&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public void ChargementTexturesEtMipMap()&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.textureMipMappingCouleur = CreateTexture( device, "base.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;this.textureMipMappingSolContour = CreateTexture( device, "scbase.bmp", Format.A8R8G8B8);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.textureMipMappingSolPur = CreateTexture( device, "sbase.bmp", Format.A8R8G8B8);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ChargementTexturesMipMap(textureMipMappingCouleur, "");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ChargementTexturesMipMap(textureMipMappingSolContour, "sc");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ChargementTexturesMipMap(textureMipMappingSolPur, "s");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.texture = this.textureMipMappingCouleur;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Elle créé les trios textures vue précédemment avec base.bmp, scbase.bmp et sbase.bmp. Chaque texture dans le programme possède le même nom mais avec un préfixe différent&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP:0cm;"&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face=Times&gt;Pas de préfixe pour les textures du mipmap colorisé&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face=Times&gt;«&amp;nbsp;sc&amp;nbsp;» pour le mipmap sol avec contour&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face=Times&gt;«&amp;nbsp;s&amp;nbsp;» pour le sol pur.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Ces trois initialisations ne servent qu’à créer la texture car en fait leur contenu sera effacé par les différents LOD du mipmap.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Les trois instructions suivantes chargent le mipmap de chacun d’entre elles&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;ChargementTexturesMipMap(textureMipMappingCouleur, "");&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;ChargementTexturesMipMap(textureMipMappingSolContour, "sc");&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;ChargementTexturesMipMap(textureMipMappingSolPur, "s");&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;La méthode ChargementTextureMipMap créée dans notre programme accepte en paramètre, la texture a charger en mipmap et le préfixe des textures à charger.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;La méthode se termine enfin en faisant pointer la propriété texture sur le mipmap qui sera affiché au démarrage.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Analysons ChargementTexturesMipMap&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/// Chargement des textures mipmap&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;/// &amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public void ChargementTexturesMipMap(Texture mipmap, string préfixe)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Texture[] textures = new Texture&lt;img src="http://msmvps.com/emoticons/emotion-14.gif" alt="Devil" /&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// Charge nos 6 textures&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures[0] = CreateTexture( device, préfixe +"256.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures[1] = CreateTexture( device, préfixe +"128.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures[2] = CreateTexture( device, préfixe +"64.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures[3] = CreateTexture( device, préfixe +"32.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures[4] = CreateTexture( device, préfixe +"16.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures[5] = CreateTexture( device, préfixe +"8.bmp", Format.A8R8G8B8);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//création des surfaces pour le copier/coller&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Surface destination = null;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Surface source&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;= null;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;int i;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;for( i = 0; i &amp;lt; 6; ++i )&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//pointer sur la surface texture du LOD i&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;destination = texture.GetSurfaceLevel(i);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//pointer vers la surface de la texture i&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;source = textures&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.GetSurfaceLevel(0);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//charger dans destination la source, sans filtre&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SurfaceLoader.FromSurface(destination, source, Filter.None, 0); &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//Libérer les textures temporaires utilisées&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;for( i = 0; i &amp;lt; 6; ++i )&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;textures&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.Dispose();&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;La méthode commence par charger dans un tableau de 6 textures les six LOD du mipmap. Elle va ensuite, charger à chaque LOD du mipmap passé à la méthode les 6 textures chargées&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;for( i = 0; i &amp;lt; 6; ++i )&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//pointer sur la surface texture du LOD i&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;destination = mipmap.GetSurfaceLevel(i);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//pointer vers la surface de la texture i&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;source = textures&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.GetSurfaceLevel(0);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//charger dans destination la source, sans filtre&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SurfaceLoader.FromSurface(destination, source, Filter.None, 0); &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Pour les 6 itérations, on fait pointer destination sur le LOD du mipmap. On fait pointer source sur le LOD 0 de la texture de la case du tableau lu. Chaque texture de ce tableau n’est pas un mipmap et une seule texture, il n’y a donc qu’un LOD&amp;nbsp;: celui du niveau 0. A l’aide de la méthode FromSurface de la classe utilitaire SurfaceLoader on place dans destination le contenu de source. Le tout sans filtrage et avec une clé de couleur de transparence noire (la valeur 0). En gros cette boucle chaque dans le mipmap a chacun des 6 LOD, les 6 textures chargées au départ.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Cette opération étant effectuée, on peut libérer la mémoire prise par le tableau.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;La création de mipmap est une opération relativement facile (on perd plus de temps à créer les textures des LOD&amp;nbsp;!). Pourquoi s’en passer quand on voit le gain de performances et de qualité visuelle&amp;nbsp;?&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Encarttexte style="MARGIN:6pt 1cm 1pt 2cm;"&gt;&lt;FONT face=Times&gt;&lt;STRONG&gt;Remarque&lt;/STRONG&gt;&amp;nbsp;: Pour déterminer le nombre de level d’un mipmap utilisez la propriété LevelCount de cette manière&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Encarttexte style="MARGIN:6pt 1cm 1pt 2cm;"&gt;&lt;FONT face=Times&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;int nombreLOD = mipmap.LevelCount;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Trois méthodes, travaillent sur le sampler. Elles se présentent comme ceci&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;private void SetMagnificationFilter()&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;{&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if( this.magFilterType == Filtres.None )&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;this.device.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.None);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if( this.magFilterType == Filtres.Point )&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.device.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.Point);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if( this.magFilterType == Filtres.Linear )&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.device.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.Linear);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if( this.magFilterType == Filtres.Anisotropic )&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.device.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.Anisotropic);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Il existe aussi 2 autres méthodes similaires SetMinificationFilter et SetMipMapFilter qui travaillent de la même manière.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Les modifications sont effectuées par le groupe d’instructions&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;this.SetMinificationFilter();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;this.SetMagnificationFilter();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;this.SetMipMapFilter();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;device.SetSamplerState(0, SamplerStageStates.MaxAnisotropy, anisotropy );&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;device.SetSamplerState(0, SamplerStageStates.MipMapLevelOfDetailBias, mipMapLodBias );&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=listinginter style="MARGIN:0cm 0cm 0pt 8.5pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;FONT face="Courier New"&gt;this.Text = "Minification = " + this.minFilterType + " | Magnification = " + this.magFilterType + " | MipMap = " + this.mipFilterType + " | MaxAnisotropy = " + anisotropy + "|LOD = " + mipMapLodBias;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:EN-GB;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Les trois appels de methodes vues précédemment, suivit par deux modifications du sampler pour mettre à jour l’anisotropie et le LOD bias.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;La dernière instruction mets à jour le titre de la fenêtre pour pouvoir connaître l’état des filtres.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:FR;"&gt;&lt;FONT face=Times&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;4.&amp;nbsp;Touches de l’exécutable&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Page Haut/Bas&amp;nbsp;: Déplacement en hauteur.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Flèches gauche/droite&amp;nbsp;: Tourner la tête.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Flèches haut/bas&amp;nbsp;: avancer/reculer.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;+/-&amp;nbsp;: Regarder en haut/en bas&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Touche numérique 1/2/3&amp;nbsp;: Mipmap colorisé/sol avec contour/sol pur.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;F1&amp;nbsp;: modification du filtre de minification.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;F2&amp;nbsp;: modification du filtre de magnification.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;F3&amp;nbsp;: modification du filtre de mipmapping.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;F4/F5&amp;nbsp;: modification du LOD bias.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;F6/F7&amp;nbsp;: modification de la valeur de l’anisotropie.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;SPAN style="mso-ansi-language:FR;"&gt;&lt;FONT face=Times&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;5.&amp;nbsp;Etude de l’exécutable&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Le code du programme étant compris voyons ce qu’il peut nous apporter. Lancez le, l’écran au démarrage devrait être le suivant&amp;nbsp;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&lt;IMG style="WIDTH:648px;HEIGHT:514px;" height=514 src="http://msmvps.com/photos/valentin/images/486038/original.aspx" width=648 align=absMiddle border=2&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Times&gt;Figure 5—On remarque bien les plans translatés et le mipmapping&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;En se déplaçant en avant en arrière on remarque les ondes des LOD suivre et s’avancez ou reculer. De même en s’approchant du sol, les LOD avec les index les plus petit (dont les plus détaillés) apparaissent (notamment la texture rouge et bleu). &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;En hauteur, la touche F1 qui modifie le filtre de minification agit. Le filtre point effectue ainsi une opération de mauvaise qualité. La minification agit car en hauteur les différents plans du sol ont une taille inférieure à la taille de la texture. Au sol si la minification ne fait rien, au contraire la magnification agit. Même remarque&amp;nbsp;: le filtre point dégrade l’affichage (dommage, c’est le plus rapide).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;&lt;IMG style="WIDTH:261px;HEIGHT:319px;" height=319 src="http://msmvps.com/photos/valentin/images/486039/original.aspx" width=261 align=absMiddle border=2&gt;&lt;BR&gt;Figure 6—Point et Lineaire … le choix est aisé.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Jouons maintenant avec le mipmapping (touche F3). Si nous prenons le filtre None (qui desactive le mipmapping) évidemment le sol devient rouge&amp;nbsp;: il n’y a plus qu’une texture dans le mipmap. Avec le filtre point, on obtient un affichage certes hideux, mais très intéressant dans la mesure où on détermine bien les différents LOD. On peut passer en mode sol pur pour discerner au mieux l’effet dans un jeu. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&lt;IMG style="WIDTH:384px;HEIGHT:600px;" height=600 src="http://msmvps.com/photos/valentin/images/486041/original.aspx" width=384 align=absMiddle border=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Times&gt;Figure 7—Le mipmapping en mode point est … à éviter.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Avec un filtre Linéaire ou Anisotropique les différences de LOD s’estompent. Jouons maintenant pour terminer avec le LOD bias. Il permet de retarder ou s’accélérer le passage à un autre LOD.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;&lt;BR&gt;&lt;IMG style="WIDTH:648px;HEIGHT:514px;" height=514 src="http://msmvps.com/photos/valentin/images/486043/original.aspx" width=648 align=absMiddle border=2&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;FONT face=Times&gt;Figure&amp;nbsp;8 —LOD bias = 0&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;FONT face=Times&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;IMG style="WIDTH:648px;HEIGHT:514px;" height=514 src="http://msmvps.com/photos/valentin/images/486047/original.aspx" width=648 align=absMiddle border=2&gt;&lt;BR&gt;Figure 9—LOD bias = 1&amp;nbsp;: on est plus rapidement à des LOD moins détaillés&lt;/P&gt;&lt;/FONT&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&lt;IMG style="WIDTH:648px;HEIGHT:514px;" height=514 src="http://msmvps.com/photos/valentin/images/486048/original.aspx" width=648 align=absMiddle border=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;FONT face=Times&gt;Figure 10—LOD bias = -3&amp;nbsp;: le LOD détaillé en face reste affiché à une distance plus élevé de la caméra.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Times&gt;Ce petit programme d’exemple devrait encore avoir éclaircit nombre de point difficiles à assimiler (notamment les filtres). Quelqu’un qui maîtrise bien les fonctionnalités de cet utilitaire pourra tenter de discerner les nuances des filtres plus seulement avec le mipmap colorisé.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times&gt;&lt;STRONG&gt;Télécharger le Sample&lt;/STRONG&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;FONT face=Times size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Textecourant1er style="MARGIN:0cm 0cm 1pt;"&gt;&lt;o:p&gt;&lt;IMG title=telecharger style="WIDTH:24px;HEIGHT:24px;" height=24 alt=telecharger src="http://www.adcworks.com/images/content/icon-download.gif" width=24 align=middle&gt;&amp;nbsp;&lt;FONT face="times new roman,times"&gt;Vous pouvez télécharger le sample&lt;/FONT&gt; &lt;A class="" href="http://msmvps.com/files/folders/valentin/entry486200.aspx" target=_blank&gt;&lt;FONT face="times new roman,times" color=#000000&gt;ici&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="times new roman,times" color=#000000&gt;.&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;DIV style="mso-element:footnote-list;"&gt;&lt;BR&gt;&lt;FONT face=Times size=3&gt;
&lt;HR align=left&gt;
&lt;/FONT&gt;
&lt;DIV id=ftn1 style="mso-element:footnote;"&gt;
&lt;P class=MsoFootnoteText style="MARGIN:0cm 0cm 0pt;"&gt;&lt;A class="" title=_ftn1 style="mso-footnote-id:ftn1;" href="http://msmvps.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref1" name=_ftn1&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="mso-special-character:footnote;"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Times;mso-ansi-language:FR;mso-fareast-font-family:'Times New Roman';mso-fareast-language:FR;mso-bidi-language:AR-SA;"&gt;[1]&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Times&gt; Bias peut être traduit par&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;correction ou affinage ici..&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=486055" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/valentin/archive/tags/Texture/default.aspx">Texture</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Coding/default.aspx">Coding</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Optimization/default.aspx">Optimization</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/LOD/default.aspx">LOD</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://msmvps.com/blogs/valentin/archive/tags/Direct+3D/default.aspx">Direct 3D</category></item><item><title>Progressive Mesh (PMesh) / MultiResolutionMesh (MRM) in Managed DirectX</title><link>http://msmvps.com/blogs/valentin/archive/2006/12/29/progressive-mesh-pmesh-multiresolutionmesh-mrm-in-managed-directx.aspx</link><pubDate>Fri, 29 Dec 2006 12:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:458052</guid><dc:creator>valentin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/valentin/rsscomments.aspx?PostID=458052</wfw:commentRss><comments>http://msmvps.com/blogs/valentin/archive/2006/12/29/progressive-mesh-pmesh-multiresolutionmesh-mrm-in-managed-directx.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;L'utilisation de MRM est une véritable merveille pour accroître de manière significative les performances de ses applications. Le principe est simple&amp;nbsp;: transformer un model 3D détaillé et formé de très nombreux polygones en une version allégée utilisant moins de faces mais aillant un aspect aussi similaire que possible.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Cette technique est la plupart du temps couplée avec la camera pour réduire proportionnellement la qualité du modèle 3D en fonction de la distance à laquelle il se trouve de la camera.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Au final, nous pouvons ainsi grappiller des FPS et libérer le GPU en lui évitant d’afficher des modèles détaillés au loin, là ou une version grandement allégée donne le même résultat à l’écran. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;L'image suivant explicite cela :&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;IMG title="La porche a 25% donne le même affichage a grande distance que le modèle a 100%." style="WIDTH:650px;HEIGHT:172px;" height=172 alt="La porche a 25% donne le même affichage a grande distance que le modèle a 100%." src="http://msmvps.com/photos/valentin/images/458037/original.aspx" width=650&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Microsoft nous a gratifiés d'une classe &lt;B style="mso-bidi-font-weight:normal;"&gt;ProgressiveMesh&lt;/B&gt; efficace qui répond spécifiquement à ce besoin. Cette classe possède pourtant quelques lacunes : &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP:0cm;"&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Elle est lourde à charger.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Elle ne peut pas se charger de manière asynchrone.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Elle ne permet pas un contrôle de l’opération de «&amp;nbsp;réduction&amp;nbsp;» de vertices.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l1 level1 lfo1;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Elle ne permet pas de gérer les vertices forts (vertices qui ne doivent pas être supprimés lors d’une opération de réduction).&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Je vous invite d'ailleurs à regarder le sample fourni avec le SDK DirectX.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Les MRM occupent une place prépondérante dans mon moteur 3D : Je les utilise&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;pour libérer du traitement GPU sur l’affichage des objets lointains&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;et aussi dans l'occlusion culling (l'occlusion consiste à supprimer de l'affichage les objets qui sont cachés par d'autres objets nous y reviendrons dans un autre post). Avant l'utilisation des MRM mon jeu affichait vaillamment 60 FPS pour à peu près 40000 faces affichées. C'est loin d'être mauvais, mais proche d'être bon… Je n'utilisais pas encore l'affichage de lacs, d'effets spéciaux, d'IA, d'effets météorologiques… Au final je serais descendu en deçà de la barre fatidique des 30 FPS. Après cette technique et avant l’utilisation du culling je suis revenu à 80fps.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Avant de continuer il convient de tester votre motivation à utiliser un algorithme autre que ceux qui existent déjà sur le "marché". Je pense là bien entendu à la classe ProgressiveMesh de DirectX. Pour ma part plusieurs raisons m'ont poussées à utiliser mon propre code plutôt que celui de Microsoft.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP:0cm;"&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Le résultat de la classe ProgressiveMesh pour une portion de terrain ne m'allait pas du tout (mes portions sont carrés, la réduction réduisait la surface de ces carrés mais aussi leur forme !).&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Je voulais avoir un contrôle absolu sur mon code.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Je voulais être capable de pouvoir ajouter des effets sans contraintes à la réduction de faces.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo2;tab-stops:list 36.0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Enfin je voulais avoir un chargement asynchrone&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;FONT face="times new roman,times"&gt;L'algorithme&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;J'ai donc cherché un moyen de réduire les meshes que j'affichais. J'ai d'abord porté mon choix sur les régions de mon terrain de jeu. Un terrain de jeu dans mon moteur est découpé en X * Y régions carrées. Une région est composée de 32*32 cases soit 1024 faces. Je suis donc parti sur une réduction du nombre de cases. Le premier niveau de réduction m'affichait ainsi 16*16 carrés pour une région. Et ainsi de suite. L'algorithme pour faire ce travail n'était pas trop dur. Il souffrait pourtant de grosses lacunes : les carrés qui disparaissaient pouvaient correspondre au sommet d'un monticule à l'écran, le monticule semblait ainsi translaté par la réduction de faces.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Je n'avais pas de niveaux intermédiaires entre 16*16 et 32*32. La région semblait ainsi soudainement détériorée. Enfin, cet algorithme ne fonctionnait que pour des régions, le résultat pour un arbre ou un personnage était inexploitable. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Je me suis donc tourné vers Google à l'aide des mots clés "&lt;I style="mso-bidi-font-style:normal;"&gt;MRM algorithme&lt;/I&gt;". J'ai étudié un grand nombre de travaux de chercheurs et de passionnés et j'ai retenu la méthode de Stan Melax parce qu'à priori la meilleure et, cerise sur le gâteau, l'une des plus simples. Melax se base lui-même sur les travaux de H.Hoppes, un développer de MSR (Microsoft Research) dont est issue vraisemblablement l'algorithme se trouvant derrière la classe ProgressiveMesh de Direct3D. Cet algorithme vise a réduire la complexité d'un model 3D par l'intermédiaire de fusions de vertices. S'ensuit :&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;La suppression des triangles qui possèdent à la fois les vertices &lt;I style="mso-bidi-font-style:normal;"&gt;u&lt;/I&gt; et &lt;I style="mso-bidi-font-style:normal;"&gt;v&lt;/I&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;La mise à jour des triangles qui utilisaient &lt;I style="mso-bidi-font-style:normal;"&gt;u&lt;/I&gt; sur l'un de leurs trois points afin qu'ils utilisent &lt;I style="mso-bidi-font-style:normal;"&gt;v&lt;/I&gt; à la place.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;La suppression du vertex &lt;I style="mso-bidi-font-style:normal;"&gt;u&lt;/I&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&lt;IMG title="A chaque réduction de complexité, deux vertices u et v sont sélectionnés et l'un deux est &amp;quot;fusionné&amp;quot; avec l'autre (ici respectivement u et v). " style="WIDTH:476px;HEIGHT:766px;" height=766 alt="A chaque réduction de complexité, deux vertices u et v sont sélectionnés et l'un deux est &amp;quot;fusionné&amp;quot; avec l'autre (ici respectivement u et v). " src="http://msmvps.com/photos/valentin/images/458021/original.aspx" width=476&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Le processus est répété jusqu'à atteindre le nombre de vertices ou de faces voulu.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;FONT face="times new roman,times"&gt;Choix de u et v&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Cette méthode est relativement simple sur le papier et réduit effectivement sans grandes difficultés un model 3D. Il ne faut pourtant pas crier victoire trop vite : j'ai indiqué au départ qu'il fallait que le model "réduit" garde une apparence similaire au model complexe originel. Il convient donc de choisir avec intelligence les sommets u et v à fusionner avec de provoquer la plus fine modification visuelle à l'écran. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&amp;nbsp;&lt;IMG title="Le choix du vertex est important !" style="WIDTH:673px;HEIGHT:510px;" height=510 alt="Le choix du vertex est important !" src="http://msmvps.com/photos/valentin/images/464808/original.aspx" width=673 align=middle&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;FONT face=Arial&gt;&lt;FONT size=1&gt;&lt;EM&gt;Le choix du sommet à supprimer est important pour garder une apparence aussi similaire que possible à l'original (image extraite de l'article de Stan Melax avec l'aimable autorisation de l'auteur)&lt;/EM&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;C'est là ou le bat blesse : la plupart des algorithmes propose pour ce choix des calculs lourds et inutilisables en temps réel. Sur ce point, Stan Melax a montré son savoir faire. Il part d'un principe élémentaire : les surfaces coplanaires ne demandent pas autant de vertices pour être rendue à l'écran que les surfaces avec un relief prononcé (comme les courbes). Il est plus facile de réduire la complexité des premières, que celle des secondes. Le coût pour la disparition d'un sommet pourrait se traduire ainsi : c'est le résultat de la multiplication de la taille du sommet par l'importance dans la courbe sur laquelle il se trouve. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Pour la fusion uv, visant à déplacer &lt;EM&gt;u&lt;/EM&gt; vers &lt;EM&gt;v&lt;/EM&gt; nous avons l'algorithme :&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="Times New Roman"&gt;Calculer la taille du sommet (distance &lt;EM&gt;u&lt;/EM&gt; à &lt;EM&gt;v&lt;/EM&gt;).&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="times new roman,times"&gt;Déterminer l'ensemble des triangles qui possède à la fois &lt;EM&gt;u&lt;/EM&gt; et &lt;EM&gt;v&lt;/EM&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: