summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x2d/_collisions/polygon_polygon/dist/output.wasmbin56810 -> 56473 bytes
-rw-r--r--2d/_collisions/polygon_polygon/main.cpp11
-rwxr-xr-x2d/_collisions/rectangle_rectangle/dist/output.wasmbin55607 -> 55719 bytes
-rw-r--r--2d/_collisions/rectangle_rectangle/main.cpp8
-rw-r--r--roadmap.html264
-rw-r--r--roadmap.html.content108
-rwxr-xr-xupload.sh2
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
index e355676..d008042 100755
--- a/2d/_collisions/polygon_polygon/dist/output.wasm
+++ b/2d/_collisions/polygon_polygon/dist/output.wasm
Binary files differ
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
index 5a17a67..f61e371 100755
--- a/2d/_collisions/rectangle_rectangle/dist/output.wasm
+++ b/2d/_collisions/rectangle_rectangle/dist/output.wasm
Binary files differ
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>&#127936;<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>&#127776;<span>3D</span></span>
+ <ul class="inner-tree">
+ </ul>
+ </li>
+ <li>
+ <span>&#128295;<span>WebAssembly</span></span>
+ <ul class="inner-tree">
+ <li><a href="/intro/intro.html">Introduction</a></li>
+ </ul>
+ </li>
+ <li>
+ <span>&#128712;<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>
diff --git a/upload.sh b/upload.sh
index ae5767f..0960cbc 100755
--- a/upload.sh
+++ b/upload.sh
@@ -1 +1 @@
-rsync -a frontend/ root@physicsforgames.com:/var/www/physicsforgames
+rsync -a ./ root@physicsforgames.com:/var/www/physicsforgames