From ace04c87f597cf927b2b9863f655df0c44ae3c07 Mon Sep 17 00:00:00 2001 From: James Lambert Date: Sat, 11 Jun 2022 16:03:44 -0600 Subject: [PATCH] Add bias to portal clipping plane --- assets/materials/static.skm.yaml | 1 + .../test_chamber_00/test_chamber_00_0.blend | Bin 2672920 -> 2672920 bytes src/decor/decor_object_list.c | 3 + src/physics/collision_cylinder.c | 67 +++++++++++++++++- src/physics/collision_cylinder.h | 1 + src/player/player.c | 3 + src/scene/button.c | 3 + src/scene/portal.c | 4 +- 8 files changed, 80 insertions(+), 2 deletions(-) diff --git a/assets/materials/static.skm.yaml b/assets/materials/static.skm.yaml index 23103ff..2820088 100644 --- a/assets/materials/static.skm.yaml +++ b/assets/materials/static.skm.yaml @@ -298,6 +298,7 @@ materials: gDPSetCombineMode: G_CC_DECALRGB gDPSetCycleType: G_CYC_1CYCLE + gDPSetTextureFilter: G_TF_BILERP radio: gDPSetTile: diff --git a/assets/test_chambers/test_chamber_00/test_chamber_00_0.blend b/assets/test_chambers/test_chamber_00/test_chamber_00_0.blend index 2396fe3084f1524e3aaea8aea80220bd51dced59..8e6da37da5798050155aafa9b2382cea8a5a66fc 100644 GIT binary patch delta 42946 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 delta 65563 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[0].edgeALength > 0.0f) { + return; + } + + struct Vector2 prevPoint; + vector2Scale(&cylinder->edgeVectors[cylinder->edgeCount - 1], -cylinder->radius, &prevPoint); + + for (int i = 0; i < (cylinder->edgeCount << 1); ++i) { + struct Vector2 currPoint; + vector2Scale(&cylinder->edgeVectors[i % cylinder->edgeCount], i >= cylinder->edgeCount ? -cylinder->radius : cylinder->radius, &currPoint); + + struct CollisionQuad* quad = &cylinder->outsideFaces[i]; + + quad->corner.x = prevPoint.x; + quad->corner.y = -cylinder->halfHeight; + quad->corner.z = prevPoint.y; + + struct Vector3 toEdge; + + toEdge.x = currPoint.x; + toEdge.y = -cylinder->halfHeight; + toEdge.z = currPoint.y; + + vector3Sub(&toEdge, &quad->corner, &quad->edgeA); + quad->edgeALength = sqrtf(vector3MagSqrd(&quad->edgeA)); + vector3Scale(&quad->edgeA, &quad->edgeA, 1.0f / quad->edgeALength); + + quad->edgeB = gUp; + quad->edgeBLength = cylinder->halfHeight * 2.0f; + + vector3Cross(&quad->edgeA, &quad->edgeB, &quad->plane.normal); + + if (vector3Dot(&quad->plane.normal, &quad->corner) < 0.0f) { + struct Vector3 tmpEdge = quad->edgeA; + quad->edgeA = quad->edgeB; + quad->edgeB = tmpEdge; + + float tmpLen = quad->edgeALength; + quad->edgeALength = quad->edgeBLength; + quad->edgeBLength = tmpLen; + + vector3Negate(&quad->plane.normal, &quad->plane.normal); + } + + quad->plane.d = -vector3Dot(&quad->plane.normal, &quad->corner); + + quad->enabledEdges = 0; + + prevPoint = currPoint; + } +} + float collisionCylinderSolidMofI(struct ColliderTypeData* typeData, float mass) { struct CollisionCylinder* cylinder = (struct CollisionCylinder*)typeData->data; @@ -119,5 +173,16 @@ int collisionCylinderRaycast(struct CollisionObject* cylinderObject, struct Ray* basisUnRotate(&cylinderObject->body->rotationBasis, &ray->dir, &localRay.dir); basisUnRotate(&cylinderObject->body->rotationBasis, &offset, &localRay.origin); - return 1; + collisionCylinderBoxCheckForFaces(cylinder); + + struct RaycastHit localHit; + + for (int i = 0; i < (cylinder->edgeCount << 1); ++i) { + if (raycastQuadShape(&cylinder->outsideFaces[i], &localRay, maxDistance, &localHit)) { + // TODO transform hit + return 1; + } + } + + return 0; } \ No newline at end of file diff --git a/src/physics/collision_cylinder.h b/src/physics/collision_cylinder.h index 80a9265..dc7fa88 100644 --- a/src/physics/collision_cylinder.h +++ b/src/physics/collision_cylinder.h @@ -10,6 +10,7 @@ struct CollisionCylinder { float halfHeight; struct Vector2* edgeVectors; int edgeCount; + struct CollisionQuad* outsideFaces; }; extern struct ColliderCallbacks gCollisionCylinderCallbacks; diff --git a/src/player/player.c b/src/player/player.c index c9210fb..b905568 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -27,11 +27,14 @@ struct Vector2 gPlayerColliderEdgeVectors[] = { {0.707f, -0.707f}, }; +struct CollisionQuad gPlayerColliderFaces[8]; + struct CollisionCylinder gPlayerCollider = { 0.25f, 0.7f, gPlayerColliderEdgeVectors, sizeof(gPlayerColliderEdgeVectors) / sizeof(*gPlayerColliderEdgeVectors), + gPlayerColliderFaces, }; struct ColliderTypeData gPlayerColliderData = { diff --git a/src/scene/button.c b/src/scene/button.c index ebde373..6290c18 100644 --- a/src/scene/button.c +++ b/src/scene/button.c @@ -18,11 +18,14 @@ struct Vector2 gButtonCylinderEdgeVectors[] = { {0.707f, -0.707f}, }; +struct CollisionQuad gButtonCylinderFaces[8]; + struct CollisionCylinder gButtonCylinder = { 0.5f, 0.3f, gButtonCylinderEdgeVectors, sizeof(gButtonCylinderEdgeVectors) / sizeof(*gButtonCylinderEdgeVectors), + gButtonCylinderFaces, }; struct ColliderTypeData gButtonCollider = { diff --git a/src/scene/portal.c b/src/scene/portal.c index 4bd745e..d46494a 100644 --- a/src/scene/portal.c +++ b/src/scene/portal.c @@ -44,6 +44,8 @@ struct Quaternion gVerticalFlip = {0.0f, 1.0f, 0.0f, 0.0f}; #define STARTING_RENDER_DEPTH 2 +#define PORTAL_CLIPPING_PLANE_BIAS (SCENE_SCALE * 0.25f) + void renderPropsInit(struct RenderProps* props, struct Camera* camera, float aspectRatio, struct RenderState* renderState, u16 roomIndex) { props->camera = *camera; props->aspectRatio = aspectRatio; @@ -150,7 +152,7 @@ void renderPropsNext(struct RenderProps* current, struct RenderProps* next, stru if (toPortal < fromPortal) { vector3Negate(&next->cullingInfo.clippingPlanes[4].normal, &next->cullingInfo.clippingPlanes[4].normal); } - next->cullingInfo.clippingPlanes[4].d = -vector3Dot(&next->cullingInfo.clippingPlanes[4].normal, &toPortal->position) * SCENE_SCALE; + next->cullingInfo.clippingPlanes[4].d = -vector3Dot(&next->cullingInfo.clippingPlanes[4].normal, &toPortal->position) * SCENE_SCALE - PORTAL_CLIPPING_PLANE_BIAS; next->currentDepth = current->currentDepth - 1; next->fromPortalIndex = toPortal < fromPortal ? 0 : 1;