Scaffold more gameMapParts, rework Sys structs

This commit is contained in:
HeartPiece 2024-04-25 00:10:02 +10:00
parent f69f40e6e0
commit 7a01d2de46
19 changed files with 437 additions and 277 deletions

View File

@ -88,19 +88,19 @@
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/dynCreature.cpp">dynCreature.cpp</a> | 25215 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gameDynamics.cpp">gameDynamics.cpp</a> | 25558 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemPikihead.cpp">itemPikihead.cpp</a> | 26530 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/vsCardMgr.cpp">vsCardMgr.cpp</a> | 30652 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/singleGS_MainGame.cpp">singleGS_MainGame.cpp</a> | 31879 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemBridge.cpp">itemBridge.cpp</a> | 32134 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemGate.cpp">itemGate.cpp</a> | 32754 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gamePlayDataMemCard.cpp">gamePlayDataMemCard.cpp</a> | 36009 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemGate.cpp">itemGate.cpp</a> | 32798 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gamePlayDataMemCard.cpp">gamePlayDataMemCard.cpp</a> | 36009 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/piki.cpp">piki.cpp</a> | 36225 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/routeMgr.cpp">routeMgr.cpp</a> | 39098 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gameGeneratorCache.cpp">gameGeneratorCache.cpp</a> | 40204 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/collinfo.cpp">collinfo.cpp</a> | 43410 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/mapMgr.cpp">mapMgr.cpp</a> | 44302 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/pikiMgr.cpp">pikiMgr.cpp</a> | 47897 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/mapMgr.cpp">mapMgr.cpp</a> | 44316 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/pikiMgr.cpp">pikiMgr.cpp</a> | 47897 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/aiFormation.cpp">aiFormation.cpp</a> | 52263 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/cellPyramid.cpp">cellPyramid.cpp</a> | 52507 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/singleGS_CaveGame.cpp">singleGS_CaveGame.cpp</a> | 52763 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/navi_demoCheck.cpp">navi_demoCheck.cpp</a> | 57727 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemWeed.cpp">itemWeed.cpp</a> | 62058 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/pelletState.cpp">pelletState.cpp</a> | 62948 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemUjamushi.cpp">itemUjamushi.cpp</a> | 63548 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/fakePiki.cpp">fakePiki.cpp</a> | 65612 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemUjamushi.cpp">itemUjamushi.cpp</a> | 63548 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/fakePiki.cpp">fakePiki.cpp</a> | 65620 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gamePlayData.cpp">gamePlayData.cpp</a> | 66045 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/itemPlant.cpp">itemPlant.cpp</a> | 73150 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/baseGameSection.cpp">baseGameSection.cpp</a> | 91759 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/aiPrimitives.cpp">aiPrimitives.cpp</a> | 116997 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/pelletMgr.cpp">pelletMgr.cpp</a> | 142649 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/navi.cpp">navi.cpp</a> | 151194 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/pikiState.cpp">pikiState.cpp</a> | 153257 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/singleGS_Zukan.cpp">singleGS_Zukan.cpp</a> | 161342 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gameMapParts.cpp">gameMapParts.cpp</a> | 168069 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/naviState.cpp">naviState.cpp</a> | 181111 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/gameMapParts.cpp">gameMapParts.cpp</a> | 174234 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/plugProjectKandoU/naviState.cpp">naviState.cpp</a> | 181111 |
### <section id="plugProjectKonoU">plugProjectKonoU</section>
| File | Size (bytes) | File | Size (bytes) |
@ -179,10 +179,10 @@
### <section id="sysCommonU">sysCommonU</section>
| File | Size (bytes) | File | Size (bytes) |
| ---- | ---- | ---- | ---- |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomCylinder.cpp">geomCylinder.cpp</a> | 8446 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomIntersection.cpp">geomIntersection.cpp</a> | 11431 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomTraceMove.cpp">geomTraceMove.cpp</a> | 18982 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/camera.cpp">camera.cpp</a> | 26810 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/sysMath.cpp">sysMath.cpp</a> | 30489 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomOBBTree.cpp">geomOBBTree.cpp</a> | 82287 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geometry.cpp">geometry.cpp</a> | 104686 | | |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomCylinder.cpp">geomCylinder.cpp</a> | 8376 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomIntersection.cpp">geomIntersection.cpp</a> | 11269 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomTraceMove.cpp">geomTraceMove.cpp</a> | 18982 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/camera.cpp">camera.cpp</a> | 26704 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/sysMath.cpp">sysMath.cpp</a> | 30400 | <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geomOBBTree.cpp">geomOBBTree.cpp</a> | 82125 |
| <a href="https://github.com/projectPiki/pikmin2/tree/main/src/sysCommonU/geometry.cpp">geometry.cpp</a> | 104553 | | |
### <section id="sysGCU">sysGCU</section>
| File | Size (bytes) | File | Size (bytes) |

View File

@ -275,7 +275,7 @@ struct RoomMapMgr : public MapMgr {
virtual void doSetView(int viewportNumber); // _58
virtual void doViewCalc(); // _5C
virtual Sys::TriIndexList* traceMove_new(MoveInfo&, f32); // _60
virtual void traceMove_original(MoveInfo&, f32); // _64
virtual Sys::TriIndexList* traceMove_original(MoveInfo&, f32); // _64
MapRoom* getMapRoom(s16 roomIdx);
void createRandomMap(int floorNum, Cave::EditMapUnit* editInfo);

View File

@ -5,32 +5,23 @@
struct Plane {
Plane()
: a(0.0f)
, b(1.0f)
, c(0.0f)
, d(0.0f)
: mNormal(0.0f, 1.0f, 0.0f)
, mOffset(0.0f)
{
}
void read(Stream&);
void write(Stream&);
f32 calcDist(const Vector3f& vec) const { return (vec.x * a + vec.y * b + vec.z * c - d); }
f32 calcDist(const Vector3f& vec) const { return (vec.x * mNormal.x + vec.y * mNormal.y + vec.z * mNormal.z - mOffset); }
inline void setVec(Plane& plane)
{
a = plane.a;
b = plane.b;
c = plane.c;
}
inline void setVec(Plane& plane) { mNormal = plane.mNormal; }
inline void setDist(Plane& plane) { d = plane.d; }
inline void setDist(Plane& plane) { mOffset = plane.mOffset; }
void calcProjection(Vector3f&);
void intersectRay(Vector3f&, Vector3f&);
f32 a;
f32 b;
f32 c;
f32 d;
Vector3f mNormal; // _00
f32 mOffset; // _0C
};
#endif

View File

@ -15,6 +15,8 @@ struct IndexList : public ArrayContainer<int> {
{
p1 = stream.readInt();
}
inline int getIndex(int idx) { return mObjects[idx]; }
};
} // namespace Sys

View File

@ -71,22 +71,23 @@ struct OBB : public CNode {
axisVec->y = mAxes[i].y;
axisVec->z = mAxes[i].z;
Vector3f scaledVec = *axisVec * max;
mSidePlanes[i].a = axisVec->x;
mSidePlanes[i].b = axisVec->y;
mSidePlanes[i].c = axisVec->z;
mSidePlanes[i].d = mSidePlanes[i].a * (mPosition.x + scaledVec.x) + mSidePlanes[i].b * (mPosition.y + scaledVec.y)
+ mSidePlanes[i].c * (mPosition.z + scaledVec.z);
Vector3f scaledVec = *axisVec * max;
mSidePlanes[i].mNormal.x = axisVec->x;
mSidePlanes[i].mNormal.y = axisVec->y;
mSidePlanes[i].mNormal.z = axisVec->z;
mSidePlanes[i].mOffset = mSidePlanes[i].mNormal.x * (mPosition.x + scaledVec.x)
+ mSidePlanes[i].mNormal.y * (mPosition.y + scaledVec.y)
+ mSidePlanes[i].mNormal.z * (mPosition.z + scaledVec.z);
}
inline void setMinPlane(int i)
{
mSidePlanes[i + 3].a = -mAxes[i].x;
mSidePlanes[i + 3].b = -mAxes[i].y;
mSidePlanes[i + 3].c = -mAxes[i].z;
mSidePlanes[i + 3].d = mSidePlanes[i + 3].a * (mPosition.x + (-mAxes[i].x * mMinXYZ[i]))
+ mSidePlanes[i + 3].b * (mPosition.y + (-mAxes[i].y * mMinXYZ[i]))
+ mSidePlanes[i + 3].c * (mPosition.z + (-mAxes[i].z * mMinXYZ[i]));
mSidePlanes[i + 3].mNormal.x = -mAxes[i].x;
mSidePlanes[i + 3].mNormal.y = -mAxes[i].y;
mSidePlanes[i + 3].mNormal.z = -mAxes[i].z;
mSidePlanes[i + 3].mOffset = mSidePlanes[i + 3].mNormal.x * (mPosition.x + (-mAxes[i].x * mMinXYZ[i]))
+ mSidePlanes[i + 3].mNormal.y * (mPosition.y + (-mAxes[i].y * mMinXYZ[i]))
+ mSidePlanes[i + 3].mNormal.z * (mPosition.z + (-mAxes[i].z * mMinXYZ[i]));
}
Plane mSidePlanes[6]; // _18

View File

@ -59,7 +59,7 @@ struct Triangle {
static bool debug;
Vector3i mVertices; // _00, _04, _08 - addresses of each vertex in vertex table
int mVertices[3]; // _00, _04, _08 - addresses of each vertex in vertex table
Plane mTrianglePlane; // _0C - ax + by + cz + d form of plane triangle lies in
Plane mEdgePlanes[3]; // _1C, _2C, _3C - plane through each side of triangle (?)
Sphere mSphere; // _4C - bounding sphere of triangle

View File

@ -18,9 +18,9 @@ struct TriangleTable : public ArrayContainer<Triangle> {
virtual ~TriangleTable() { } // _08 (weak)
virtual void writeObject(Stream& output, Triangle& triangle) // _2C (weak)
{
output.writeInt(triangle.mVertices.x);
output.writeInt(triangle.mVertices.y);
output.writeInt(triangle.mVertices.z);
output.writeInt(triangle.mVertices[0]);
output.writeInt(triangle.mVertices[1]);
output.writeInt(triangle.mVertices[2]);
triangle.mTrianglePlane.write(output);
triangle.mEdgePlanes[0].write(output);
@ -29,9 +29,9 @@ struct TriangleTable : public ArrayContainer<Triangle> {
}
virtual void readObject(Stream& input, Triangle& triangle) // _30 (weak)
{
triangle.mVertices.x = input.readInt();
triangle.mVertices.y = input.readInt();
triangle.mVertices.z = input.readInt();
triangle.mVertices[0] = input.readInt();
triangle.mVertices[1] = input.readInt();
triangle.mVertices[2] = input.readInt();
triangle.mTrianglePlane.read(input);
triangle.mEdgePlanes[0].read(input);
triangle.mEdgePlanes[1].read(input);
@ -46,8 +46,10 @@ struct TriangleTable : public ArrayContainer<Triangle> {
Triangle* currTriangle = &mObjects[i];
Triangle* refTriangle = &triTable->mObjects[i];
currTriangle->mVertices = refTriangle->mVertices;
currTriangle->mCode = refTriangle->mCode;
currTriangle->mVertices[0] = refTriangle->mVertices[0];
currTriangle->mVertices[1] = refTriangle->mVertices[1];
currTriangle->mVertices[2] = refTriangle->mVertices[2];
currTriangle->mCode = refTriangle->mCode;
currTriangle->makePlanes(*vtxTable);
currTriangle->createSphere(*vtxTable);
}
@ -72,7 +74,13 @@ struct VertexTable : public ArrayContainer<Vector3f> {
virtual void writeObject(Stream&, Vector3f&); // _2C
virtual void readObject(Stream& input, Vector3f& vertex) { vertex.read(input); } // _30 (weak)
virtual void write(Stream&); // _34
virtual void addOne(Vector3f&); // _40 (weak)
virtual void addOne(Vector3f& vert) // _40 (weak)
{
if (mCount < mLimit) {
mObjects[mCount++] = vert;
}
mBoundBox.include(vert);
}
void transform(Matrixf&);
void cloneFrom(Matrixf&, VertexTable*);

View File

@ -47,6 +47,9 @@ inline f32 normalise(Vector3f* a)
}
// useful for planes, could be a plane method
inline f32 planeDist(Vector3f& vec, Plane& plane) { return (vec.x * plane.a + vec.y * plane.b + vec.z * plane.c) - plane.d; }
inline f32 planeDist(Vector3f& vec, Plane& plane)
{
return (vec.x * plane.mNormal.x + vec.y * plane.mNormal.y + vec.z * plane.mNormal.z) - plane.mOffset;
}
#endif

View File

@ -1521,7 +1521,7 @@ void FakePiki::move(f32 rate)
wallCallback(info.mReflectPosition);
}
if (mBounceTriangle && mBounceTriangle->mTrianglePlane.b > 0.6f) {
if (mBounceTriangle && mBounceTriangle->mTrianglePlane.mNormal.y > 0.6f) {
mFakePikiBounceTriangle = mBounceTriangle;
}

View File

@ -11,6 +11,7 @@
#include "JSystem/JUtility/JUTTexture.h"
#include "Dolphin/rand.h"
#include "Sys/TriangleTable.h"
#include "Sys/RayIntersectInfo.h"
#include "VsOtakaraName.h"
#include "nans.h"
@ -920,12 +921,10 @@ RoomMapMgr::RoomMapMgr(Cave::CaveInfo* info)
mBoundbox.mMin = Vector3f(SHORT_FLOAT_MAX);
mBoundbox.mMax = Vector3f(-SHORT_FLOAT_MAX);
mCaveInfo = info;
mFloorInfo = nullptr;
mSublevel = 0;
mTriangle.mTrianglePlane.a = 0.0f;
mTriangle.mTrianglePlane.b = 1.0f;
mTriangle.mTrianglePlane.c = 0.0f;
mCaveInfo = info;
mFloorInfo = nullptr;
mSublevel = 0;
mTriangle.mTrianglePlane.mNormal = Vector3f(0.0f, 1.0f, 0.0f);
mWraith = nullptr;
}
@ -2648,8 +2647,56 @@ void RoomMapMgr::createGlobalCollision()
triTable->addOne(tri);
}
int count21 = 0;
int count20 = 0;
Iterator<MapRoom> iterCreate(&mRoomMgr);
CI_LOOP(iterCreate) { MapRoom* room = *iterCreate; }
CI_LOOP(iterCreate)
{
MapRoom* room = *iterCreate;
Matrixf& mtx = room->_0D8;
Sys::VertexTable* verts = room->mUnit->mCollision.mDivider->mVertexTable; // r26
Sys::TriangleTable* tris = room->mUnit->mCollision.mDivider->mTriangleTable; // r19
for (int i = 0; i < verts->getNum(); i++) {
Vector3f preVert = *verts->getVertex(i);
Vector3f vert = mtx.mtxMult(preVert);
vertTable->addOne(vert);
count21++;
}
for (int i = 0; i < tris->getNum(); i++) {
Sys::Triangle* preTri = tris->getTriangle(i);
Sys::Triangle* postTri = triTable->getTriangle(i);
postTri->mVertices[0] = preTri->mVertices[0] + count20;
postTri->mVertices[1] = preTri->mVertices[1] + count20;
postTri->mVertices[2] = preTri->mVertices[2] + count20;
postTri->mCode = preTri->mCode;
postTri->makePlanes(*vertTable);
postTri->createSphere(*vertTable);
mRoomTriIndices[i] = room->mIndex;
}
count20 = count21;
}
box = vertTable->mBoundBox;
box.mMin = box.mMin - Vector3f(10.0f);
box.mMax = box.mMax + Vector3f(10.0f);
mMapCollision = new MapCollision;
mMapCollision->mDivider = new Sys::GridDivider;
int countX = 48;
int countZ = 48;
int altX = (f32)((int)absF(box.mMax.x - box.mMin.x)) / 64;
int altZ = (f32)((int)absF(box.mMax.z - box.mMin.z)) / 64;
if (altX < 48) {
countX = altX;
}
if (altZ < 48) {
countZ = altZ;
}
static_cast<Sys::GridDivider*>(mMapCollision->mDivider)->create(box, countX, countZ, vertTable, triTable);
P2DEBUG("After: %d", JKRGetCurrentHeap()->getTotalFreeSize());
/*
@ -3378,8 +3425,58 @@ lbl_801BAB44:
* @note Address: 0x801BAD60
* @note Size: 0x328
*/
Sys::TriIndexList* RoomMapMgr::traceMove_new(MoveInfo&, f32)
Sys::TriIndexList* RoomMapMgr::traceMove_new(MoveInfo& info, f32 step)
{
Vector3f* velocity = info.mVelocity; // r25
Sys::Sphere* moveSphere = info.mMoveSphere; // r26
Vector3f startPos = moveSphere->mPosition;
moveSphere->mPosition = moveSphere->mPosition + *info.mVelocity * step;
moveSphere->mPosition = moveSphere->mPosition;
Sys::TriIndexList* triList = mMapCollision->mDivider->findTriLists(*moveSphere);
Sys::Sphere sphere44; // r29
Sys::Sphere sphere34; // r28
Sys::VertexTable* vertTable = mMapCollision->mDivider->mVertexTable; // r23
for (triList; triList; triList = static_cast<Sys::TriIndexList*>(triList->mNext)) {
for (int i = 0; i < triList->getNum(); i++) {
int index = triList->getIndex(i);
Sys::Triangle* tri = mMapCollision->mDivider->mTriangleTable->getTriangle(index);
Sys::Triangle::SphereSweep sweep;
sweep.mStartPos = startPos;
sweep.mSphere = *moveSphere;
if (info.mUseIntersectionAlgo) {
sweep.mSweepType = Sys::Triangle::SphereSweep::ST_SphereIntersectPlane;
}
if (tri->intersect(*vertTable, sweep)) {
info.mRoomIndex = mRoomTriIndices[index];
sphere34.mPosition = sphere34.mPosition;
Vector3f old34 = sphere34.mPosition;
if (info.mIntersectCallback) {
info.mIntersectCallback->invoke(sphere44.mPosition, sphere34.mPosition);
}
if (sphere34.mPosition.y >= info.mBounceThreshold) {
info.mBounceTriangle = tri;
info.mPosition = sphere34.mPosition;
} else if (absF(sphere34.mPosition.y) <= info.mWallThreshold) {
info.mWallTriangle = tri;
info.mReflectPosition = sphere34.mPosition;
}
f32 dotProd = sphere34.mPosition.dot(*velocity);
dotProd = (1.0f + info.mTraceRadius) * dotProd;
*velocity = *velocity - sphere34.mPosition * dotProd;
moveSphere->mPosition = moveSphere->mPosition + old34 * sphere34.mRadius;
}
Sys::Triangle::debug = false;
}
}
return nullptr;
/*
stwu r1, -0xe0(r1)
mflr r0
@ -3609,8 +3706,65 @@ lbl_801BB038:
* @note Address: 0x801BB088
* @note Size: 0x740
*/
void RoomMapMgr::traceMove_original(MoveInfo&, f32)
Sys::TriIndexList* RoomMapMgr::traceMove_original(MoveInfo& info, f32 step)
{
Iterator<MapRoom> iterRoom(&mRoomMgr);
int count = 0;
Vector3f* velocity = info.mVelocity;
Sys::Sphere* moveSphere = info.mMoveSphere; // r19
Vector3f startPos = moveSphere->mPosition;
moveSphere->mPosition = moveSphere->mPosition + *info.mVelocity * step;
CI_LOOP(iterRoom)
{
MapRoom* room = *iterRoom; // r31
if (sqrDistanceXZ(room->mBoundingSphere.mPosition, moveSphere->mPosition)
> SQUARE(room->mBoundingSphere.mRadius + moveSphere->mRadius)) {
continue;
}
MapUnit* unit = room->mUnit;
moveSphere->mPosition = room->_108.mtxMult(moveSphere->mPosition);
Sys::TriIndexList* triList = unit->mCollision.mDivider->findTriLists(*moveSphere); // r18
for (triList; triList && count < 8; triList = static_cast<Sys::TriIndexList*>(triList->mNext)) {
Sys::VertexTable* vertTable = unit->mCollision.mDivider->mVertexTable;
for (int i = 0; i < triList->getNum(); i++) {
Sys::Triangle* tri = unit->mCollision.mDivider->mTriangleTable->getTriangle(triList->getIndex(i));
if ((info.mUseIntersectionAlgo) ? tri->intersectHard(*vertTable, *moveSphere, info.mBaseSpherePos)
: tri->intersect(*vertTable, *moveSphere, info.mBaseSpherePos)) {
info.mBaseSpherePos = room->_0D8.mtxMult(info.mBaseSpherePos);
Vector3f triNorm = tri->mTrianglePlane.mNormal;
triNorm = room->_108.multTranspose(triNorm);
if (info.mIntersectCallback) {
info.mIntersectCallback->invoke(info.mBaseSpherePos, triNorm);
}
if (count < 8) {
JUT_ASSERTLINE(2856, count < 8, "siboudesu !\n");
count++;
}
}
Sys::Triangle::debug = false;
}
}
moveSphere->mPosition = room->_0D8.mtxMult(moveSphere->mPosition);
}
if (count == 0) {
return nullptr;
}
int count2 = 0;
for (int i = 0; i < count; i++) {
count2++;
}
if (count2 == 0) {
return nullptr;
}
/*
stwu r1, -0x150(r1)
mflr r0
@ -4143,8 +4297,18 @@ lbl_801BB7B4:
* @note Address: 0x801BB7C8
* @note Size: 0x4F0
*/
bool RoomMapMgr::findRayIntersection(Sys::RayIntersectInfo&)
bool RoomMapMgr::findRayIntersection(Sys::RayIntersectInfo& info)
{
Iterator<MapRoom> iterRoom(&mRoomMgr);
Vector3f intersectPos;
bool result = false;
CI_LOOP(iterRoom)
{
MapRoom* room = *iterRoom; // r29
}
info.mIntersectPosition = intersectPos;
return result;
/*
stwu r1, -0x160(r1)
mflr r0
@ -5051,8 +5215,23 @@ lbl_801BC490:
* @note Address: 0x801BC4B4
* @note Size: 0x460
*/
void RoomMapMgr::getCurrTri(CurrTriInfo&)
void RoomMapMgr::getCurrTri(CurrTriInfo& info)
{
info.mMaxY = 328000.0f;
Iterator<MapRoom> iterRoom(&mRoomMgr);
CI_LOOP(iterRoom) { MapRoom* room = *iterRoom; }
if (mFloorInfo->hasHiddenCollision() && info.mMinY < 0.0f) {
info.mMinY = 0.0f;
info.mMaxY = 0.0f;
info.mTriangle = &mTriangle;
return;
}
if (!info.mTriangle) {
info.mMaxY = 0.0f;
info.mMinY = 0.0f;
}
/*
stwu r1, -0x60(r1)
mflr r0
@ -5537,8 +5716,8 @@ void RoomMapMgr::makeOneRoom(f32 centreX, f32 centreY, f32 direction, char* unit
Door* door = mui->getDoor(wp->_76); // r22
Vector3f doorDirs[4] = { (Vector3f) { 1.0f, 0.0f, 0.0f }, (Vector3f) { 0.0f, 0.0f, 1.0f }, (Vector3f) { 0.0f, 0.0f, 0.0f },
(Vector3f) { 0.0f, 1.0f, 0.0f } }; // 0x1B4
Vector3f doorDirs[4] = { (Vector3f) { 0.0f, 0.0f, 1.0f }, (Vector3f) { 1.0f, 0.0f, 0.0f }, (Vector3f) { 0.0f, 0.0f, -1.0f },
(Vector3f) { -1.0f, 0.0f, 0.0f } }; // 0x1B4
if (!aliveRoom) {
P2ASSERTBOOLLINE(3480, wp->mIndex >= 0 && wp->mIndex < counter);

View File

@ -447,31 +447,31 @@ void ItemGate::initPlanes()
Vector3f pos = getPosition();
Vector3f plane0vec = pos + (_270 * 20.0f);
mPlanes[0].a = _270.x;
mPlanes[0].b = _270.y;
mPlanes[0].c = _270.z;
mPlanes[0].d = _270.dot(plane0vec);
Vector3f plane0vec = pos + (_270 * 20.0f);
mPlanes[0].mNormal.x = _270.x;
mPlanes[0].mNormal.y = _270.y;
mPlanes[0].mNormal.z = _270.z;
mPlanes[0].mOffset = _270.dot(plane0vec);
Vector3f vec2 = (-_270.x, -_270.y, _270.z);
Vector3f plane1vec = pos + (vec2 * 20.0f);
mPlanes[1].a = vec2.x;
mPlanes[1].b = vec2.y;
mPlanes[1].c = vec2.z;
mPlanes[1].d = vec2.dot(plane1vec);
Vector3f vec2 = (-_270.x, -_270.y, _270.z);
Vector3f plane1vec = pos + (vec2 * 20.0f);
mPlanes[1].mNormal.x = vec2.x;
mPlanes[1].mNormal.y = vec2.y;
mPlanes[1].mNormal.z = vec2.z;
mPlanes[1].mOffset = vec2.dot(plane1vec);
Vector3f plane2vec = pos + (_264 * 76.5f);
mPlanes[2].a = _264.x;
mPlanes[2].b = _264.y;
mPlanes[2].c = _264.z;
mPlanes[2].d = _264.dot(plane2vec);
Vector3f plane2vec = pos + (_264 * 76.5f);
mPlanes[2].mNormal.x = _264.x;
mPlanes[2].mNormal.y = _264.y;
mPlanes[2].mNormal.z = _264.z;
mPlanes[2].mOffset = _264.dot(plane2vec);
Vector3f vec3 = (-_264.x, -_264.y, _264.z);
Vector3f plane3vec = pos + (vec3 * 76.5f);
mPlanes[3].a = vec3.x;
mPlanes[3].b = vec3.y;
mPlanes[3].c = vec3.z;
mPlanes[3].d = vec3.dot(plane3vec);
Vector3f vec3 = (-_264.x, -_264.y, _264.z);
Vector3f plane3vec = pos + (vec3 * 76.5f);
mPlanes[3].mNormal.x = vec3.x;
mPlanes[3].mNormal.y = vec3.y;
mPlanes[3].mNormal.z = vec3.z;
mPlanes[3].mOffset = vec3.dot(plane3vec);
/*
stwu r1, -0xb0(r1)
mflr r0

View File

@ -94,9 +94,9 @@ void TDispTriangleArray::draw(Graphics&)
void TDispTriangle::store(Sys::Triangle& triangle, Sys::VertexTable& vertexTable, int index)
{
mSysTriangle = &triangle;
mVertices[0] = vertexTable.mObjects[triangle.mVertices.x];
mVertices[1] = vertexTable.mObjects[triangle.mVertices.y];
mVertices[2] = vertexTable.mObjects[triangle.mVertices.z];
mVertices[0] = vertexTable.mObjects[triangle.mVertices[0]];
mVertices[1] = vertexTable.mObjects[triangle.mVertices[1]];
mVertices[2] = vertexTable.mObjects[triangle.mVertices[2]];
mFlags.clear();
mFlags.typeView |= 1;
mIndex = index;
@ -110,9 +110,9 @@ void TDispTriangle::store(Sys::Triangle& triangle, Sys::VertexTable& vertexTable
void TDispTriangle::store(Matrixf& mtx, Sys::Triangle& tri, Sys::VertexTable& vertTable, int index)
{
mSysTriangle = &tri;
mVertices[0] = mtx.mtxMult(vertTable.mObjects[tri.mVertices.x]);
mVertices[1] = mtx.mtxMult(vertTable.mObjects[tri.mVertices.y]);
mVertices[2] = mtx.mtxMult(vertTable.mObjects[tri.mVertices.z]);
mVertices[0] = mtx.mtxMult(vertTable.mObjects[tri.mVertices[0]]);
mVertices[1] = mtx.mtxMult(vertTable.mObjects[tri.mVertices[1]]);
mVertices[2] = mtx.mtxMult(vertTable.mObjects[tri.mVertices[2]]);
mFlags.clear();
mFlags.typeView |= 1;
mIndex = index;
@ -1678,7 +1678,7 @@ bool ShapeMapMgr::findRayIntersection(Sys::RayIntersectInfo& info)
f32 sqrDist = interVec.sqrDistance(startPos);
if (sqrDist < minDist) {
outPos = interVec;
info.mNormalY = tri->mTrianglePlane.b;
info.mNormalY = tri->mTrianglePlane.mNormal.y;
minDist = sqrDist;
}
}

View File

@ -233,9 +233,9 @@ void Obj::getShadowParam(ShadowParam& param)
if (mBounceTriangle) {
Plane* plane = &mBounceTriangle->mTrianglePlane;
param.mBoundingSphere.mPosition.x = plane->a;
param.mBoundingSphere.mPosition.y = plane->b;
param.mBoundingSphere.mPosition.z = plane->c;
param.mBoundingSphere.mPosition.x = plane->mNormal.x;
param.mBoundingSphere.mPosition.y = plane->mNormal.y;
param.mBoundingSphere.mPosition.z = plane->mNormal.z;
} else {
param.mBoundingSphere.mPosition = Vector3f(0.0f, 1.0f, 0.0f);
}

View File

@ -160,53 +160,45 @@ void CullFrustum::updatePlanes()
PSMTXRotAxisRad(outMat.mMatrix.mtxView, (Vec*)&row1, (PI - viewAngle));
PSMTXMultVec(outMat.mMatrix.mtxView, (Vec*)&row2, &outVec);
planeVec.x = outVec.x;
planeVec.y = outVec.y;
planeVec.z = outVec.z;
mObjects[0].a = planeVec.x;
mObjects[0].b = planeVec.y;
mObjects[0].c = planeVec.z;
dist = dot(planeVec, posVec);
mObjects[0].d = dist;
planeVec.x = outVec.x;
planeVec.y = outVec.y;
planeVec.z = outVec.z;
mObjects[0].mNormal = planeVec;
dist = dot(planeVec, posVec);
mObjects[0].mOffset = dist;
Vec outVec1;
Vector3f planeVec1;
PSMTXRotAxisRad(outMat.mMatrix.mtxView, (Vec*)&row1, viewAngle);
PSMTXMultVec(outMat.mMatrix.mtxView, (Vec*)&row2, &outVec1);
planeVec1.x = outVec1.x;
planeVec1.y = outVec1.y;
planeVec1.z = outVec1.z;
mObjects[1].a = planeVec1.x;
mObjects[1].b = planeVec1.y;
mObjects[1].c = planeVec1.z;
mObjects[1].d = dot(planeVec1, posVec);
planeVec1.x = outVec1.x;
planeVec1.y = outVec1.y;
planeVec1.z = outVec1.z;
mObjects[1].mNormal = planeVec1;
mObjects[1].mOffset = dot(planeVec1, posVec);
Vec outVec2;
Vector3f planeVec2;
PSMTXRotAxisRad(outMat.mMatrix.mtxView, (Vec*)&row1, -fovAngle);
PSMTXMultVec(outMat.mMatrix.mtxView, (Vec*)&row2, &outVec2);
planeVec2.x = outVec2.x;
planeVec2.y = outVec2.y;
planeVec2.z = outVec2.z;
mObjects[2].a = planeVec2.x;
mObjects[2].b = planeVec2.y;
mObjects[2].c = planeVec2.z;
mObjects[2].d = dot(planeVec2, posVec);
planeVec2.x = outVec2.x;
planeVec2.y = outVec2.y;
planeVec2.z = outVec2.z;
mObjects[2].mNormal = planeVec2;
mObjects[2].mOffset = dot(planeVec2, posVec);
Vec outVec3;
Vector3f planeVec3;
PSMTXRotAxisRad(outMat.mMatrix.mtxView, (Vec*)&row1, (PI + fovAngle));
PSMTXMultVec(outMat.mMatrix.mtxView, (Vec*)&row2, &outVec3);
planeVec3.x = outVec3.x;
planeVec3.y = outVec3.y;
planeVec3.z = outVec3.z;
mObjects[3].a = planeVec3.x;
mObjects[3].b = planeVec3.y;
mObjects[3].c = planeVec3.z;
mObjects[3].d = dot(planeVec3, posVec);
planeVec3.x = outVec3.x;
planeVec3.y = outVec3.y;
planeVec3.z = outVec3.z;
mObjects[3].mNormal = planeVec3;
mObjects[3].mOffset = dot(planeVec3, posVec);
/*
stwu r1, -0xf0(r1)
mflr r0
@ -472,19 +464,15 @@ void Camera::updatePlanes()
Vector3f pos = getPosition();
mObjects[4].a = -zVec.x;
mObjects[4].b = -zVec.y;
mObjects[4].c = -zVec.z;
Vector3f farPlaneVec(mObjects[4].a, mObjects[4].b, mObjects[4].c);
Vector3f farVec = zVec * mProjectionFar + pos;
mObjects[4].d = dot(farPlaneVec, farVec);
mObjects[4].mNormal = Vector3f(-zVec.x, -zVec.y, -zVec.z);
Vector3f farPlaneVec(mObjects[4].mNormal.x, mObjects[4].mNormal.y, mObjects[4].mNormal.z);
Vector3f farVec = zVec * mProjectionFar + pos;
mObjects[4].mOffset = dot(farPlaneVec, farVec);
mObjects[5].a = -zVec.x;
mObjects[5].b = -zVec.y;
mObjects[5].c = -zVec.z;
Vector3f nearPlaneVec(mObjects[5].a, mObjects[5].b, mObjects[5].c);
Vector3f nearVec = zVec * mProjectionNear + pos;
mObjects[5].d = dot(nearPlaneVec, farVec);
mObjects[5].mNormal = Vector3f(-zVec.x, -zVec.y, -zVec.z);
Vector3f nearPlaneVec(mObjects[5].mNormal.x, mObjects[5].mNormal.y, mObjects[5].mNormal.z);
Vector3f nearVec = zVec * mProjectionNear + pos;
mObjects[5].mOffset = dot(nearPlaneVec, farVec);
/*
stwu r1, -0x70(r1)
mflr r0

View File

@ -67,7 +67,7 @@ bool Cylinder::culled(Plane const& inputPlane)
Vector3f lowerVec = mCenter - scaledAxis;
Vector3f upperVec = mCenter + scaledAxis;
Vector3f planeVec(inputPlane.a, inputPlane.b, inputPlane.c);
Vector3f planeVec(inputPlane.mNormal);
f32 dotPlane = dot(mAxis, planeVec);
f32 scaledRadius = mRadius * pikmin2_sqrtf(-((dotPlane * dotPlane) - 1.0f));
@ -202,7 +202,7 @@ bool Cylinder::intersect(Triangle const& triangle, f32& p2)
Vector3f scaledAxis = mAxis * (0.5f * mLength);
Vector3f planeVec(triangle.mTrianglePlane.a, triangle.mTrianglePlane.b, triangle.mTrianglePlane.c);
Vector3f planeVec(triangle.mTrianglePlane.mNormal);
f32 dotPlane = dot(mAxis, planeVec);
Vector3f lowerVec = mCenter - scaledAxis;

View File

@ -48,9 +48,7 @@ bool Triangle::intersect(Sys::VertexTable& vtxTable, Sys::Triangle::SphereSweep&
bool isIntersect = intersect(edge_intersect, sweep.mSphere.mRadius, *intersectPoint, sweep.mDistanceFromRadius);
if (isIntersect) {
sweep.mNormal.x = mTrianglePlane.a;
sweep.mNormal.y = mTrianglePlane.b;
sweep.mNormal.z = mTrianglePlane.c;
sweep.mNormal = mTrianglePlane.mNormal;
}
return isIntersect;
}
@ -61,9 +59,7 @@ bool Triangle::intersect(Sys::VertexTable& vtxTable, Sys::Triangle::SphereSweep&
}
if ((edgeDists[0] <= 0.0f) && (edgeDists[1] <= 0.0f) && (edgeDists[2] <= 0.0f)) {
sweep.mNormal.x = mTrianglePlane.a;
sweep.mNormal.y = mTrianglePlane.b;
sweep.mNormal.z = mTrianglePlane.c;
sweep.mNormal = mTrianglePlane.mNormal;
sweep.mDistanceFromRadius = sweep.mSphere.mRadius - distSweep;
Vector3f new_norm = sweep.mNormal * sweep.mSphere.mRadius;
@ -75,8 +71,8 @@ bool Triangle::intersect(Sys::VertexTable& vtxTable, Sys::Triangle::SphereSweep&
Edge edge_in;
f32 t; // sp8
int vertA = mVertices.x;
int vertB = mVertices.y;
int vertA = mVertices[0];
int vertB = mVertices[1];
edge_in.mStartPos = vtxTable.mObjects[vertA]; // sp28, 2C, 30
edge_in.mEndPos = vtxTable.mObjects[vertB]; // sp34, 38, 3C
// = vert_A;
@ -88,8 +84,8 @@ bool Triangle::intersect(Sys::VertexTable& vtxTable, Sys::Triangle::SphereSweep&
return true;
}
vertA = mVertices.y;
vertB = mVertices.z;
vertA = mVertices[1];
vertB = mVertices[2];
edge_in.mStartPos = vtxTable.mObjects[vertA]; // sp28, 2C, 30
edge_in.mEndPos = vtxTable.mObjects[vertB]; // sp34, 38, 3C
@ -99,8 +95,8 @@ bool Triangle::intersect(Sys::VertexTable& vtxTable, Sys::Triangle::SphereSweep&
return true;
}
vertA = mVertices.z;
vertB = mVertices.x;
vertA = mVertices[2];
vertB = mVertices[0];
edge_in.mStartPos = vtxTable.mObjects[vertA]; // sp28, 2C, 30
edge_in.mEndPos = vtxTable.mObjects[vertB]; // sp34, 38, 3C

View File

@ -1003,11 +1003,11 @@ void OBB::determineDivPlane(Sys::VertexTable& vertTable, Sys::TriangleTable& tri
int numAbove = 0;
int numBelow = 0;
Vector3f* currAxis = &mAxes[i];
currPlane.a = currAxis->x;
currPlane.b = currAxis->y;
currPlane.c = currAxis->z;
currPlane.d = dot(*currAxis, mPosition);
Vector3f* currAxis = &mAxes[i];
currPlane.mNormal.x = currAxis->x;
currPlane.mNormal.y = currAxis->y;
currPlane.mNormal.z = currAxis->z;
currPlane.mOffset = dot(*currAxis, mPosition);
// loop through all triangles
for (int j = 0; j < mTriIndexList.mCount; j++) {
@ -1038,10 +1038,8 @@ void OBB::determineDivPlane(Sys::VertexTable& vertTable, Sys::TriangleTable& tri
Vector3f correctAxis = mAxes[axisID];
// divPlane has normal = axis with min cuts, and goes through center/position of box
mDivPlane.a = correctAxis.x;
mDivPlane.b = correctAxis.y;
mDivPlane.c = correctAxis.z;
mDivPlane.d = dot(correctAxis, mPosition);
mDivPlane.mNormal = correctAxis;
mDivPlane.mOffset = dot(correctAxis, mPosition);
/*
stwu r1, -0x80(r1)
mflr r0
@ -1591,12 +1589,13 @@ void OBB::getCurrTri(Game::CurrTriInfo& info)
}
f32 dist;
if (mDivPlane.b == 0.0f) {
if (mDivPlane.mNormal.y == 0.0f) {
dist = mDivPlane.calcDist(info.mPosition);
} else {
Vector3f vec = info.mPosition;
vec.y = (mDivPlane.d - (mDivPlane.a * info.mPosition.x) - (mDivPlane.c * info.mPosition.z)) / mDivPlane.b;
dist = mDivPlane.calcDist(vec);
vec.y = (mDivPlane.mOffset - (mDivPlane.mNormal.x * info.mPosition.x) - (mDivPlane.mNormal.z * info.mPosition.z))
/ mDivPlane.mNormal.y;
dist = mDivPlane.calcDist(vec);
}
if (dist > 0.01f) {
@ -1631,9 +1630,7 @@ void OBB::getCurrTriTriList(Game::CurrTriInfo& info)
info.mMaxY = position.y;
if (info.mUpdateOnNewMaxY) {
info.mNormalVec.x = currTri->mTrianglePlane.a;
info.mNormalVec.y = currTri->mTrianglePlane.b;
info.mNormalVec.z = currTri->mTrianglePlane.c;
info.mNormalVec = currTri->mTrianglePlane.mNormal;
info.mTriangle = currTri;
info.mGetFullInfo = true;
}
@ -1644,9 +1641,7 @@ void OBB::getCurrTriTriList(Game::CurrTriInfo& info)
info.mMinY = position.y;
if (!info.mUpdateOnNewMaxY) {
info.mNormalVec.x = currTri->mTrianglePlane.a;
info.mNormalVec.y = currTri->mTrianglePlane.b;
info.mNormalVec.z = currTri->mTrianglePlane.c;
info.mNormalVec = currTri->mTrianglePlane.mNormal;
info.mTriangle = currTri;
info.mGetFullInfo = true;
}
@ -2546,7 +2541,7 @@ bool OBB::findRayIntersectionTriList(Sys::RayIntersectInfo& rayInfo, Matrixf& tr
if (sqSep < rayInfo.mDistance) {
rayInfo.mDistance = sqSep;
rayInfo.mIntersectPosition = transformMtx.mtxMult(intersectVec);
rayInfo.mNormalY = currTri->mTrianglePlane.b;
rayInfo.mNormalY = currTri->mTrianglePlane.mNormal.y;
}
}
}
@ -2762,13 +2757,13 @@ f32 OBB::getMinY(Vector3f& pos, Sys::TriangleTable& triTable, f32 inputMin)
return getMinYTriList(pos, triTable);
}
if (0.0f == mDivPlane.b) {
if (0.0f == mDivPlane.mNormal.y) {
divDist = mDivPlane.calcDist(pos);
} else {
Vector3f planeVec = pos;
planeVec.y = -(mDivPlane.a * planeVec.x - mDivPlane.d);
planeVec.y = -(mDivPlane.c * planeVec.z - planeVec.y);
planeVec.y = planeVec.y / mDivPlane.b;
planeVec.y = -(mDivPlane.mNormal.x * planeVec.x - mDivPlane.mOffset);
planeVec.y = -(mDivPlane.mNormal.z * planeVec.z - planeVec.y);
planeVec.y = planeVec.y / mDivPlane.mNormal.y;
divDist = mDivPlane.calcDist(planeVec);
}

View File

@ -653,16 +653,16 @@ void Triangle::createSphere(VertexTable& vertTable)
f32 new_radius = 0.0f;
// get vertices of triangle
Vector3f vert_3 = vertTable.mObjects[mVertices.z];
Vector3f vert_2 = vertTable.mObjects[mVertices.y];
Vector3f vert_1 = vertTable.mObjects[mVertices.x];
Vector3f vert_3 = vertTable.mObjects[mVertices[2]];
Vector3f vert_2 = vertTable.mObjects[mVertices[1]];
Vector3f vert_1 = vertTable.mObjects[mVertices[0]];
// get center of triangle
Vector3f center = (vert_1 + vert_2 + vert_3) * (f32)0x3EAAAAAB; // 0x3EAAAAAB = 1/3
// make sure radius includes all vertices
for (int i = 0; i < 3; i++) {
int* vertPtr = &mVertices.x;
int* vertPtr = mVertices;
Vector3f currVtx = (vertTable.mObjects[vertPtr[i]]);
f32 vtxDist = lenVec(currVtx - center);
@ -740,9 +740,9 @@ f32 Sys::Triangle::calcDist(Plane& plane, Sys::VertexTable& vertTable)
// but if triangle is completely 'below' plane, returns furthest point instead
// get triangle vertices from VertexTable vertTable
Vector3f vert_1 = vertTable.mObjects[mVertices.x];
Vector3f vert_2 = vertTable.mObjects[mVertices.y];
Vector3f vert_3 = vertTable.mObjects[mVertices.z];
Vector3f vert_1 = vertTable.mObjects[mVertices[0]];
Vector3f vert_2 = vertTable.mObjects[mVertices[1]];
Vector3f vert_3 = vertTable.mObjects[mVertices[2]];
// calculate distance from plane to each vertex (can be negative)
f32 vertDist_1 = planeDist(vert_1, plane);
@ -806,7 +806,7 @@ bool Triangle::intersect(Edge& edge, f32 cutoff, Vector3f& intersectionPoint)
Vector3f edgeVec(edge.mEndPos.x - edge.mStartPos.x, edge.mEndPos.y - edge.mStartPos.y, edge.mEndPos.z - edge.mStartPos.z);
f32 edgeLen = lenVec(edgeVec);
Vector3f triPlaneNormal(mTrianglePlane.a, mTrianglePlane.b, mTrianglePlane.c);
Vector3f triPlaneNormal(mTrianglePlane.mNormal);
f32 scalarProj = dot(triPlaneNormal, edgeVec);
@ -825,13 +825,13 @@ bool Triangle::intersect(Edge& edge, f32 cutoff, Vector3f& intersectionPoint)
// check each edge plane of triangle
for (int i = 0; i < 3; i++) {
// project normal onto edge
Vector3f edgePlaneNormal(mEdgePlanes[i].a, mEdgePlanes[i].b, mEdgePlanes[i].c);
Vector3f edgePlaneNormal(mEdgePlanes[i].mNormal);
f32 edgePlaneProj = dot(edgePlaneNormal, edgeVec);
// check that projection isn't vanishingly small
if (FABS(edgePlaneProj) > 0.01f) {
// check we have an intersection point
f32 edgePlaneRatio = (mEdgePlanes[i].d - dot(edgePlaneNormal, edge.mStartPos)) / edgePlaneProj;
f32 edgePlaneRatio = (mEdgePlanes[i].mOffset - dot(edgePlaneNormal, edge.mStartPos)) / edgePlaneProj;
if ((edgePlaneRatio > -ratio) && (edgePlaneRatio < (1 + ratio))) {
// get intersection point
Vector3f projVec = edgeVec * edgePlaneRatio;
@ -853,7 +853,7 @@ bool Triangle::intersect(Edge& edge, f32 cutoff, Vector3f& intersectionPoint)
// edge not (close to) perpendicular, can just check triangle plane itself
// check if we have an intersection point
f32 triPlaneRatio = (mTrianglePlane.d - dot(triPlaneNormal, edge.mStartPos)) / scalarProj;
f32 triPlaneRatio = (mTrianglePlane.mOffset - dot(triPlaneNormal, edge.mStartPos)) / scalarProj;
if ((triPlaneRatio < -ratio) || (triPlaneRatio > (1 + ratio))) {
// we don't
return false;
@ -887,7 +887,7 @@ bool Sys::Triangle::intersect(Sys::Edge& edge, f32 cutoff, Vector3f& intersectio
Vector3f edgeVec(edge.mEndPos.x - edge.mStartPos.x, edge.mEndPos.y - edge.mStartPos.y, edge.mEndPos.z - edge.mStartPos.z);
f32 edgeLen = lenVec(edgeVec);
Vector3f triPlaneNormal(mTrianglePlane.a, mTrianglePlane.b, mTrianglePlane.c);
Vector3f triPlaneNormal(mTrianglePlane.mNormal);
f32 scalarProj = dot(triPlaneNormal, edgeVec);
@ -906,13 +906,13 @@ bool Sys::Triangle::intersect(Sys::Edge& edge, f32 cutoff, Vector3f& intersectio
// check each edge plane of triangle
for (int i = 0; i < 3; i++) {
// project normal onto edge
Vector3f edgePlaneNormal(mEdgePlanes[i].a, mEdgePlanes[i].b, mEdgePlanes[i].c);
Vector3f edgePlaneNormal(mEdgePlanes[i].mNormal);
f32 edgePlaneProj = dot(edgePlaneNormal, edgeVec);
// check that projection isn't vanishingly small
if (FABS(edgePlaneProj) > 0.01f) {
// check we have an intersection point
f32 edgePlaneRatio = (mEdgePlanes[i].d - dot(edgePlaneNormal, edge.mStartPos)) / edgePlaneProj;
f32 edgePlaneRatio = (mEdgePlanes[i].mOffset - dot(edgePlaneNormal, edge.mStartPos)) / edgePlaneProj;
if ((edgePlaneRatio > -ratio) && (edgePlaneRatio < (1 + ratio))) {
// get intersection point
Vector3f projVec = edgeVec * edgePlaneRatio;
@ -936,7 +936,7 @@ bool Sys::Triangle::intersect(Sys::Edge& edge, f32 cutoff, Vector3f& intersectio
// edge not (close to) perpendicular, can just check triangle plane itself
// check if we have an intersection point
f32 triPlaneRatio = (mTrianglePlane.d - dot(triPlaneNormal, edge.mStartPos)) / scalarProj;
f32 triPlaneRatio = (mTrianglePlane.mOffset - dot(triPlaneNormal, edge.mStartPos)) / scalarProj;
if ((triPlaneRatio < -ratio) || (triPlaneRatio > (1 + ratio))) {
// we don't
return false;
@ -988,8 +988,8 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball)
// check for intersection with each edge in turn
// REGSWAP START
int vert_1 = mVertices.x;
int vert_2 = mVertices.y;
int vert_1 = mVertices[0];
int vert_2 = mVertices[1];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -997,8 +997,8 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball)
return true;
}
vert_1 = mVertices.y;
vert_2 = mVertices.z;
vert_1 = mVertices[1];
vert_2 = mVertices[2];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1006,8 +1006,8 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball)
return true;
}
vert_1 = mVertices.z;
vert_2 = mVertices.x;
vert_1 = mVertices[2];
vert_2 = mVertices[0];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1242,20 +1242,23 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vector3
// this is wrong/suspicious
// but should get all the distances?? from sphere to triangle? maybe?
f32 triPlaneDist = (mTrianglePlane.a * ball.mPosition.x + mTrianglePlane.b * ball.mPosition.y + mTrianglePlane.c * ball.mPosition.z)
- mTrianglePlane.d;
Vector3f triPlaneNormal(mTrianglePlane.a, mTrianglePlane.b, mTrianglePlane.c);
f32 triPlaneDist = (mTrianglePlane.mNormal.x * ball.mPosition.x + mTrianglePlane.mNormal.y * ball.mPosition.y
+ mTrianglePlane.mNormal.z * ball.mPosition.z)
- mTrianglePlane.mOffset;
Vector3f triPlaneNormal(mTrianglePlane.mNormal);
Vector3f sepVec = ball.mPosition - triPlaneNormal * triPlaneDist;
for (int i = 0; i < 3; i++) {
f32 edgePlaneDist = (sepVec.x * mEdgePlanes[i].a + sepVec.y * mEdgePlanes[i].b + sepVec.z * mEdgePlanes[i].c) - mEdgePlanes[i].d;
ballDists[i] = edgePlaneDist;
f32 edgePlaneDist
= (sepVec.x * mEdgePlanes[i].mNormal.x + sepVec.y * mEdgePlanes[i].mNormal.y + sepVec.z * mEdgePlanes[i].mNormal.z)
- mEdgePlanes[i].mOffset;
ballDists[i] = edgePlaneDist;
}
// end wrong/suspicious
// check for intersection with each edge in turn
int vert_1 = mVertices.x;
int vert_2 = mVertices.y;
int vert_1 = mVertices[0];
int vert_2 = mVertices[1];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1263,8 +1266,8 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vector3
return true;
}
vert_1 = mVertices.y;
vert_2 = mVertices.z;
vert_1 = mVertices[1];
vert_2 = mVertices[2];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1272,8 +1275,8 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vector3
return true;
}
vert_1 = mVertices.z;
vert_2 = mVertices.x;
vert_1 = mVertices[2];
vert_2 = mVertices[0];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1289,7 +1292,7 @@ bool Triangle::intersect(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vector3
}
// get normal to plane scaled by ball radius??
triPlaneNormal = Vector3f(mTrianglePlane.a, mTrianglePlane.b, mTrianglePlane.c);
triPlaneNormal = Vector3f(mTrianglePlane.mNormal);
Vector3f radNorm = triPlaneNormal * ball.mRadius;
// calc outputs
@ -1539,8 +1542,8 @@ bool Triangle::intersectHard(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vec
// check for intersection with each edge in turn
// REGSWAP START
// A-B
int vert_1 = mVertices.x;
int vert_2 = mVertices.y;
int vert_1 = mVertices[0];
int vert_2 = mVertices[1];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1549,8 +1552,8 @@ bool Triangle::intersectHard(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vec
}
// B-C
vert_1 = mVertices.y;
vert_2 = mVertices.z;
vert_1 = mVertices[1];
vert_2 = mVertices[2];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1559,8 +1562,8 @@ bool Triangle::intersectHard(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vec
}
// C-A
vert_1 = mVertices.z;
vert_2 = mVertices.x;
vert_1 = mVertices[2];
vert_2 = mVertices[0];
edge.mStartPos = *vertTable.getVertex(vert_1);
edge.mEndPos = *vertTable.getVertex(vert_2);
@ -1577,7 +1580,7 @@ bool Triangle::intersectHard(Sys::VertexTable& vertTable, Sys::Sphere& ball, Vec
}
// get normal to plane scaled by ball radius??
Vector3f triPlaneNormal(mTrianglePlane.a, mTrianglePlane.b, mTrianglePlane.c);
Vector3f triPlaneNormal(mTrianglePlane.mNormal);
Vector3f radNorm = triPlaneNormal * ball.mRadius;
// calc outputs
@ -1819,12 +1822,13 @@ bool Triangle::insideXZ(Vector3f& point)
// make sure plane of triangle is "pointing up"; if not, false
// only want to deal with correctly oriented triangles?
if (mTrianglePlane.b <= 0.0f) {
if (mTrianglePlane.mNormal.y <= 0.0f) {
return false;
}
// adjust y such that 'point' lies on the same plane as triangle
point.y = (mTrianglePlane.d - ((mTrianglePlane.a * point.x) + (mTrianglePlane.c * point.z))) / mTrianglePlane.b;
point.y = (mTrianglePlane.mOffset - ((mTrianglePlane.mNormal.x * point.x) + (mTrianglePlane.mNormal.z * point.z)))
/ mTrianglePlane.mNormal.y;
// check if point is 'inside' triangle (negative side of each tangent plane), or on an edge
for (int i = 0; i < 3; ++i) {
@ -1848,9 +1852,9 @@ void Triangle::makePlanes(Sys::VertexTable& vertTable)
Vector3f edgeNormal;
Vector3f* edgeNormalPtr = &edgeNormal;
Vector3f vert_A = *vertTable.getVertex(mVertices.x);
Vector3f vert_B = *vertTable.getVertex(mVertices.y);
Vector3f vert_C = *vertTable.getVertex(mVertices.z);
Vector3f vert_A = *vertTable.getVertex(mVertices[0]);
Vector3f vert_B = *vertTable.getVertex(mVertices[1]);
Vector3f vert_C = *vertTable.getVertex(mVertices[2]);
Vector3f BA = vert_B - vert_A;
Vector3f CA = vert_C - vert_A;
@ -1867,11 +1871,10 @@ void Triangle::makePlanes(Sys::VertexTable& vertTable)
}
// define trianglePlane using unit normal and point A
Vector3f triPlaneVec = triNormal;
mTrianglePlane.a = triPlaneVec.x;
mTrianglePlane.b = triPlaneVec.y;
mTrianglePlane.c = triPlaneVec.z;
mTrianglePlane.d = mTrianglePlane.a * vert_A.x + mTrianglePlane.b * vert_A.y + mTrianglePlane.c * vert_A.z;
Vector3f triPlaneVec = triNormal;
mTrianglePlane.mNormal = triPlaneVec;
mTrianglePlane.mOffset
= mTrianglePlane.mNormal.x * vert_A.x + mTrianglePlane.mNormal.y * vert_A.y + mTrianglePlane.mNormal.z * vert_A.z;
// EDGE PLANES
// AB
@ -1886,10 +1889,9 @@ void Triangle::makePlanes(Sys::VertexTable& vertTable)
edgeNormal.z *= norm_edgeNormal0;
}
// define AB edge plane using unit normal and point A
mEdgePlanes[0].a = edgeNormal.x;
mEdgePlanes[0].b = edgeNormal.y;
mEdgePlanes[0].c = edgeNormal.z;
mEdgePlanes[0].d = mEdgePlanes[0].a * vert_A.x + mEdgePlanes[0].b * vert_A.y + mEdgePlanes[0].c * vert_A.z;
mEdgePlanes[0].mNormal = edgeNormal;
mEdgePlanes[0].mOffset
= mEdgePlanes[0].mNormal.x * vert_A.x + mEdgePlanes[0].mNormal.y * vert_A.y + mEdgePlanes[0].mNormal.z * vert_A.z;
// BC
// get unit normal to BC edge plane
@ -1904,10 +1906,9 @@ void Triangle::makePlanes(Sys::VertexTable& vertTable)
}
// define BC edge plane using unit normal and point B
mEdgePlanes[1].a = edgeNormal.x;
mEdgePlanes[1].b = edgeNormal.y;
mEdgePlanes[1].c = edgeNormal.z;
mEdgePlanes[1].d = mEdgePlanes[1].a * vert_B.x + mEdgePlanes[1].b * vert_B.y + mEdgePlanes[1].c * vert_B.z;
mEdgePlanes[1].mNormal = edgeNormal;
mEdgePlanes[1].mOffset
= mEdgePlanes[1].mNormal.x * vert_B.x + mEdgePlanes[1].mNormal.y * vert_B.y + mEdgePlanes[1].mNormal.z * vert_B.z;
// CA
// get unit normal to CA edge plane
@ -1921,10 +1922,9 @@ void Triangle::makePlanes(Sys::VertexTable& vertTable)
}
// define CA edge plane using unit normal and point C
mEdgePlanes[2].a = edgeNormal.x;
mEdgePlanes[2].b = edgeNormal.y;
mEdgePlanes[2].c = edgeNormal.z;
mEdgePlanes[2].d = mEdgePlanes[2].a * vert_C.x + mEdgePlanes[2].b * vert_C.y + mEdgePlanes[2].c * vert_C.z;
mEdgePlanes[2].mNormal = edgeNormal;
mEdgePlanes[2].mOffset
= mEdgePlanes[2].mNormal.x * vert_C.x + mEdgePlanes[2].mNormal.y * vert_C.y + mEdgePlanes[2].mNormal.z * vert_C.z;
/*
stwu r1, -0x140(r1)
mflr r0
@ -2250,7 +2250,7 @@ lbl_8041806C:
bool RayIntersectInfo::condition(Sys::Triangle& triangle)
{
if (mCheckHorizontal) {
if ((triangle.mTrianglePlane.b < 0.5f) && (triangle.mTrianglePlane.b > -0.1f)) {
if ((triangle.mTrianglePlane.mNormal.y < 0.5f) && (triangle.mTrianglePlane.mNormal.y > -0.1f)) {
return true;
}
@ -2290,9 +2290,9 @@ void GridDivider::createTriangles(Sys::CreateTriangleArg& triArg)
bool currTriTest = false;
testTri = mTriangleTable->getTriangle(triList->mObjects[triCtr]);
Vector3f vert_A = *mVertexTable->getVertex(testTri->mVertices.x);
Vector3f vert_B = *mVertexTable->getVertex(testTri->mVertices.y);
Vector3f vert_C = *mVertexTable->getVertex(testTri->mVertices.z);
Vector3f vert_A = *mVertexTable->getVertex(testTri->mVertices[0]);
Vector3f vert_B = *mVertexTable->getVertex(testTri->mVertices[1]);
Vector3f vert_C = *mVertexTable->getVertex(testTri->mVertices[2]);
int var_ctr = numTri;
if (numTri > 0) {
@ -2305,14 +2305,14 @@ void GridDivider::createTriangles(Sys::CreateTriangleArg& triArg)
} while (var_ctr != 0);
}
if ((currTriTest == 0) && (numTri < 128)) {
f32 triNorm_y = testTri->mTrianglePlane.b; // temp_f11
f32 triNorm_y = testTri->mTrianglePlane.mNormal.y; // temp_f11
if (triNorm_y > triArg._14) {
f32 scaleFactor = triArg._10;
numTri += 1;
*triPtr1 = *testTri;
triPtr1 += 4;
Vector3f testVec(testTri->mTrianglePlane.a * scaleFactor, triNorm_y * scaleFactor,
testTri->mTrianglePlane.c * scaleFactor);
Vector3f testVec(testTri->mTrianglePlane.mNormal.x * scaleFactor, triNorm_y * scaleFactor,
testTri->mTrianglePlane.mNormal.z * scaleFactor);
vertexArray[3 * triCtr + 0] = vert_A + testVec;
vertexArray[3 * triCtr + 1] = vert_B + testVec;
vertexArray[3 * triCtr + 2] = vert_C + testVec;
@ -2649,22 +2649,27 @@ f32 GridDivider::getMinY(Vector3f& inputPoint)
for (int triCtr = 0; triCtr < triList->getNum(); triCtr++) {
testTri = mTriangleTable->getTriangle(triList->mObjects[triCtr]);
f32 triNorm_y = testTri->mTrianglePlane.b;
f32 triNorm_y = testTri->mTrianglePlane.mNormal.y;
bool insideTriTest;
if (triNorm_y <= 0.0f) {
insideTriTest = false;
} else {
insideTriTest = false;
y_val = (testTri->mTrianglePlane.d - ((testTri->mTrianglePlane.a * x_in) + (testTri->mTrianglePlane.c * z_in))) / triNorm_y;
if (!(((x_in * testTri->mEdgePlanes[0].a + y_val * testTri->mEdgePlanes[0].b + z_in * testTri->mEdgePlanes[0].c)
- testTri->mEdgePlanes[0].d)
y_val = (testTri->mTrianglePlane.mOffset
- ((testTri->mTrianglePlane.mNormal.x * x_in) + (testTri->mTrianglePlane.mNormal.z * z_in)))
/ triNorm_y;
if (!(((x_in * testTri->mEdgePlanes[0].mNormal.x + y_val * testTri->mEdgePlanes[0].mNormal.y
+ z_in * testTri->mEdgePlanes[0].mNormal.z)
- testTri->mEdgePlanes[0].mOffset)
> 0.0f)
&& !(((x_in * testTri->mEdgePlanes[1].a + y_val * testTri->mEdgePlanes[1].b + z_in * testTri->mEdgePlanes[1].c)
- testTri->mEdgePlanes[1].d)
&& !(((x_in * testTri->mEdgePlanes[1].mNormal.x + y_val * testTri->mEdgePlanes[1].mNormal.y
+ z_in * testTri->mEdgePlanes[1].mNormal.z)
- testTri->mEdgePlanes[1].mOffset)
> 0.0f)
&& !(((x_in * testTri->mEdgePlanes[2].a + y_val * testTri->mEdgePlanes[2].b + z_in * testTri->mEdgePlanes[2].c)
- testTri->mEdgePlanes[2].d)
&& !(((x_in * testTri->mEdgePlanes[2].mNormal.x + y_val * testTri->mEdgePlanes[2].mNormal.y
+ z_in * testTri->mEdgePlanes[2].mNormal.z)
- testTri->mEdgePlanes[2].mOffset)
> 0.0f)) {
insideTriTest = true;
}
@ -2859,28 +2864,24 @@ void GridDivider::getCurrTri(Game::CurrTriInfo& inputInfo)
for (int triCtr = 0; triCtr < triList->getNum(); triCtr++) {
testTri = mTriangleTable->getTriangle(triList->mObjects[triCtr]);
f32 triNorm_y = testTri->mTrianglePlane.b;
f32 triNorm_y = testTri->mTrianglePlane.mNormal.y;
Vector3f tempPoint(x_in, y_val, z_in);
if (testTri->insideXZ(tempPoint)) {
if (min_y > y_val) {
min_y = y_val;
if (inputInfo.mUpdateOnNewMaxY != 0) {
yTest = true;
inputInfo.mNormalVec.x = testTri->mTrianglePlane.a;
inputInfo.mNormalVec.y = testTri->mTrianglePlane.b;
inputInfo.mNormalVec.z = testTri->mTrianglePlane.c;
inputInfo.mTriangle = testTri;
yTest = true;
inputInfo.mNormalVec = testTri->mTrianglePlane.mNormal;
inputInfo.mTriangle = testTri;
}
}
if (y_val > max_y) {
max_y = y_val;
if (inputInfo.mUpdateOnNewMaxY == 0) {
yTest = true;
inputInfo.mNormalVec.x = testTri->mTrianglePlane.a;
inputInfo.mNormalVec.y = testTri->mTrianglePlane.b;
inputInfo.mNormalVec.z = testTri->mTrianglePlane.c;
inputInfo.mTriangle = testTri;
yTest = true;
inputInfo.mNormalVec = testTri->mTrianglePlane.mNormal;
inputInfo.mTriangle = testTri;
}
}
}
@ -3790,9 +3791,9 @@ void TriIndexList::getMinMax(VertexTable& vertTable, TriangleTable& triTable, Ve
for (int i = 0; i < mCount; i++) {
Triangle* currTri = &triTable.mObjects[mObjects[i]];
Vector3f vertices[3];
vertices[0] = vertTable.mObjects[currTri->mVertices.x];
vertices[1] = vertTable.mObjects[currTri->mVertices.y];
vertices[2] = vertTable.mObjects[currTri->mVertices.z];
vertices[0] = vertTable.mObjects[currTri->mVertices[0]];
vertices[1] = vertTable.mObjects[currTri->mVertices[1]];
vertices[2] = vertTable.mObjects[currTri->mVertices[2]];
for (int j = 0; j < 3; j++) {
f32 testVal = dot(vec1, vertices[j] - vec2);
@ -3832,9 +3833,9 @@ void TriIndexList::makeCovarianceMatrix(Sys::VertexTable& vertTable, Sys::Triang
for (int i = count; i > 0; i--, vec_ctr++) {
Triangle* currTri = triTable.getTriangle(mObjects[vec_ctr]);
Vector3f* verts = vertTable.mObjects;
Vector3f* vert_A = vertTable.getVertex(currTri->mVertices.x);
Vector3f* vert_B = vertTable.getVertex(currTri->mVertices.y);
Vector3f* vert_C = vertTable.getVertex(currTri->mVertices.z);
Vector3f* vert_A = vertTable.getVertex(currTri->mVertices[0]);
Vector3f* vert_B = vertTable.getVertex(currTri->mVertices[1]);
Vector3f* vert_C = vertTable.getVertex(currTri->mVertices[2]);
vec = vec + ((*vert_A + *vert_B) + *vert_C);
}
vec = vec * norm_const;
@ -3866,9 +3867,9 @@ void TriIndexList::makeCovarianceMatrix(Sys::VertexTable& vertTable, Sys::Triang
row = row_ptr[i];
currTri = &triTable.mObjects[currTriAddr];
Vector3f* verts = vertTable.mObjects;
Vector3f* vert_B = &verts[currTri->mVertices.x];
Vector3f* vert_A = &verts[currTri->mVertices.y];
Vector3f* vert_C = &verts[currTri->mVertices.z];
Vector3f* vert_B = &verts[currTri->mVertices[0]];
Vector3f* vert_A = &verts[currTri->mVertices[1]];
Vector3f* vert_C = &verts[currTri->mVertices[2]];
vec_14.x = vert_A->x;
vec_14.y = vert_A->y;

View File

@ -195,10 +195,8 @@ void Vector3f::write(Stream& stream)
*/
void Plane::write(Stream& stream)
{
stream.writeFloat(a);
stream.writeFloat(b);
stream.writeFloat(c);
stream.writeFloat(d);
mNormal.write(stream);
stream.writeFloat(mOffset);
}
/**
@ -207,10 +205,8 @@ void Plane::write(Stream& stream)
*/
void Plane::read(Stream& stream)
{
a = stream.readFloat();
b = stream.readFloat();
c = stream.readFloat();
d = stream.readFloat();
mNormal.read(stream);
mOffset = stream.readFloat();
}
/**