<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="/index.css"> <title>Physics for Games</title> <link rel="shortcut icon" href="/favicon/favicon.ico" type="image/x-icon"> <meta name="description" content="A place to learn all about real-time physics simulations through descriptions, code snippets, and example programs all written in C++ and OpenGL."> <meta name="og:description" content="A place to learn all about real-time physics simulations through descriptions, code snippets, and example programs all written in C++ and OpenGL."> </head> <body> <header> <h1><a title="physicsforgames.com" href="/">Physics for Games</a></h1> </header> <main> <nav> <ul class="outer-tree"> <li><a href="/">Introduction</a></li> <li> <span>🏀<span>2D</span></span> <ul class="inner-tree"> <li><label>Rigidbody</label></li> <li><a title="/2d/rigidbody/rigidbody_1.html" href="/2d/rigidbody/rigidbody_1.html">Linear Forces</a></li> <li><a title="/2d/rigidbody/rigidbody_2.html" href="/2d/rigidbody/rigidbody_2.html">Rotational Forces</a></li> <li><a title="/2d/rigidbody/rigidbody_3.html" href="/2d/rigidbody/rigidbody_3.html">Collisions</a></li> <li><label>Collisions</label></li> <li><a title="/2d/_collisions/rectangle_rectangle.html" href="/2d/_collisions/rectangle_rectangle.html">Rectangle-Rectangle</a></li> <li><a title="/2d/_collisions/polygon_polygon.html" href="/2d/_collisions/polygon_polygon.html">Separating Axis Theorem</a></li> <li><label>Softbody</label></li> <li><a title="/2d/softbody/softbody_1.html" href="/2d/softbody/softbody_1.html">Springs</a></li> <li><a title="/2d/softbody/softbody_2.html" href="/2d/softbody/softbody_2.html">Springy Rectangle</a></li> </ul> </li> <li> <span>🌠<span>3D</span></span> <ul class="inner-tree"> <li><label>Rigidbody</label></li> <li><a title="/3d/rigidbody.html" href="/3d/rigidbody.html">Rigidbody in 3D</a></li> </ul> </li> <li> <span>🔧<span>WebAssembly</span></span> <ul class="inner-tree"> <li><a title="/intro/intro.html" href="/intro/intro.html">Introduction</a></li> </ul> </li> <li> <span>🛈<span>About</span></span> <ul class="inner-tree"> <li><a title="/roadmap.html" href="/roadmap.html">Roadmap</a></li> </ul> </li> </ul> </nav> <script src="./rigidbody/dist/output.js"></script> <script> window.onload = function() { var lPlayElement = document.getElementById('gl_canvas_play'), lStopElement = document.getElementById('gl_canvas_stop'); lPlayElement.addEventListener('click', function() { lPlayElement.style.display = 'none'; lStopElement.style.display = 'block'; }); lStopElement.addEventListener('click', function() { lStopElement.style.display = 'none'; lPlayElement.style.display = 'block'; }); } </script> <article> <h1>Rigidbody in 3D</h1> <section> <section> <h2>Quaternions</h2> </section> <section> <h2>Quaternions</h2> <p> A discussion of 3D physics simulation woudl not really wouldn't be a discussion of 3D simulation if we didn't jump right into quaternions. Before I start, however, I recommend you take a look at <a href='https://www.3dgep.com/understanding-quaternions'>this article</a>. Quaternions have been written about over and over throughout the years (and I have read many articles about them over and over throughout the years), so I will not waste your time describing every single detail here. The article that I linked to should provide you enough information to begin to understand what quaternions are and why they're important. That being said, I will provide a brief intro to quaternions here, as well as my own C++ implementation of their algebra. (This article is also quite useful: <a href='http://danceswithcode.net/engineeringnotes/quaternions/quaternions.html'>Dance's With Code Website</a>) <br/><br/> </p> </section> <section> <h2> Live Example </h2> <p> <button id='force_apply'>Click Me</button> </p> <div class="opengl_canvas_container"> <canvas id="gl_canvas" width="800" height="600"></canvas> <button id="gl_canvas_play" class="play_button"> Play </button> <button id="gl_canvas_stop" class="stop_button"> Stop </button> </div> <footer id="references"> <h2>References</h2> <ul> </ul> </footer> </section> </article> </main> </body> </html>