{"id":3461,"date":"2015-11-13T18:32:06","date_gmt":"2015-11-13T18:32:06","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=3461"},"modified":"2016-07-27T15:03:36","modified_gmt":"2016-07-27T15:03:36","slug":"la-normale-vecteur","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=3461","title":{"rendered":"La normale (vecteur)"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/normale.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-3462\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/normale.png\" alt=\"normale\" width=\"500\" height=\"209\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/normale.png 500w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/normale-300x125.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>La normale est un vecteur <strong>perpendiculaire<\/strong> \u00e0 un triangle ou une face quelconque.<\/p>\n<p><strong>Pr\u00e9requis : <\/strong><\/p>\n<p>&#8211; Savoir ce qu&rsquo;est un <em>vecteur <\/em> et les <em>op\u00e9rations<\/em> alg\u00e9briques associ\u00e9es.<\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>La normale d\u00e9crit dans quelle <strong>direction<\/strong> une face est dirig\u00e9e. La normale est un vecteur <strong>d&rsquo;unit\u00e9 1<\/strong>, puisqu&rsquo;il a \u00e9t\u00e9 normalis\u00e9. Elle est perpendiculaire \u00e0 tous les points de la face.<\/p>\n<h4><span style=\"text-decoration: underline;\">Comment calculer la normale ?<\/span><\/h4>\n<p>On cherche \u00e0 trouver <strong>deux vecteurs<\/strong> d&rsquo;une face donn\u00e9e en prenant le<strong> produit vectoriel<\/strong> de ces deux l\u00e0.<\/p>\n<p>Pour trouver la normale d&rsquo;un triangle <img src='https:\/\/s0.wp.com\/latex.php?latex=%5CDelta%5Cvec%7Bp_0%7D%5Cvec%7Bp_1%7D%5Cvec%7Bp_2%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='\\Delta\\vec{p_0}\\vec{p_1}\\vec{p_2} ' title='\\Delta\\vec{p_0}\\vec{p_1}\\vec{p_2} ' class='latex' \/>, on calcule ces deux vecteurs d&rsquo;arr\u00eates (c\u00f4t\u00e9s) du triangle.<\/p>\n<p><img src='https:\/\/s0.wp.com\/latex.php?latex=%5Cvec%7Bu%7D+%3D+%5Cvec%7Bp_1%7D+-+%5Cvec%7Bp_2%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='\\vec{u} = \\vec{p_1} - \\vec{p_2} ' title='\\vec{u} = \\vec{p_1} - \\vec{p_2} ' class='latex' \/><br \/>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=%5Cvec%7Bv%7D+%3D+%5Cvec%7Bp_2%7D+-+%5Cvec%7Bp_0%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='\\vec{v} = \\vec{p_2} - \\vec{p_0} ' title='\\vec{v} = \\vec{p_2} - \\vec{p_0} ' class='latex' \/><\/p>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=%5Cvec%7Bn%7D+%3D+%28%5Cvec%7Bu%7D%5Ctimes%5Cvec%7Bv%7D%29+%2F+%5C%7C%5Cvec%7Bu%7D%5Ctimes%5Cvec%7Bv%7D%5C%7C+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='\\vec{n} = (\\vec{u}\\times\\vec{v}) \/ \\|\\vec{u}\\times\\vec{v}\\| ' title='\\vec{n} = (\\vec{u}\\times\\vec{v}) \/ \\|\\vec{u}\\times\\vec{v}\\| ' class='latex' \/>\n<p>&nbsp;<\/p>\n<p>Voici l&rsquo;algorithme en C++ :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;d3dx10math.h&gt;\r\n\r\nvoid ComputeNormal(D3DXVECTOR3* p0, D3DXVECTOR3* p1, D3DXVECTOR3* p2,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 D3DXVECTOR3* out)\r\n{\r\n\u00a0\u00a0 \u00a0D3DXVECTOR3 u = *p1 - *p0;\r\n\u00a0\u00a0 \u00a0D3DXVECTOR3 v = *p2 - *p0;\r\n\r\n\u00a0\u00a0 \u00a0D3DXVec3Cross(out, &amp;u, &amp;v);\r\n\r\n\u00a0\u00a0 \u00a0D3DXVec3Normalize(out, out);\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">On peut la calculer autrement :<\/span><\/p>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=n_%7Bx%7D+%3D+u_%7By%7Dv_%7Bz%7D+-+u_%7Bz%7Dv_%7By%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='n_{x} = u_{y}v_{z} - u_{z}v_{y} ' title='n_{x} = u_{y}v_{z} - u_{z}v_{y} ' class='latex' \/>\n<p>&nbsp;<\/p>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=n_%7By%7D+%3D+u_%7Bz%7Dv_%7Bx%7D+-+u_%7Bx%7Dv_%7Bz%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='n_{y} = u_{z}v_{x} - u_{x}v_{z} ' title='n_{y} = u_{z}v_{x} - u_{x}v_{z} ' class='latex' \/>\n<p>&nbsp;<\/p>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=n_%7Bz%7D+%3D+u_%7Bx%7Dv_%7By%7D+-+u_%7By%7Dv_%7Bx%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=2' alt='n_{z} = u_{x}v_{y} - u_{y}v_{x} ' title='n_{z} = u_{x}v_{y} - u_{y}v_{x} ' class='latex' \/>\n<p>&nbsp;<\/p>\n<h4><span style=\"text-decoration: underline;\">Comment la normaliser ?<\/span><\/h4>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=%7B%5Cvec%7Bv%7D%7D_%7Bnorm%7D%3D%5Cfrac%7B%7B%5Cvec%7Bn%7D%7D%7D%7B%5C%7C%7B%5Cvec%7Bn%7D%7D%5C%7C%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=3' alt='{\\vec{v}}_{norm}=\\frac{{\\vec{n}}}{\\|{\\vec{n}}\\|} ' title='{\\vec{v}}_{norm}=\\frac{{\\vec{n}}}{\\|{\\vec{n}}\\|} ' class='latex' \/>\n<p>&nbsp;<\/p>\n<p>Voici l&rsquo;algorithme en C++ :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;d3dx10math.h&gt;\r\n\r\nvoid Normalize(D3DXVECTOR3&amp; v)\r\n{\r\n\u00a0\u00a0 \u00a0unsigned int iLength = sqrt((v.x * v.x) + (v.y * v.y) + (v.z * v.z));\r\n\r\n    v.x \/= iLength;\r\n    v.y \/= iLength;\r\n    v.z \/= iLength;\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"text-decoration: underline;\">A quoi sert la normale ?<\/span><\/h4>\n<p>La normale est utilis\u00e9e dans le calcul de la nuance de lumi\u00e8re d&rsquo;une face en utilisant la <strong>loi de Lambert<\/strong>. De cette fa\u00e7on nous pouvons d\u00e9terminer l&rsquo;angle \u00e0 laquelle la lumi\u00e8re frappe un vertex.<\/p>\n<p>Elle est aussi utilis\u00e9e dans le rendu du\u00a0\u00ab <strong>Bump Mapping <\/strong>\u00bb.<\/p>\n<h4><span style=\"text-decoration: underline;\">Transformation de la normale par une mise \u00e0 l&rsquo;\u00e9chelle non uniforme :<\/span><\/h4>\n<p>On doit <strong>faire attention<\/strong> aux vecteurs normales lorsqu&rsquo;on fait une op\u00e9ration <strong>d&rsquo;agrandissement<\/strong> (de <em>mise \u00e0 l&rsquo;\u00e9chelle<\/em> \/ de <em>scaling<\/em>) autre que d&rsquo;unit\u00e9 1 ou non-uniforme.<\/p>\n<p>[sch\u00e9ma \/ dessin]<\/p>\n<p>La normale est correctement transform\u00e9e avec la <strong>matrice de transformation d&rsquo;agrandissement invers\u00e9e et transpos\u00e9e<\/strong>.<\/p>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Nous avons pr\u00e9sent\u00e9 le vecteur normal ; entit\u00e9 math\u00e9matique qui sert notamment \u00e0 effectuer le calcul lumineux d&rsquo;un mod\u00e8le.<\/p>\n<p><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p>&#8211; https:\/\/www.opengl.org\/wiki\/Calculating_a_Surface_Normal<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : La normale est un vecteur perpendiculaire \u00e0 un triangle ou une face quelconque. Pr\u00e9requis : &#8211; Savoir ce qu&rsquo;est un vecteur et les op\u00e9rations alg\u00e9briques associ\u00e9es. Explications : La normale d\u00e9crit dans quelle direction une face est dirig\u00e9e. La normale est un vecteur d&rsquo;unit\u00e9 1, puisqu&rsquo;il a \u00e9t\u00e9 normalis\u00e9. Elle est perpendiculaire \u00e0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/3461"}],"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=3461"}],"version-history":[{"count":68,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/3461\/revisions"}],"predecessor-version":[{"id":5196,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/3461\/revisions\/5196"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}