{"id":1929,"date":"2015-04-08T12:31:02","date_gmt":"2015-04-08T12:31:02","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=1929"},"modified":"2016-07-28T14:29:15","modified_gmt":"2016-07-28T14:29:15","slug":"camera-troisieme-personne-avec-la-trigonometrie","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=1929","title":{"rendered":"Cam\u00e9ra \u00e0 la 3\u00e8me personne trigonom\u00e9trique"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/cam\u00e9ra.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-4634\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/cam\u00e9ra.jpg\" alt=\"cam\u00e9ra\" width=\"486\" height=\"273\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/cam\u00e9ra.jpg 1280w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/cam\u00e9ra-300x169.jpg 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/cam\u00e9ra-1024x576.jpg 1024w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/cam\u00e9ra-624x351.jpg 624w\" sizes=\"(max-width: 486px) 100vw, 486px\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>Pour se d\u00e9placer dans la sc\u00e8ne 3D il faut mouvoir une cam\u00e9ra.<\/p>\n<p>Dans cet article nous allons impl\u00e9menter une cam\u00e9ra qui tourne autour d&rsquo;un joueur (ou autour d&rsquo;une position)<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>&#8211; Comprendre un minimum de <em>notions trigonom\u00e9triques<\/em><\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>D\u00e9clarer ces trois variables dans un fichier quelconque :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nfloat m_fCameraSpeed;\r\nfloat m_fDistance;\r\nD3DXVECTOR2 m_v2CameraAngle;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Voil\u00e0 les fonctions d&rsquo;initialisation et de mise \u00e0 jour de la cam\u00e9ra \u00e0 la 3\u00e8me personne :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nvoid CameraManager::Initialize()\r\n{\r\n    m_v2CameraAngle = D3DXVECTOR2(0.0f, 0.0f);\r\n}\r\n\r\nvoid CameraManager::UpdateThirdPersonCamera()\r\n{\r\n    \/\/ C'est deux fonctions retournent simplement la quantit\u00e9 de mouvement\r\n    \/\/ du pointeur de la souris\r\n    \/\/ Voir l'article sur le InputManager\r\n\u00a0\u00a0\u00a0 float fX = InputManager::getSingletonPtr()-&gt;getMouseRelativePos().x;\r\n\u00a0\u00a0\u00a0 float fY = InputManager::getSingletonPtr()-&gt;getMouseRelativePos().y;\r\n\r\n#define CAMERA_SPEED_ROTATE_AROUND 0.0037f\r\n    \/\/ Normalement il faut utiliser le temps pass\u00e9 depuis le dernier affichage\r\n    \/\/ (voir l'article sur la variable fTimeSinceLastFrame &quot;Performance Timer&quot;)\r\n\u00a0\u00a0  m_v2CameraAngle.x += fX * CAMERA_SPEED_ROTATE_AROUND;\r\n\u00a0\u00a0\u00a0 m_v2CameraAngle.y -= fY * CAMERA_SPEED_ROTATE_AROUND;\r\n    \/\/ Clamp : une fonction qui permet de garder le r\u00e9sultat\r\n    \/\/ pass\u00e9 entre un intervalle donn\u00e9\r\n\u00a0\u00a0\u00a0 m_v2CameraAngle.y = Clamp(camAngle.y, 0.003f, Ogre::Math::PI - 0.003f);\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Usage de la trigonom\u00e9trie pour faire en sorte que la cam\u00e9ra\r\n\u00a0\u00a0 \u00a0\/\/ fasse une rotation autour d'un point\r\n\u00a0\u00a0\u00a0 float cosX = cos(m_v2CameraAngle.x);\r\n\u00a0\u00a0\u00a0 float cosY = cos(m_v2CameraAngle.y);\r\n\u00a0\u00a0\u00a0 float sinY = sin(m_v2CameraAngle.y);\r\n\u00a0\u00a0\u00a0 float sinX = sin(m_v2CameraAngle.x);\r\n\r\n\u00a0\u00a0\u00a0 float xf = cosX * sinY;\r\n\u00a0\u00a0\u00a0 float yf = cosY;\r\n\u00a0\u00a0\u00a0 float zf = sinX * sinY;\r\n\r\n\u00a0\u00a0 \u00a0D3DXVECTOR3 finalPos(xf, yf, zf);\r\n\r\n    \/* Position du joueur (o\u00f9 de l'objet auquel vous voulez tourner autour !*\/\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3 playerPos = GAME-&gt;getPlayer()-&gt;getSceneNode()-&gt;getPosition();\r\n\r\n    \/\/ Votre objet cam\u00e9ra utilis\u00e9\r\n\u00a0\u00a0\u00a0 m_pCamera-&gt;setPosition(finalPos * m_fDistance + playerPos);\r\n\u00a0\u00a0\u00a0 m_pCamera-&gt;lookAt(GAME-&gt;getPlayer()-&gt;getSceneNode()-&gt;getPosition());\r\n\r\n\u00a0\u00a0\u00a0 \/** Pour centrer le curseur de ma souris *\/\r\n\u00a0\u00a0\u00a0 centerCursorPos();\r\n}\r\n\r\n<\/pre>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Nous avons pr\u00e9sent\u00e9 un moyen d&rsquo;impl\u00e9menter une <strong>cam\u00e9ra trigonom\u00e9trique<\/strong> qui op\u00e8re une <strong>r\u00e9volution<\/strong> autour de la position du joueur !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Pour se d\u00e9placer dans la sc\u00e8ne 3D il faut mouvoir une cam\u00e9ra. Dans cet article nous allons impl\u00e9menter une cam\u00e9ra qui tourne autour d&rsquo;un joueur (ou autour d&rsquo;une position) Pr\u00e9requis : &#8211; Comprendre un minimum de notions trigonom\u00e9triques Explications : D\u00e9clarer ces trois variables dans un fichier quelconque : &nbsp; Voil\u00e0 les fonctions [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/1929"}],"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=1929"}],"version-history":[{"count":58,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/1929\/revisions"}],"predecessor-version":[{"id":5319,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/1929\/revisions\/5319"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}