From e431c58c0e5bde1689ef0be0d02588ee22c99c82 Mon Sep 17 00:00:00 2001 From: Matthew Kosarek Date: Wed, 19 May 2021 20:22:03 -0400 Subject: Ignoring general SAT rotations for now, going to focus on redoing the original demos --- 2d/_collisions/polygon_polygon/dist/output.wasm | Bin 56810 -> 56473 bytes 2d/_collisions/polygon_polygon/main.cpp | 11 ++++++++--- 2d/_collisions/rectangle_rectangle/dist/output.wasm | Bin 55607 -> 55719 bytes 2d/_collisions/rectangle_rectangle/main.cpp | 8 +++++++- 4 files changed, 15 insertions(+), 4 deletions(-) (limited to '2d/_collisions') diff --git a/2d/_collisions/polygon_polygon/dist/output.wasm b/2d/_collisions/polygon_polygon/dist/output.wasm index e355676..d008042 100755 Binary files a/2d/_collisions/polygon_polygon/dist/output.wasm and b/2d/_collisions/polygon_polygon/dist/output.wasm 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 Binary files a/2d/_collisions/rectangle_rectangle/dist/output.wasm and b/2d/_collisions/rectangle_rectangle/dist/output.wasm 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 }))) ; } } -- cgit v1.2.1