J3DModel halfway

This commit is contained in:
Jasper St. Pierre
2023-09-23 22:51:27 -07:00
parent fd312e1ff5
commit 3b025cc2dd
10 changed files with 576 additions and 129 deletions
+14 -18
View File
@@ -11,17 +11,13 @@ class J3DMtxBuffer;
class J3DMtxCalc {
public:
/* 80325D1C */ static void setMtxBuffer(J3DMtxBuffer*);
static void setMtxBuffer(J3DMtxBuffer*);
/* 8000D948 */ virtual ~J3DMtxCalc();
/* 80014E90 */ virtual void setAnmTransform(J3DAnmTransform*);
/* 80014E9C */ virtual bool getAnmTransform();
/* 80014E8C */ virtual void setAnmTransform(u8, J3DAnmTransform*);
/* 80014E94 */ virtual bool getAnmTransform(u8);
/* 80014EA4 */ virtual void setWeight(u8, f32);
/* 80014EA8 */ virtual void getWeight(u8) const;
virtual void init(Vec const& param_0, Mtx*) = 0;
virtual ~J3DMtxCalc();
virtual void init(Vec const& param_0, const Mtx&) = 0;
virtual void recursiveCalc(J3DNode *);
virtual void calc() = 0;
virtual void calcTransform(u16, J3DTransformInfo const &) = 0;
static J3DMtxBuffer* getMtxBuffer() { return mMtxBuffer; }
static J3DJoint* getJoint() { return mJoint; }
@@ -33,7 +29,7 @@ public:
class J3DMtxCalcNoAnmBase : public J3DMtxCalc {
public:
/* 8000FA8C */ virtual ~J3DMtxCalcNoAnmBase();
virtual ~J3DMtxCalcNoAnmBase();
};
template <class A, class B>
@@ -47,9 +43,9 @@ public:
class J3DJoint : public J3DNode {
public:
/* 8032F170 */ J3DJoint();
/* 8032F254 */ void entryIn();
/* 8032F3F8 */ void recursiveCalc();
J3DJoint();
void entryIn();
void recursiveCalc();
J3DMaterial* getMesh() { return mMesh; }
u16 getJntNo() const { return mJntNo; }
@@ -83,23 +79,23 @@ private:
}; // Size: 0x54
struct J3DMtxCalcJ3DSysInitMaya {
/* 8032ECAC */ static void init(Vec const&, f32 const (&)[3][4]);
static void init(Vec const&, f32 const (&)[3][4]);
};
struct J3DMtxCalcJ3DSysInitBasic {
/* 8032EC28 */ static void init(Vec const&, f32 const (&)[3][4]);
static void init(Vec const&, f32 const (&)[3][4]);
};
struct J3DMtxCalcCalcTransformSoftimage {
/* 8032EE50 */ static void calcTransform(J3DTransformInfo const&);
static void calcTransform(J3DTransformInfo const&);
};
struct J3DMtxCalcCalcTransformMaya {
/* 8032EFBC */ static void calcTransform(J3DTransformInfo const&);
static void calcTransform(J3DTransformInfo const&);
};
struct J3DMtxCalcCalcTransformBasic {
/* 8032ED30 */ static void calcTransform(J3DTransformInfo const&);
static void calcTransform(J3DTransformInfo const&);
};
#endif /* J3DJOINT_H */
@@ -15,8 +15,8 @@ struct J3DModelHierarchy {
class J3DMaterialTable;
struct J3DDrawMtxData {
/* 803115E0 */ J3DDrawMtxData();
/* 803115F4 */ ~J3DDrawMtxData();
J3DDrawMtxData();
~J3DDrawMtxData();
/* 0x0 */ u16 mEntryNum;
/* 0x2 */ u16 mDrawFullWgtMtxNum;
@@ -28,13 +28,12 @@ class J3DShapeTable;
class J3DJointTree {
public:
/* 80325A18 */ J3DJointTree();
/* 80325A9C */ void makeHierarchy(J3DJoint*, J3DModelHierarchy const**, J3DMaterialTable*,
J3DShapeTable*);
/* 80325C00 */ void findImportantMtxIndex();
J3DJointTree();
void makeHierarchy(J3DJoint*, J3DModelHierarchy const**, J3DMaterialTable*, J3DShapeTable*);
void findImportantMtxIndex();
/* 80325CAC */ virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]);
/* 80325D24 */ virtual ~J3DJointTree();
virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]);
virtual ~J3DJointTree();
u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; }
u8 getWEvlpMixMtxNum(u16 idx) const { return mWEvlpMixMtxNum[idx]; }
@@ -53,7 +53,6 @@ private:
/* 0x14 */ u32 field_0x14;
/* 0x18 */ J3DTexture* mTexture;
/* 0x1C */ JUTNameTab* mTextureName;
/* 0x20 */ u16 field_0x20;
}; // Size: 0x22
}; // Size: 0x20
#endif /* J3DMATERIALATTACH_H */
+45 -13
View File
@@ -31,17 +31,21 @@ typedef void (*J3DCalcCallBack)(J3DModel*, u32 timing);
class J3DMatPacket;
class J3DShapePacket;
class J3DVisibilityManager;
class J3DVisibilityManager {
public:
virtual ~J3DVisibilityManager();
virtual void setVisibility(J3DModelData*);
};
class J3DUnkCallBack {
public:
virtual void calc(J3DModel*);
};
class J3DModel {
public:
J3DModel() {
initialize();
}
J3DModel(J3DModelData* param_0, u32 param_1, u32 param_2) {
initialize();
entryModelData(param_0, param_1, param_2);
}
J3DModel();
void initialize();
s32 entryModelData(J3DModelData*, u32, u32);
@@ -57,9 +61,15 @@ public:
void calcWeightEnvelopeMtx();
void calcNrmMtx();
void calcBumpMtx();
void calcBBoardMtx();
void calcBBoard();
void calcDrawMtx();
void prepareShapePackets();
MtxP getAnmMtx(int);
MtxP getAnmMtx(int idx) { return mpNodeMtx[idx]; }
s32 setNoUseDrawMtx();
s32 createSingleDrawMtx(J3DModelData*);
s32 createDoubleDrawMtx(J3DModelData*, u32);
s32 createBumpMtxArray(J3DModelData*, u32);
virtual void update();
virtual void entry();
@@ -77,15 +87,31 @@ public:
bool isCpuSkinningOn() const { return (mFlags & J3DMdlFlag_SkinPosCpu) && (mFlags & J3DMdlFlag_SkinNrmCpu); }
void swapDrawMtx() {
Mtx* tmp = mpDrawMtxBuf[0][mCurrentViewNo];
mpDrawMtxBuf[0][mCurrentViewNo] = mpDrawMtxBuf[1][mCurrentViewNo];
mpDrawMtxBuf[1][mCurrentViewNo] = tmp;
}
void swapNrmMtx() {
Mtx33* tmp = mpNrmMtxBuf[0][mCurrentViewNo];
mpNrmMtxBuf[0][mCurrentViewNo] = mpNrmMtxBuf[1][mCurrentViewNo];
mpNrmMtxBuf[1][mCurrentViewNo] = tmp;
}
Mtx& getBaseTRMtx() { return mBaseTransformMtx; }
void setBaseTRMtx(Mtx m) { MTXCopy(m, mBaseTransformMtx); }
u32 getMtxCalcMode() const { return mFlags & 0x03; }
u32* getCurrentViewNoPtr() { return &mCurrentViewNo; }
u8* getScaleFlagArray() const { return mpScaleFlagArr; }
J3DVertexBuffer* getVertexBuffer() const { return (J3DVertexBuffer*)&mVertexBuffer; }
J3DMatPacket* getMatPacket(u16 idx) const { return &mpMatPacket[idx]; }
J3DShapePacket* getShapePacket(u16 idx) const { return &mpShapePacket[idx]; }
// Mtx33* getBumpMtxPtr(int idx) const { return mMtxBuffer->getBumpMtxPtr(idx); }
Mtx33* getNrmMtxPtr() const { return mpNrmMtxBuf[1][mCurrentViewNo]; }
Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxBuf[1]; }
Mtx* getDrawMtxPtr() const { return mpDrawMtxBuf[1][mCurrentViewNo]; }
Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxBuf[1]; }
Mtx33* getNrmMtxPtr() const { return mpNrmMtxBuf[1][mCurrentViewNo]; }
Mtx33*** getBumpMtxPtrPtr() const { return mpBumpMtxArr[1]; }
void setBaseScale(const Vec& scale) { mBaseScale = scale; }
void setUserArea(u32 area) { mUserArea = area; }
u32 getUserArea() const { return mUserArea; }
@@ -112,9 +138,15 @@ public:
/* 0x0B8 */ J3DShapePacket* mpShapePacket;
/* 0x0BC */ J3DDeformData* mpDeformData;
/* 0x0C0 */ J3DSkinDeform* mpSkinDeform;
/* 0x0C4 */ void * pad4[2];
/* 0x0C4 */ J3DUnkCallBack * field_0xc4;
/* 0x0C8 */ J3DUnkCallBack * field_0xc8;
/* 0x0CC */ J3DVertexBuffer mVertexBuffer;
/* 0x104 */ J3DVisibilityManager * mpVisibilityManager;
static Mtx sNoUseDrawMtx;
static Mtx33 sNoUseNrmMtx;
static Mtx* sNoUseDrawMtxPtr;
static Mtx33* sNoUseNrmMtxPtr;
};
STATIC_ASSERT(sizeof(J3DModel) == 0x108);
+13 -10
View File
@@ -13,16 +13,16 @@ class JUTNameTab;
class J3DModelData {
public:
/* 80325D88 */ void clear();
/* 80325DA0 */ J3DModelData();
/* 80325E14 */ s32 newSharedDisplayList(u32);
/* 80325EC8 */ void indexToPtr();
/* 80325F94 */ void makeSharedDL();
/* 8032600C */ void simpleCalcMaterial(u16, f32 (*)[4]);
/* 803260CC */ void syncJ3DSysPointers() const;
/* 803260F8 */ void syncJ3DSysFlags() const;
void clear();
J3DModelData();
s32 newSharedDisplayList(u32);
void indexToPtr();
void makeSharedDL();
void simpleCalcMaterial(u16, f32 (*)[4]);
void syncJ3DSysPointers() const;
void syncJ3DSysFlags() const;
/* 8032617C */ virtual ~J3DModelData();
virtual ~J3DModelData();
J3DMaterialTable& getMaterialTable() { return mMaterialTable; }
JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); }
@@ -87,7 +87,10 @@ private:
/* 0x10 */ J3DJointTree mJointTree;
/* 0x58 */ J3DMaterialTable mMaterialTable;
/* 0x78 */ J3DShapeTable mShapeTable;
/* 0x88 */ J3DVertexData mVertexData;
/* 0x84 */ J3DVertexData mVertexData;
/* 0xE0 */ JUTNameTab * mName;
}; // Size: 0xE4
STATIC_ASSERT(sizeof(J3DModelData) == 0xE4);
#endif /* J3DMODELDATA_H */
+12 -12
View File
@@ -10,17 +10,17 @@ class J3DMtxBuffer {
public:
J3DMtxBuffer() { initialize(); }
/* 80326214 */ void initialize();
/* 80326258 */ s32 create(J3DModelData*, u32);
/* 80326364 */ s32 createAnmMtx(J3DModelData*);
/* 803263F0 */ s32 createWeightEnvelopeMtx(J3DModelData*);
/* 8032648C */ s32 setNoUseDrawMtx();
/* 803264B8 */ s32 createDoubleDrawMtx(J3DModelData*, u32);
/* 80326664 */ s32 createBumpMtxArray(J3DModelData*, u32);
/* 803268D4 */ void calcWeightEnvelopeMtx();
/* 80326ACC */ void calcDrawMtx(u32, Vec const&, f32 const (&)[3][4]);
/* 80326D3C */ void calcNrmMtx();
/* 80326EF0 */ void calcBBoardMtx();
void initialize();
s32 create(J3DModelData*, u32);
s32 createAnmMtx(J3DModelData*);
s32 createWeightEnvelopeMtx(J3DModelData*);
s32 setNoUseDrawMtx();
s32 createDoubleDrawMtx(J3DModelData*, u32);
s32 createBumpMtxArray(J3DModelData*, u32);
void calcWeightEnvelopeMtx();
void calcDrawMtx(u32, Vec const&, f32 const (&)[3][4]);
void calcNrmMtx();
void calcBBoardMtx();
MtxP getAnmMtx(int idx) const { return mpAnmMtx[idx]; }
void setAnmMtx(int i, Mtx m) { MTXCopy(m, (MtxP)mpAnmMtx[i]); }
@@ -72,7 +72,7 @@ private:
/* 0x34 */ Mtx* mpUserAnmMtx;
public:
/* 803283B4 */ virtual ~J3DMtxBuffer();
virtual ~J3DMtxBuffer();
};
void J3DCalcViewBaseMtx(f32 (*param_0)[4], Vec const& param_1, f32 const (&param_2)[3][4],
@@ -11,13 +11,12 @@ public:
J3DShapeTable() {
mShapeNum = 0;
mShapeNodePointer = NULL;
mShapeName = NULL;
}
/* 803258A0 */ void hide();
/* 803258D8 */ void show();
/* 80325910 */ void initShapeNodes(J3DDrawMtxData*, J3DVertexData*);
/* 8032597C */ void sortVcdVatCmd();
void hide();
void show();
void initShapeNodes(J3DDrawMtxData*, J3DVertexData*);
void sortVcdVatCmd();
virtual ~J3DShapeTable();
@@ -27,7 +26,6 @@ public:
private:
/* 0x4 */ u16 mShapeNum;
/* 0x8 */ J3DShape** mShapeNodePointer;
/* 0xC */ JUTNameTab* mShapeName;
}; // Size: 0x10
}; // Size: 0x0C
#endif /* J3DSHAPETABLE_H */
@@ -11,11 +11,11 @@ class J3DAnmCluster;
class J3DDeformData {
public:
/* 8032E1F8 */ J3DDeformData();
/* 8032E230 */ void offAllFlag(u32);
/* 8032E298 */ void deform(J3DVertexBuffer*);
/* 8032E274 */ void deform(J3DModel*);
/* 8032E364 */ void setAnm(J3DAnmCluster*);
J3DDeformData();
void offAllFlag(u32);
void deform(J3DVertexBuffer*);
void deform(J3DModel*);
void setAnm(J3DAnmCluster*);
private:
/* 0x00 */ u16 mClusterNum;
@@ -33,9 +33,9 @@ private:
}; // Size: 0x28
struct J3DSkinNList {
/* 8032C6E4 */ J3DSkinNList();
/* 8032C85C */ void calcSkin_VtxPosF32(f32 (*)[4], void*, void*);
/* 8032C8E4 */ void calcSkin_VtxNrmF32(f32 (*)[4], void*, void*);
J3DSkinNList();
void calcSkin_VtxPosF32(f32 (*)[4], void*, void*);
void calcSkin_VtxNrmF32(f32 (*)[4], void*, void*);
/* 0x00 */ u16* field_0x0;
/* 0x04 */ u16* field_0x4;
@@ -47,20 +47,19 @@ struct J3DSkinNList {
class J3DSkinDeform {
public:
/* 8032C96C */ J3DSkinDeform();
/* 8032C9B0 */ void initSkinInfo(J3DModelData*);
/* 8032CF44 */ int initMtxIndexArray(J3DModelData*);
/* 8032D378 */ void changeFastSkinDL(J3DModelData*);
/* 8032D5C4 */ void calcNrmMtx(J3DMtxBuffer*);
/* 8032D738 */ void transformVtxPosNrm(J3DModelData*);
/* 8032D87C */ void calcAnmInvJointMtx(J3DMtxBuffer*);
/* 8032D8F4 */ void deformFastVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DA1C */ void deformFastVtxNrm_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DB50 */ void deformVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DC74 */ void deformVtxPos_S16(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DDB8 */ void deformVtxNrm_F32(J3DVertexBuffer*) const;
/* 8032DEBC */ void deformVtxNrm_S16(J3DVertexBuffer*) const;
/* 8032DFDC */ void deform(J3DModel*);
J3DSkinDeform();
void initSkinInfo(J3DModelData*);
int initMtxIndexArray(J3DModelData*);
void changeFastSkinDL(J3DModelData*);
void calcNrmMtx(J3DMtxBuffer*);
void transformVtxPosNrm(J3DModelData*);
void calcAnmInvJointMtx(J3DMtxBuffer*);
void deformFastVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
void deformFastVtxNrm_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
void deformVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
void deformVtxPos_S16(J3DVertexBuffer*, J3DMtxBuffer*) const;
void deformVtxNrm_F32(J3DVertexBuffer*) const;
void deformVtxNrm_S16(J3DVertexBuffer*) const;
void setNrmMtx(int i, MtxP mtx) {
J3DPSMtx33CopyFrom34(mtx, (Mtx3P)mNrmMtx[i]);
}
@@ -69,8 +68,8 @@ public:
void offFlag(u32 flag) { mFlags &= ~flag; }
bool checkFlag(u32 flag) { return mFlags & flag; }
/* 8032E064 */ virtual void deform(J3DVertexBuffer*, J3DMtxBuffer*);
/* 8032E1B0 */ virtual ~J3DSkinDeform();
virtual void deform(J3DModel*);
virtual ~J3DSkinDeform();
static u16* sWorkArea_WEvlpMixMtx[1024];
static f32* sWorkArea_WEvlpMixWeight[1024];
@@ -91,12 +90,12 @@ private:
class J3DDeformer {
public:
/* 8032E39C */ J3DDeformer(J3DDeformData*);
/* 8032EAB4 */ void deform(J3DVertexBuffer*, u16, f32*);
/* 8032E3BC */ void deform(J3DVertexBuffer*, u16);
/* 8032E4A4 */ void deform_VtxPosF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*);
/* 8032E60C */ void deform_VtxNrmF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*);
/* 8032EBCC */ void normalizeWeight(int, f32*);
J3DDeformer(J3DDeformData*);
void deform(J3DVertexBuffer*, u16, f32*);
void deform(J3DVertexBuffer*, u16);
void deform_VtxPosF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*);
void deform_VtxNrmF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*);
void normalizeWeight(int, f32*);
private:
/* 0x00 */ J3DDeformData* mDeformData;