{"id":958,"date":"2015-03-03T11:28:19","date_gmt":"2015-03-03T11:28:19","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=958"},"modified":"2016-06-29T05:21:48","modified_gmt":"2016-06-29T05:21:48","slug":"index-buffer-et-vertex-buffer-explications","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=958","title":{"rendered":"Index buffer et Vertex buffer"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/AMD_6990.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-1364\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/AMD_6990.jpg\" alt=\"AMD_6990\" width=\"397\" height=\"323\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/AMD_6990.jpg 1024w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/AMD_6990-300x244.jpg 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/AMD_6990-624x508.jpg 624w\" sizes=\"(max-width: 397px) 100vw, 397px\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>Les notions d&rsquo;Index buffer et de Vertex buffer sont fondamentales dans la compr\u00e9hension des \u00e9tapes de rendu 3D de mod\u00e8les \/ meshes. Ils sont appel\u00e9s <strong>sommets<\/strong> et d&rsquo;<strong>indices<\/strong> en fran\u00e7ais.<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>&#8211; Aucun<\/p>\n<p><strong>Vertex :<br \/>\n<\/strong><\/p>\n<p><span style=\"text-decoration: underline;\">D&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un vertex ?<\/span><\/p>\n<p>On peut imaginer un vertex comme un simple point dans un espace 3D. Ce sont ces vertex qui nous permettront de construire les primitives de base (points, lignes, triangles). Et c&rsquo;est ces primitives nous permettrons de construire des mod\u00e8les \/ objets dans le rendu 3D.<\/p>\n<p><strong>Index \/ Indice :<\/strong><\/p>\n<p>Qu&rsquo;est-ce qu&rsquo;un index (indice) ? Il faut noter que ce sont juste des nombres que l&rsquo;on va utiliser par groupe de 3 pour repr\u00e9senter l&rsquo;ordre d&rsquo;utilisation d&rsquo;un triangle.<\/p>\n<p>Autrement dit, c&rsquo;est un triplet d&rsquo;index qui sert \u00e0 indiquer \u00e0 la carte graphique dans quel ordre sont utilis\u00e9s les vertex affich\u00e9s par celle-ci. Ces index peuvent servir \u00e0 r\u00e9utiliser les vertices pr\u00e9c\u00e9demment d\u00e9clar\u00e9s.<\/p>\n<p><strong>Vertex buffer :<\/strong><\/p>\n<p>Un Vertex buffer est simplement une interface stockant les informations sur les vertices d&rsquo;un mod\u00e8le du jeu. C&rsquo;est un tableau situ\u00e9 dans la m\u00e9moire de la carte graphique.<\/p>\n<p>On peut stocker dans un vertex buffer des informations : comme la <strong>position<\/strong>, les vecteurs <strong>normales<\/strong>, les <strong>coordonn\u00e9es <\/strong>d&rsquo;une texture ou encore m\u00eame la <strong>couleur<\/strong>, voir m\u00eame n&rsquo;importe quoi&#8230;<\/p>\n<p><strong>Index buffer :<\/strong><\/p>\n<p>De m\u00eame que le Vertex buffer,\u00a0 c&rsquo;est une interface qui stocke les indices pr\u00e9sents dans un tableau contigu.<\/p>\n<p><strong><br \/>\nD\u00e9claration de vertex :<\/strong><\/p>\n<p>Pour que la carte graphique comprenne comment sont agenc\u00e9es les donn\u00e9es d&rsquo;un vertex buffer, il faut d\u00e9clarer une structure correspondante. On appel cela une \u00ab\u00a0d\u00e9claration de vertex\u00a0\u00bb.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>Avant tout il faut d\u00e9finir une structure correspondante et repr\u00e9sentative du type de Vertex :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nstruct SimpleVertex\r\n{\r\n    D3DXVECTOR3 Position;\r\n    D3DXVECTOR3 Color;\r\n};\r\n<\/pre>\n<p><span style=\"text-decoration: underline;\"><br \/>\nCode C++ d&rsquo;impl\u00e9mentation d&rsquo;un Vertex Buffer statique :<\/span><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nD3D10_BUFFER_DESC bufferDesc;\r\n\r\nbufferDesc.Usage\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = D3D10_USAGE_DEFAULT;\r\nbufferDesc.ByteWidth\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = sizeof( SimpleVertex ) * 3;\r\nbufferDesc.BindFlags\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = D3D10_BIND_VERTEX_BUFFER;\r\nbufferDesc.CPUAccessFlags\u00a0\u00a0 = 0;\r\nbufferDesc.MiscFlags\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = 0;\r\n\r\nID3D10Buffer* pVertexBuffer = nullptr;\r\n\r\nSimpleVertex vertices[] =\r\n{\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3( 0.0f, 0.5f, 0.5f ),\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3( 0.0f, 0.0f, 0.5f ),\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3( 0.5f, -0.5f, 0.5f ),\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3( 0.5f, 0.0f, 0.0f ),\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3( -0.5f, -0.5f, 0.5f ),\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3( 0.0f, 0.5f, 0.0f ),\r\n};\r\n\r\nD3D10_SUBRESOURCE_DATA InitData;\r\nInitData.pSysMem = vertices;\r\nInitData.SysMemPitch = 0;\r\nInitData.SysMemSlicePitch = 0;\r\n\r\nD3D10_RENDERER-&gt;GetDevice()-&gt;CreateBuffer( &amp;bufferDesc, &amp;InitData, &amp;pVertexBuffer);\r\n\r\n<\/pre>\n<p><span style=\"text-decoration: underline;\"><br \/>\nCode C++ d&rsquo;impl\u00e9mentation d&rsquo;un Index Buffer :<\/span><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nID3D10Buffer pIndexBuffer = nullptr;\r\n\r\nunsigned int indices[] = { 0, 1, 2 };\r\n\r\nD3D10_BUFFER_DESC bufferDesc;\r\nbufferDesc.Usage\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = D3D10_USAGE_DEFAULT;\r\nbufferDesc.ByteWidth\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = sizeof( unsigned int ) * 3;\r\nbufferDesc.BindFlags\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = D3D10_BIND_INDEX_BUFFER;\r\nbufferDesc.CPUAccessFlags\u00a0 = 0;\r\nbufferDesc.MiscFlags\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = 0;\r\n\r\nD3D10_SUBRESOURCE_DATA InitData;\r\n\r\nInitData.pSysMem = indices;\r\nInitData.SysMemPitch = 0;\r\nInitData.SysMemSlicePitch = 0;\r\n\r\nD3D10_RENDERER-&gt;GetDevice()-&gt;CreateBuffer(&amp;bufferDesc, &amp;InitData, &amp;pIndexBuffer);\r\n\r\n<\/pre>\n<p><strong><br \/>\nR\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Pour afficher un mod\u00e8le dans un rendu 3D on a besoin de d\u00e9finir comment il est repr\u00e9sent\u00e9 : c&rsquo;est-\u00e0-dire par deux tableaux d&rsquo;informations de Vertex et d&rsquo;Indices et une d\u00e9claration de vertex.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Les notions d&rsquo;Index buffer et de Vertex buffer sont fondamentales dans la compr\u00e9hension des \u00e9tapes de rendu 3D de mod\u00e8les \/ meshes. Ils sont appel\u00e9s sommets et d&rsquo;indices en fran\u00e7ais. Pr\u00e9requis : &#8211; Aucun Vertex : D&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un vertex ? On peut imaginer un vertex comme un simple point dans un espace [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/958"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=958"}],"version-history":[{"count":63,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/958\/revisions"}],"predecessor-version":[{"id":5097,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/958\/revisions\/5097"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}