diff options
-rwxr-xr-x | 2d/_collisions/polygon_polygon/dist/output.wasm | bin | 56810 -> 56473 bytes | |||
-rw-r--r-- | 2d/_collisions/polygon_polygon/main.cpp | 11 | ||||
-rwxr-xr-x | 2d/_collisions/rectangle_rectangle/dist/output.wasm | bin | 55607 -> 55719 bytes | |||
-rw-r--r-- | 2d/_collisions/rectangle_rectangle/main.cpp | 8 | ||||
-rw-r--r-- | roadmap.html | 264 | ||||
-rw-r--r-- | roadmap.html.content | 108 | ||||
-rwxr-xr-x | upload.sh | 2 |
7 files changed, 275 insertions, 118 deletions
diff --git a/2d/_collisions/polygon_polygon/dist/output.wasm b/2d/_collisions/polygon_polygon/dist/output.wasm Binary files differindex e355676..d008042 100755 --- a/2d/_collisions/polygon_polygon/dist/output.wasm +++ b/2d/_collisions/polygon_polygon/dist/output.wasm diff --git a/2d/_collisions/polygon_polygon/main.cpp b/2d/_collisions/polygon_polygon/main.cpp index 916a057..b928f02 100644 --- a/2d/_collisions/polygon_polygon/main.cpp +++ b/2d/_collisions/polygon_polygon/main.cpp @@ -331,12 +331,13 @@ void resolveCollision(Rigidbody* first, Rigidbody* second, IntersectionResult* i float32 linearDenomPart = collisionNormal.dot(collisionNormal * (1.f / first->mass + 1.f / second->mass)); float32 rotationalDenomPart = (firstPerpNorm * firstPerpNorm) / first->momentOfInertia + (sndPerpNorm * sndPerpNorm) / second->momentOfInertia; - float32 impulseMagnitude = numerator / (linearDenomPart + rotationalDenomPart); + // @TODO: Most of my 2D rotational work is pretty broken. Let's ignore it for the time being; + float32 impulseMagnitude = numerator / (linearDenomPart);// + rotationalDenomPart); first->velocity = first->velocity + (collisionNormal * (impulseMagnitude / first->mass)); second->velocity = second->velocity - (collisionNormal * (impulseMagnitude / second->mass)); - first->rotationalVelocity = first->rotationalVelocity + firstPerp.dot(collisionNormal * impulseMagnitude) / first->momentOfInertia; - second->rotationalVelocity = second->rotationalVelocity - secondPerp.dot(collisionNormal * impulseMagnitude) / second->momentOfInertia; + // first->rotationalVelocity = first->rotationalVelocity + firstPerp.dot(collisionNormal * impulseMagnitude) / first->momentOfInertia; + // second->rotationalVelocity = second->rotationalVelocity - secondPerp.dot(collisionNormal * impulseMagnitude) / second->momentOfInertia; } void update(float32 deltaTimeSeconds, void* userData) { @@ -393,15 +394,19 @@ void update(float32 deltaTimeSeconds, void* userData) { for (int p = 0; p < 4; p++) { ConvexPolygon* polygon = &polygons[p]; if (polygon->body.position.x <= 0.f) { + polygon->body.position.x = 0.f; polygon->body.velocity = polygon->body.velocity - Vector2 { 1.f, 0.f } * (2 * (polygon->body.velocity.dot(Vector2 { 1.f, 0.f }))); } if (polygon->body.position.y <= 0.f) { + polygon->body.position.y = 0.f; polygon->body.velocity = polygon->body.velocity - Vector2 { 0.f, 1.f } * (2 * (polygon->body.velocity.dot(Vector2 { 0.f, 1.f }))); } if (polygon->body.position.x >= 640.f) { + polygon->body.position.x = 640.f; polygon->body.velocity = polygon->body.velocity - Vector2 { -1.f, 0.f } * (2 * (polygon->body.velocity.dot(Vector2{ -1.f, 0.f }))); } if (polygon->body.position.y >= 480.f) { + polygon->body.position.y = 480.f; polygon->body.velocity = polygon->body.velocity - Vector2 { 0.f, -1.f } * (2 * (polygon->body.velocity.dot(Vector2 { 0.f, -1.f }))) ; } } diff --git a/2d/_collisions/rectangle_rectangle/dist/output.wasm b/2d/_collisions/rectangle_rectangle/dist/output.wasm Binary files differindex 5a17a67..f61e371 100755 --- a/2d/_collisions/rectangle_rectangle/dist/output.wasm +++ b/2d/_collisions/rectangle_rectangle/dist/output.wasm diff --git a/2d/_collisions/rectangle_rectangle/main.cpp b/2d/_collisions/rectangle_rectangle/main.cpp index 99dafe5..689ea11 100644 --- a/2d/_collisions/rectangle_rectangle/main.cpp +++ b/2d/_collisions/rectangle_rectangle/main.cpp @@ -398,19 +398,25 @@ void update(float32 deltaTimeSeconds, void* userData) { } } - // Check collisions with walls + // Check collisions with walls. + // @NOTE: Setting the position backwards by a small amount _could_ move it into another object, but we are ignoring that circumstance + // for now, as it is very unlikely. for (int r = 0; r < 4; r++) { Rectangle* rect = &rectangleList[r]; if (rect->body.position.x <= 0.f) { + rect->body.position.x = 0.f; rect->body.velocity = rect->body.velocity - Vector2 { 1.f, 0.f } * (2 * (rect->body.velocity.dot(Vector2 { 1.f, 0.f }))); } if (rect->body.position.y <= 0.f) { + rect->body.position.y = 0.f; rect->body.velocity = rect->body.velocity - Vector2 { 0.f, 1.f } * (2 * (rect->body.velocity.dot(Vector2 { 0.f, 1.f }))); } if (rect->body.position.x >= 640.f) { + rect->body.position.x = 640.f; rect->body.velocity = rect->body.velocity - Vector2 { -1.f, 0.f } * (2 * (rect->body.velocity.dot(Vector2{ -1.f, 0.f }))); } if (rect->body.position.y >= 480.f) { + rect->body.position.y = 480.f; rect->body.velocity = rect->body.velocity - Vector2 { 0.f, -1.f } * (2 * (rect->body.velocity.dot(Vector2 { 0.f, -1.f }))) ; } } diff --git a/roadmap.html b/roadmap.html index 912e8c6..9e5e82e 100644 --- a/roadmap.html +++ b/roadmap.html @@ -1,124 +1,162 @@ <!DOCTYPE html> <html lang="en"> - <head> - <meta charset="utf-8"> - <script src="scripts/jquery-3.5.1.min.js"></script> - <script src="index.js"></script> - <link rel="stylesheet" href="index.css"> - <title>Roadmap</title> - <style> - section ul { - list-style: none; - padding-left: 0; - } - section li { - position: relative; - padding-left: 1.5em; /* space to preserve indentation on wrap */ - } - section li:before { - content: ''; - position: absolute; - left: 0; - width: 1rem; - height: 1rem; - } - section ul { - list-style: none; - } + <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"> + </head> + <body> + <header> + <h1>Physics for Games</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 href="/2d/_rigidbody/part_1.html">Linear Forces</a></li> + <li><a href="/2d/_rigidbody/part_2.html">Rotational Forces</a></li> + <li><a href="/2d/_rigidbody/part_3.html">Collision Forces</a></li> + <li><label>Collisions</label></li> + <li><a href="/2d/_collisions/circle_line.html">Circle-Line</a></li> + <li><a href="/2d/_collisions/rectangle_line.html">Rectangle-Line</a></li> + <li><a href="/2d/_collisions/rectangle_rectangle.html">Rectangle-Rectangle</a></li> + <li><a href="/2d/_collisions/pill_line.html">Pill-Line</a></li> + <li><a href="/2d/_collisions/pill_pill.html">Pill-Pill</a></li> + <li><a href="/2d/_collisions/polygon_polygon.html">Polygon-Polygon</a></li> + </ul> + </li> + <li> + <span>🌠<span>3D</span></span> + <ul class="inner-tree"> + </ul> + </li> + <li> + <span>🔧<span>WebAssembly</span></span> + <ul class="inner-tree"> + <li><a href="/intro/intro.html">Introduction</a></li> + </ul> + </li> + <li> + <span>🛈<span>About</span></span> + <ul class="inner-tree"> + <li><a href="/roadmap.html">Roadmap</a></li> + </ul> + </li> + </ul> + </nav> - section ul li:before { - content: '-'; - } +<style> + section ul { + list-style: none; + padding-left: 0; + } + section li { + position: relative; + padding-left: 1.5em; /* space to preserve indentation on wrap */ + } + section li:before { + content: ''; + position: absolute; + left: 0; + width: 1rem; + height: 1rem; + } + section ul { + list-style: none; + } - .done { - color: lightgreen; - } + section ul li:before { + content: '-'; + } - .halfway { - color: orange; - } + .done { + color: lightgreen; + } - .failed { - color: red; - } + .halfway { + color: orange; + } - section ul li.done:before { - content: '✓' - } + .failed { + color: red; + } - section ul li.halfway:before { - content: '⚠' - } + section ul li.done:before { + content: '✓' + } - section ul li.failed:before { - content: '✗' - } - </style> - </head> - <body> - <header> - <h1>Physics for Games</h1> - </header> - <main> - <nav></nav> - <section> - <h1>May/June 2021: More Collisions</h1> - <ul> - <li>SAT Collisions for Convex Polygons with Explanation</li> - <li>Pill Collisions</li> - <li>Remove (or hide) ellipse collision pages for now</li> - <li>3D scene setup</li> - <li>3D scene basic physics with spheres bouncing around a scene</li> - </ul> - <p style="color: pink; font-size: 18px;"> - Obviously, the month of April did not go as planned. I got caught up with a number of tasks that I couldn't handle, - namely, the pill collisions. These, as I discovered, were quite unfeasible and involved a lot of complex maths - that I didn't quite yet understand. They are also unreasonable for game development's sake, so I will ditch that - effort and focus on doing other things. This, of course, is not time entirely wasted, as I now I have a somewhat - better understanding of why ellipses (and by extension ellipsoids, although I am not entirely sure of this). I should - <i>instead</i> try to figure out the intersection using pills, not ellipses. Pills are simply 2D shapes made of a - rectangle in the middle and two half-circles at either ends. This is a far less expensive collision to calculate. - <br/> - I also failed when it came to getting a good physics collision system going. This stemmed from a general misunderstanding - of moment of inertia and how it can properly be implemented for each shape. I think I am getting a better grip on it now, - however. - <br /> - And that brings me to May/June. I am combining these two months because I am quite busy in May with family stuff, - and hence won't be able to give my full attention to the project. That being said, as a high-level goal, I hope to - get some more 2D collisions going, and maybe move onto 3D fairly soon. For 3D, I would simply like to get the physics - simulation up and running with simple objects (spheres, cubes, etc.). From there, I want to begin exploring more complex - physics simulation topics like oct-trees, multiple collision resolution, etc. We will see what happens, but I am optimistic, - so long as I stay the course. - </p> - </section> - <section> - <h1>April 2021: Ground Work and Initial Collisions</h1> - <ul> - <li class="done">Orthographic rendering basics</li> - <li class="done">Uniform build Process for WebAssembly</li> - <li class="done">WASM Framework with simulation loop</li> - </ul> - <hr/> - <h1>2D Collisions with Descriptions</h1> - <ul> - <li class="halfway">Ellipse-Line Collision</li> - <li class="failed">Ellipse-Ellipse Collisions</li> - <li class="failed">Ellipse-Circle Collisions</li> - <li class="failed">Ellipse-Square Collisions</li> - <li class="done">Rectangle-Line Collisions</li> - <li class="halfway">Circle-Line Collisions (Redo)</li> - <li class="failed">Rectangle-Circle Collision</li> - </ul> - <hr /> - <h1>Brief Wasm Series</h1> - <ul> - <li class="halfway">Getting started with WASM docs</li> - <li class="halfway">Wasm examples</li> - </ul> - <p style="color: pink; font-size: 18px;"> - Everything above has a due date of <b>April 30th, 2021</b>. None of it is that hard, so this should be a very doable timeline. - </p> - </section> - </main> + section ul li.halfway:before { + content: '⚠' + } + + section ul li.failed:before { + content: '✗' + } +</style> +<article> + <section> + <h1>May/June 2021: More Collisions</h1> + <ul> + <li>SAT Collisions for Convex Polygons with Explanation</li> + <li>Pill Collisions</li> + <li>Remove (or hide) ellipse collision pages for now</li> + <li>3D scene setup</li> + <li>3D scene basic physics with spheres bouncing around a scene</li> + </ul> + <p style="font-size: 18px;"> + Obviously, the month of April did not go as planned. I got caught up with a number of tasks that I couldn't handle, + namely, the pill collisions. These, as I discovered, were quite unfeasible and involved a lot of complex maths + that I didn't quite yet understand. They are also unreasonable for game development's sake, so I will ditch that + effort and focus on doing other things. This, of course, is not time entirely wasted, as I now I have a somewhat + better understanding of why ellipses (and by extension ellipsoids, although I am not entirely sure of this). I should + <i>instead</i> try to figure out the intersection using pills, not ellipses. Pills are simply 2D shapes made of a + rectangle in the middle and two half-circles at either ends. This is a far less expensive collision to calculate. + <br/><br/> + I also failed when it came to getting a good physics collision system going. This stemmed from a general misunderstanding + of moment of inertia and how it can properly be implemented for each shape. I think I am getting a better grip on it now, + however. + <br/><br/> + And that brings me to May/June. I am combining these two months because I am quite busy in May with family stuff, + and hence won't be able to give my full attention to the project. That being said, as a high-level goal, I hope to + get some more 2D collisions going, and maybe move onto 3D fairly soon. For 3D, I would simply like to get the physics + simulation up and running with simple objects (spheres, cubes, etc.). From there, I want to begin exploring more complex + physics simulation topics like oct-trees, multiple collision resolution, etc. We will see what happens, but I am optimistic, + so long as I stay the course. + </p> + </section> + <hr/> + <section> + <h1>April 2021: Ground Work and Initial Collisions</h1> + <ul> + <li class="done">Orthographic rendering basics</li> + <li class="done">Uniform build Process for WebAssembly</li> + <li class="done">WASM Framework with simulation loop</li> + </ul> + <h2>2D Collisions with Descriptions</h1> + <ul> + <li class="halfway">Ellipse-Line Collision</li> + <li class="failed">Ellipse-Ellipse Collisions</li> + <li class="failed">Ellipse-Circle Collisions</li> + <li class="failed">Ellipse-Square Collisions</li> + <li class="done">Rectangle-Line Collisions</li> + <li class="halfway">Circle-Line Collisions (Redo)</li> + <li class="failed">Rectangle-Circle Collision</li> + </ul> + <h2>Brief Wasm Series</h1> + <ul> + <li class="halfway">Getting started with WASM docs</li> + <li class="halfway">Wasm examples</li> + </ul> + <p style="color: pink; font-size: 18px;"> + Everything above has a due date of <b>April 30th, 2021</b>. None of it is that hard, so this should be a very doable timeline. + </p> + </section> +</article> + </main> </body> </html> diff --git a/roadmap.html.content b/roadmap.html.content new file mode 100644 index 0000000..5509dc8 --- /dev/null +++ b/roadmap.html.content @@ -0,0 +1,108 @@ + +<style> + section ul { + list-style: none; + padding-left: 0; + } + section li { + position: relative; + padding-left: 1.5em; /* space to preserve indentation on wrap */ + } + section li:before { + content: ''; + position: absolute; + left: 0; + width: 1rem; + height: 1rem; + } + section ul { + list-style: none; + } + + section ul li:before { + content: '-'; + } + + .done { + color: lightgreen; + } + + .halfway { + color: orange; + } + + .failed { + color: red; + } + + section ul li.done:before { + content: '✓' + } + + section ul li.halfway:before { + content: '⚠' + } + + section ul li.failed:before { + content: '✗' + } +</style> +<article> + <section> + <h1>May/June 2021: More Collisions</h1> + <ul> + <li>SAT Collisions for Convex Polygons with Explanation</li> + <li>Pill Collisions</li> + <li>Remove (or hide) ellipse collision pages for now</li> + <li>3D scene setup</li> + <li>3D scene basic physics with spheres bouncing around a scene</li> + </ul> + <p style="font-size: 18px;"> + Obviously, the month of April did not go as planned. I got caught up with a number of tasks that I couldn't handle, + namely, the pill collisions. These, as I discovered, were quite unfeasible and involved a lot of complex maths + that I didn't quite yet understand. They are also unreasonable for game development's sake, so I will ditch that + effort and focus on doing other things. This, of course, is not time entirely wasted, as I now I have a somewhat + better understanding of why ellipses (and by extension ellipsoids, although I am not entirely sure of this). I should + <i>instead</i> try to figure out the intersection using pills, not ellipses. Pills are simply 2D shapes made of a + rectangle in the middle and two half-circles at either ends. This is a far less expensive collision to calculate. + <br/><br/> + I also failed when it came to getting a good physics collision system going. This stemmed from a general misunderstanding + of moment of inertia and how it can properly be implemented for each shape. I think I am getting a better grip on it now, + however. + <br/><br/> + And that brings me to May/June. I am combining these two months because I am quite busy in May with family stuff, + and hence won't be able to give my full attention to the project. That being said, as a high-level goal, I hope to + get some more 2D collisions going, and maybe move onto 3D fairly soon. For 3D, I would simply like to get the physics + simulation up and running with simple objects (spheres, cubes, etc.). From there, I want to begin exploring more complex + physics simulation topics like oct-trees, multiple collision resolution, etc. We will see what happens, but I am optimistic, + so long as I stay the course. + </p> + </section> + <hr/> + <section> + <h1>April 2021: Ground Work and Initial Collisions</h1> + <ul> + <li class="done">Orthographic rendering basics</li> + <li class="done">Uniform build Process for WebAssembly</li> + <li class="done">WASM Framework with simulation loop</li> + </ul> + <h2>2D Collisions with Descriptions</h1> + <ul> + <li class="halfway">Ellipse-Line Collision</li> + <li class="failed">Ellipse-Ellipse Collisions</li> + <li class="failed">Ellipse-Circle Collisions</li> + <li class="failed">Ellipse-Square Collisions</li> + <li class="done">Rectangle-Line Collisions</li> + <li class="halfway">Circle-Line Collisions (Redo)</li> + <li class="failed">Rectangle-Circle Collision</li> + </ul> + <h2>Brief Wasm Series</h1> + <ul> + <li class="halfway">Getting started with WASM docs</li> + <li class="halfway">Wasm examples</li> + </ul> + <p style="color: pink; font-size: 18px;"> + Everything above has a due date of <b>April 30th, 2021</b>. None of it is that hard, so this should be a very doable timeline. + </p> + </section> +</article> @@ -1 +1 @@ -rsync -a frontend/ root@physicsforgames.com:/var/www/physicsforgames +rsync -a ./ root@physicsforgames.com:/var/www/physicsforgames |