1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 15:04:31 +00:00

Math3D and olib updates (#315)

* wip

* Olib updates

* wip

* wip

* rename most Math3D functions, few matches, documentation

* wip

* document most of math3d

* pr updates

* pr updates

* add missing comment block finalizer
This commit is contained in:
krimtonz 2020-08-17 14:42:08 -05:00 committed by GitHub
parent 2826421c98
commit f11a74d41d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
110 changed files with 1959 additions and 1787 deletions

View file

@ -507,7 +507,7 @@ s32 Collider_SetTrisItemDim(GlobalContext* globalCtx, TriNorm* dest, ColliderTri
*d++ = *s++;
}
func_800CC8B4(&src->vtx[0], &src->vtx[1], &src->vtx[2], &nx, &ny, &nz, &nd);
Math3D_DefPlane(&src->vtx[0], &src->vtx[1], &src->vtx[2], &nx, &ny, &nz, &nd);
dest->plane.normal.x = nx;
dest->plane.normal.y = ny;
@ -818,7 +818,7 @@ s32 func_8005D218(GlobalContext* globalCtx, ColliderQuad* quad, Vec3f* arg2) {
return 1;
}
Math_Vec3s_ToVec3f(&sp20, &quad->dim.dcMid);
temp = func_800CB650(&sp20, arg2);
temp = Math3D_Vec3fDistSq(&sp20, arg2);
if (temp < quad->dim.unk_3C) {
quad->dim.unk_3C = temp;
if (quad->body.atHit != NULL) {
@ -928,12 +928,12 @@ void func_8005D4DC(GlobalContext* globalCtx, Collider* collider) {
case COLSHAPE_JNTSPH:
jntSph = (ColliderJntSph*)collider;
for (i = 0; i < jntSph->count; i++) {
func_800D05D0(globalCtx, &jntSph->list[i].dim.worldSphere);
Math3D_DrawSphere(globalCtx, &jntSph->list[i].dim.worldSphere);
}
break;
case COLSHAPE_CYLINDER:
cylinder = (ColliderCylinder*)collider;
func_800D05DC(globalCtx, &cylinder->dim);
Math3D_DrawCylinder(globalCtx, &cylinder->dim);
break;
case COLSHAPE_TRIS:
tris = (ColliderTris*)collider;
@ -1547,8 +1547,7 @@ void CollisionCheck_AC_JntSphVsJntSph(GlobalContext* globalCtx, CollisionCheckCo
if (func_8005DF74(&lItem->body, &rItem->body) == 1) {
continue;
}
if (Math3D_SpheresTouchingSurfaceCenter(&lItem->dim.worldSphere, &rItem->dim.worldSphere, &sp8C, &sp88) ==
1) {
if (Math3D_SphVsSphOverlapCenter(&lItem->dim.worldSphere, &rItem->dim.worldSphere, &sp8C, &sp88) == 1) {
sp6C.x = lItem->dim.worldSphere.center.x;
sp6C.y = lItem->dim.worldSphere.center.y;
sp6C.z = lItem->dim.worldSphere.center.z;
@ -1597,7 +1596,7 @@ void CollisionCheck_AC_JntSphVsCyl(GlobalContext* globalCtx, CollisionCheckConte
if (func_8005DF74(&lItem->body, &right->body) == 1) {
continue;
}
if (func_800CFDA4(&lItem->dim.worldSphere, &right->dim, &sp80, &sp7C) != 0) {
if (Math3D_SphVsCylOverlapCenterDist(&lItem->dim.worldSphere, &right->dim, &sp80, &sp7C) != 0) {
sp64.x = lItem->dim.worldSphere.center.x;
sp64.y = lItem->dim.worldSphere.center.y;
sp64.z = lItem->dim.worldSphere.center.z;
@ -1647,7 +1646,7 @@ void CollisionCheck_AC_CylVsJntSph(GlobalContext* globalCtx, CollisionCheckConte
if (func_8005DF74(&left->body, &rItem->body) == 1) {
continue;
}
if (func_800CFDA4(&rItem->dim.worldSphere, &left->dim, &sp9C, &sp98) != 0) {
if (Math3D_SphVsCylOverlapCenterDist(&rItem->dim.worldSphere, &left->dim, &sp9C, &sp98) != 0) {
sp7C.x = left->dim.pos.x;
sp7C.y = left->dim.pos.y;
sp7C.z = left->dim.pos.z;
@ -1698,7 +1697,7 @@ void CollisionCheck_AC_JntSphVsTris(GlobalContext* globalCtx, CollisionCheckCont
if (func_8005DF74(&lItem->body, &rItem->body) == 1) {
continue;
}
if (func_800CE934(&lItem->dim.worldSphere, &rItem->dim, &sp6C) == 1) {
if (Math3D_TriVsSphIntersect(&lItem->dim.worldSphere, &rItem->dim, &sp6C) == 1) {
sp60.x = lItem->dim.worldSphere.center.x;
sp60.y = lItem->dim.worldSphere.center.y;
sp60.z = lItem->dim.worldSphere.center.z;
@ -1735,7 +1734,7 @@ void CollisionCheck_AC_TrisVsJntSph(GlobalContext* globalCtx, CollisionCheckCont
if (func_8005DF74(&lItem->body, &rItem->body) == 1) {
continue;
}
if (func_800CE934(&rItem->dim.worldSphere, &lItem->dim, &sp7C) == 1) {
if (Math3D_TriVsSphIntersect(&rItem->dim.worldSphere, &lItem->dim, &sp7C) == 1) {
Math_Vec3s_ToVec3f(&sp64, &rItem->dim.worldSphere.center);
sp70.x = (lItem->dim.vtx[0].x + lItem->dim.vtx[1].x + lItem->dim.vtx[2].x) * (1.0f / 3);
sp70.y = (lItem->dim.vtx[0].y + lItem->dim.vtx[1].y + lItem->dim.vtx[2].y) * (1.0f / 3);
@ -1777,8 +1776,8 @@ void CollisionCheck_AC_JntSphVsQuad(GlobalContext* globalCtx, CollisionCheckCont
if (func_8005DF74(&lItem->body, &right->body) == 1) {
continue;
}
if (func_800CE934(&lItem->dim.worldSphere, &D_8015E230, &sp7C) == 1 ||
func_800CE934(&lItem->dim.worldSphere, &D_8015E268, &sp7C) == 1) {
if (Math3D_TriVsSphIntersect(&lItem->dim.worldSphere, &D_8015E230, &sp7C) == 1 ||
Math3D_TriVsSphIntersect(&lItem->dim.worldSphere, &D_8015E268, &sp7C) == 1) {
Math_Vec3s_ToVec3f(&sp6C, &lItem->dim.worldSphere.center);
sp60.x =
@ -1820,8 +1819,8 @@ void CollisionCheck_AC_QuadVsJntSph(GlobalContext* globalCtx, CollisionCheckCont
if (func_8005DF74(&left->body, &rItem->body) == 1) {
continue;
}
if (func_800CE934(&rItem->dim.worldSphere, &D_8015E2A0, &sp88) != 1 &&
func_800CE934(&rItem->dim.worldSphere, &D_8015E2D8, &sp88) != 1) {
if (Math3D_TriVsSphIntersect(&rItem->dim.worldSphere, &D_8015E2A0, &sp88) != 1 &&
Math3D_TriVsSphIntersect(&rItem->dim.worldSphere, &D_8015E2D8, &sp88) != 1) {
continue;
}
if (func_8005D218(globalCtx, left, &sp88) != 0) {
@ -1870,7 +1869,7 @@ void CollisionCheck_AC_CylVsCyl(GlobalContext* globalCtx, CollisionCheckContext*
if (func_8005DF74(&left->body, &right->body) == 1) {
return;
}
if (Math3D_CylinderOutCylinderDist(&left->dim, &right->dim, &sp6C, &sp68) == 1) {
if (Math3D_CylOutsideCylDist(&left->dim, &right->dim, &sp6C, &sp68) == 1) {
Math_Vec3s_ToVec3f(&sp50, &left->dim.pos);
Math_Vec3s_ToVec3f(&sp44, &right->dim.pos);
if (!(fabsf(sp68) < 0.008f)) {
@ -1904,7 +1903,7 @@ void CollisionCheck_AC_CylVsTris(GlobalContext* globalCtx, CollisionCheckContext
if (func_8005DF74(&left->body, &rItem->body) == 1) {
continue;
}
if (Math3D_CylTriTouchingIntersect(&left->dim, &rItem->dim, &sp68) == 1) {
if (Math3D_CylTriVsIntersect(&left->dim, &rItem->dim, &sp68) == 1) {
Math_Vec3s_ToVec3f(&sp5C, &left->dim.pos);
sp50.x = (rItem->dim.vtx[0].x + rItem->dim.vtx[1].x + rItem->dim.vtx[2].x) * (1.0f / 3);
@ -1938,7 +1937,7 @@ void CollisionCheck_AC_TrisVsCyl(GlobalContext* globalCtx, CollisionCheckContext
continue;
}
if (Math3D_CylTriTouchingIntersect(&right->dim, &lItem->dim, &D_8015E310) == 1) {
if (Math3D_CylTriVsIntersect(&right->dim, &lItem->dim, &D_8015E310) == 1) {
sp60.x = (lItem->dim.vtx[0].x + lItem->dim.vtx[1].x + lItem->dim.vtx[2].x) * (1.0f / 3);
sp60.y = (lItem->dim.vtx[0].y + lItem->dim.vtx[1].y + lItem->dim.vtx[2].y) * (1.0f / 3);
sp60.z = (lItem->dim.vtx[0].z + lItem->dim.vtx[1].z + lItem->dim.vtx[2].z) * (1.0f / 3);
@ -1974,7 +1973,7 @@ void CollisionCheck_AC_CylVsQuad(GlobalContext* globalCtx, CollisionCheckContext
}
Math3D_TriNorm(&D_8015E320, &right->dim.quad[2], &right->dim.quad[3], &right->dim.quad[1]);
Math3D_TriNorm(&D_8015E358, &right->dim.quad[1], &right->dim.quad[0], &right->dim.quad[2]);
if (Math3D_CylTriTouchingIntersect(&left->dim, &D_8015E320, &D_8015E390) == 1) {
if (Math3D_CylTriVsIntersect(&left->dim, &D_8015E320, &D_8015E390) == 1) {
Math_Vec3s_ToVec3f(&sp64, &left->dim.pos);
sp58.x =
(right->dim.quad[0].x + (right->dim.quad[1].x + (right->dim.quad[3].x + right->dim.quad[2].x))) * 0.25f;
@ -1985,7 +1984,7 @@ void CollisionCheck_AC_CylVsQuad(GlobalContext* globalCtx, CollisionCheckContext
func_8005E81C(globalCtx, &left->base, &left->body, &sp64, &right->base, &right->body, &sp58, &D_8015E390);
return;
}
if (Math3D_CylTriTouchingIntersect(&left->dim, &D_8015E358, &D_8015E390) == 1) {
if (Math3D_CylTriVsIntersect(&left->dim, &D_8015E358, &D_8015E390) == 1) {
Math_Vec3s_ToVec3f(&sp4C, &left->dim.pos);
sp40.x = (right->dim.quad[0].x + (right->dim.quad[1].x + (right->dim.quad[3].x + right->dim.quad[2].x))) *
(1.0f / 4);
@ -2020,7 +2019,7 @@ void CollisionCheck_AC_QuadVsCyl(GlobalContext* globalCtx, CollisionCheckContext
}
Math3D_TriNorm(&D_8015E3A0, &left->dim.quad[2], &left->dim.quad[3], &left->dim.quad[1]);
Math3D_TriNorm(&D_8015E3D8, &left->dim.quad[2], &left->dim.quad[1], &left->dim.quad[0]);
if (Math3D_CylTriTouchingIntersect(&right->dim, &D_8015E3A0, &D_8015E410) == 1) {
if (Math3D_CylTriVsIntersect(&right->dim, &D_8015E3A0, &D_8015E410) == 1) {
if (func_8005D218(globalCtx, left, &D_8015E410) != 0) {
sp64.x = (left->dim.quad[0].x + (left->dim.quad[1].x + (left->dim.quad[3].x + left->dim.quad[2].x))) *
(1.0f / 4);
@ -2033,7 +2032,7 @@ void CollisionCheck_AC_QuadVsCyl(GlobalContext* globalCtx, CollisionCheckContext
return;
}
}
if (Math3D_CylTriTouchingIntersect(&right->dim, &D_8015E3D8, &D_8015E410) == 1) {
if (Math3D_CylTriVsIntersect(&right->dim, &D_8015E3D8, &D_8015E410) == 1) {
if (func_8005D218(globalCtx, left, &D_8015E410) != 0) {
sp4C.x = (left->dim.quad[0].x + (left->dim.quad[1].x + (left->dim.quad[3].x + left->dim.quad[2].x))) *
(1.0f / 4);
@ -2071,7 +2070,7 @@ void CollisionCheck_AC_TrisVsTris(GlobalContext* globalCtx, CollisionCheckContex
if (func_8005DF74(&lItem->body, &rItem->body) == 1) {
continue;
}
if (Math3D_TrisIntersect(&lItem->dim, &rItem->dim, &D_8015E420) == 1) {
if (Math3D_TriVsTriIntersect(&lItem->dim, &rItem->dim, &D_8015E420) == 1) {
sp5C.x = (lItem->dim.vtx[0].x + lItem->dim.vtx[1].x + lItem->dim.vtx[2].x) * (1.0f / 3);
sp5C.y = (lItem->dim.vtx[0].y + lItem->dim.vtx[1].y + lItem->dim.vtx[2].y) * (1.0f / 3);
sp5C.z = (lItem->dim.vtx[0].z + lItem->dim.vtx[1].z + lItem->dim.vtx[2].z) * (1.0f / 3);
@ -2110,8 +2109,8 @@ void CollisionCheck_AC_TrisVsQuad(GlobalContext* globalCtx, CollisionCheckContex
if (func_8005DF74(&lItem->body, &right->body) == 1) {
continue;
}
if (Math3D_TrisIntersect(&D_8015E440, &lItem->dim, &D_8015E430) == 1 ||
Math3D_TrisIntersect(&D_8015E478, &lItem->dim, &D_8015E430) == 1) {
if (Math3D_TriVsTriIntersect(&D_8015E440, &lItem->dim, &D_8015E430) == 1 ||
Math3D_TriVsTriIntersect(&D_8015E478, &lItem->dim, &D_8015E430) == 1) {
sp68.x = (lItem->dim.vtx[0].x + lItem->dim.vtx[1].x + lItem->dim.vtx[2].x) * (1.0f / 3);
sp68.y = (lItem->dim.vtx[0].y + lItem->dim.vtx[1].y + lItem->dim.vtx[2].y) * (1.0f / 3);
sp68.z = (lItem->dim.vtx[0].z + lItem->dim.vtx[1].z + lItem->dim.vtx[2].z) * (1.0f / 3);
@ -2156,8 +2155,8 @@ void CollisionCheck_AC_QuadVsTris(GlobalContext* globalCtx, CollisionCheckContex
if (func_8005DF74(&left->body, &rItem->body) == 1) {
continue;
}
if (Math3D_TrisIntersect(&D_8015E4C0, &rItem->dim, &D_8015E4B0) == 1 ||
Math3D_TrisIntersect(&D_8015E4F8, &rItem->dim, &D_8015E4B0) == 1) {
if (Math3D_TriVsTriIntersect(&D_8015E4C0, &rItem->dim, &D_8015E4B0) == 1 ||
Math3D_TriVsTriIntersect(&D_8015E4F8, &rItem->dim, &D_8015E4B0) == 1) {
if (func_8005D218(globalCtx, left, &D_8015E4B0) != 0) {
sp5C.x = (rItem->dim.vtx[0].x + rItem->dim.vtx[1].x + rItem->dim.vtx[2].x) * (1.0f / 3);
sp5C.y = (rItem->dim.vtx[0].y + rItem->dim.vtx[1].y + rItem->dim.vtx[2].y) * (1.0f / 3);
@ -2209,7 +2208,7 @@ void CollisionCheck_AC_QuadVsQuad(GlobalContext* globalCtx, CollisionCheckContex
Math3D_TriNorm(&D_8015E530[1], &right->dim.quad[2], &right->dim.quad[1], &right->dim.quad[0]);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
if (Math3D_TrisIntersect(&D_8015E5A8[j], &D_8015E530[i], &D_8015E598) == 1) {
if (Math3D_TriVsTriIntersect(&D_8015E5A8[j], &D_8015E530[i], &D_8015E598) == 1) {
if (func_8005D218(globalCtx, left, &D_8015E598) != 0) {
sp6C.x =
(left->dim.quad[0].x + (left->dim.quad[1].x + (left->dim.quad[3].x + left->dim.quad[2].x))) *
@ -2512,7 +2511,7 @@ void CollisionCheck_OC_JntSphVsJntSph(GlobalContext* globalCtx, CollisionCheckCo
if (!(rItem->body.ocFlags & 1)) {
continue;
}
if (Math3D_SpheresTouchingSurface(&lItem->dim.worldSphere, &rItem->dim.worldSphere, &sp74) == 1) {
if (Math3D_SphVsSphOverlap(&lItem->dim.worldSphere, &rItem->dim.worldSphere, &sp74) == 1) {
Math_Vec3s_ToVec3f(&sp68, &lItem->dim.worldSphere.center);
Math_Vec3s_ToVec3f(&sp5C, &rItem->dim.worldSphere.center);
func_800614A4(&left->base, &lItem->body, &sp68, &right->base, &rItem->body, &sp5C, sp74);
@ -2542,7 +2541,7 @@ void CollisionCheck_OC_JntSphVsCyl(GlobalContext* globalCtx, CollisionCheckConte
if (!(lItem->body.ocFlags & 1)) {
continue;
}
if (func_800CFD84(&lItem->dim.worldSphere, &right->dim, &sp78) == 1) {
if (Math3D_SphVsCylOverlapDist(&lItem->dim.worldSphere, &right->dim, &sp78) == 1) {
Math_Vec3s_ToVec3f(&sp6C, &lItem->dim.worldSphere.center);
Math_Vec3s_ToVec3f(&sp60, &right->dim.pos);
func_800614A4(&left->base, &lItem->body, &sp6C, &right->base, &right->body, &sp60, sp78);
@ -2569,7 +2568,7 @@ void CollisionCheck_OC_CylVsCyl(GlobalContext* globalCtx, CollisionCheckContext*
if (!(left->body.ocFlags & 1) || !(right->body.ocFlags & 1)) {
return;
}
if (Math3D_CylinderOutCylinder(&left->dim, &right->dim, &sp4C) == 1) {
if (Math3D_CylOutsideCyl(&left->dim, &right->dim, &sp4C) == 1) {
Math_Vec3s_ToVec3f(&sp40, &left->dim.pos);
Math_Vec3s_ToVec3f(&sp34, &right->dim.pos);
func_800614A4(&left->base, &left->body, &sp40, &right->base, &right->body, &sp34, sp4C);
@ -2787,7 +2786,7 @@ s32 CollisionCheck_generalLineOcCheck_JntSph(GlobalContext* globalCtx, Collision
}
D_8015E610.a = *arg3;
D_8015E610.b = *arg4;
if (func_800CE600(&item->dim.worldSphere, &D_8015E610) == 1) {
if (Math3D_LineVsSph(&item->dim.worldSphere, &D_8015E610) == 1) {
return 1;
}
}
@ -2803,7 +2802,7 @@ s32 CollisionCheck_generalLineOcCheck_Cyl(GlobalContext* globalCtx, CollisionChe
if (!(cylinder->body.ocFlags & 1)) {
return 0;
}
if (func_800CEE0C(&cylinder->dim, arg3, arg4, &D_8015E628, &D_8015E638) != 0) {
if (Math3D_CylVsLineSeg(&cylinder->dim, arg3, arg4, &D_8015E628, &D_8015E638) != 0) {
return 1;
}
return 0;
@ -2898,7 +2897,7 @@ void func_800627A0(ColliderTris* collider, s32 index, Vec3f* a, Vec3f* b, Vec3f*
Math_Vec3f_Copy(&item->dim.vtx[0], a);
Math_Vec3f_Copy(&item->dim.vtx[1], b);
Math_Vec3f_Copy(&item->dim.vtx[2], c);
func_800CC8B4(a, b, c, &sp40, &sp3C, &sp38, &sp34);
Math3D_DefPlane(a, b, c, &sp40, &sp3C, &sp38, &sp34);
item->dim.plane.normal.x = sp40;
item->dim.plane.normal.y = sp3C;
item->dim.plane.normal.z = sp38;