From f90a89fd8771fa0e0a7159cb46d7ba6bdf64d3fb Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 30 Sep 2023 15:59:54 -0700 Subject: [PATCH] J3DModelData fakematch, J3DModel progress --- configure.py | 2 +- include/JSystem/J3DGraphAnimator/J3DJoint.h | 9 ++ .../JSystem/J3DGraphAnimator/J3DJointTree.h | 2 + .../J3DGraphAnimator/J3DMaterialAttach.h | 2 +- include/JSystem/J3DGraphAnimator/J3DModel.h | 7 +- .../JSystem/J3DGraphAnimator/J3DModelData.h | 1 + .../JSystem/J3DGraphAnimator/J3DMtxBuffer.h | 81 ------------- .../JSystem/J3DGraphAnimator/J3DSkinDeform.h | 15 +-- include/JSystem/J3DGraphBase/J3DPacket.h | 2 + src/JSystem/J3DGraphAnimator/J3DModel.cpp | 114 ++++++++++++++++-- src/JSystem/J3DGraphAnimator/J3DModelData.cpp | 8 +- src/JSystem/J3DGraphBase/J3DShapeMtx.cpp | 3 +- 12 files changed, 139 insertions(+), 107 deletions(-) delete mode 100644 include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h diff --git a/configure.py b/configure.py index bff5c7c23..d9abb97d4 100644 --- a/configure.py +++ b/configure.py @@ -871,7 +871,7 @@ config.libs = [ JSystemLib( "J3DGraphAnimator", [ - Object(NonMatching, "JSystem/J3DGraphAnimator/J3DModelData.cpp"), + Object(Matching, "JSystem/J3DGraphAnimator/J3DModelData.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DModel.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DAnimation.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp"), diff --git a/include/JSystem/J3DGraphAnimator/J3DJoint.h b/include/JSystem/J3DGraphAnimator/J3DJoint.h index 632d1f031..070759dd1 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJoint.h +++ b/include/JSystem/J3DGraphAnimator/J3DJoint.h @@ -99,6 +99,13 @@ public: virtual void calc(u16 v) { J3DMtxCalcAnm::calc(v); } }; +enum J3DJointMtxType { + J3DJntMtxType_Normal, + J3DJntMtxType_BBoard, + J3DJntMtxType_YBBoard, + J3DJntMtxType_Multi, +}; + class J3DJoint : public J3DNode { public: void initialize(); @@ -114,6 +121,8 @@ public: J3DMaterial* getMesh() { return mMesh; } u16 getJntNo() const { return mJntNo; } + u8 getKind() const { return mKind; } + u8 getMtxType() const { return getKind() >> 4; } u8 getScaleCompensate() const { return mScaleCompensate; } void setCurrentMtxCalc(J3DMtxCalc* pMtxCalc) { mCurrentMtxCalc = pMtxCalc; } J3DTransformInfo& getTransformInfo() { return mTransformInfo; } diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index dee523852..f8ff9cbac 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -10,6 +10,8 @@ class JUTNameTab; struct J3DModelHierarchy { /* 0x0 */ u16 mType; /* 0x2 */ u16 mValue; + + inline u16 getValue() const { return mValue; } }; class J3DMaterialTable; diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index 38b5c7e22..708948fb8 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -35,7 +35,7 @@ public: virtual ~J3DMaterialTable(); - J3DMaterial* getMaterialNodePointer(u16 idx) const { return mMaterialNodePointer[idx]; } + J3DMaterial* getMaterialNodePointer(const u16 idx) const { return mMaterialNodePointer[idx]; } J3DTexture* getTexture() const { return mTexture; } JUTNameTab* getTextureName() const { return mTextureName; } diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index c59887b4c..b117a1261 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -105,14 +105,19 @@ public: u32 getMtxCalcMode() const { return mFlags & 0x03; } u32* getCurrentViewNoPtr() { return &mCurrentViewNo; } u8* getScaleFlagArray() const { return mpScaleFlagArr; } + u8 getScaleFlag(u32 idx) const { return mpScaleFlagArr[idx]; } + u8 getEnvScaleFlag(u32 idx) const { return mpEvlpScaleFlagArr[idx]; } J3DVertexBuffer* getVertexBuffer() const { return (J3DVertexBuffer*)&mVertexBuffer; } J3DMatPacket* getMatPacket(u16 idx) const { return &mpMatPacket[idx]; } J3DShapePacket* getShapePacket(u16 idx) const { return &mpShapePacket[idx]; } Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxBuf[1]; } Mtx* getDrawMtxPtr() const { return mpDrawMtxBuf[1][mCurrentViewNo]; } + Mtx& getDrawMtx(u32 idx) const { return getDrawMtxPtr()[idx]; } Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxBuf[1]; } Mtx33* getNrmMtxPtr() const { return mpNrmMtxBuf[1][mCurrentViewNo]; } - Mtx33*** getBumpMtxPtrPtr() const { return mpBumpMtxArr[1]; } + Mtx33& getNrmMtx(u32 idx) const { return getNrmMtxPtr()[idx]; } + Mtx33** getBumpMtxPtrPtr(u32 idx) const { return mpBumpMtxArr[1][idx]; } + Mtx33* getBumpMtxPtr(u32 idx) const { return mpBumpMtxArr[1][idx][mCurrentViewNo]; } void setBaseScale(const Vec& scale) { mBaseScale = scale; } void setUserArea(u32 area) { mUserArea = area; } u32 getUserArea() const { return mUserArea; } diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index bbf3da2ae..658bcad32 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -55,6 +55,7 @@ public: JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); } void setTexture(J3DTexture* pTexture) { mMaterialTable.setTexture(pTexture); } void setTextureName(JUTNameTab* pTextureName) { mMaterialTable.setTextureName(pTextureName); } + u16 getDrawFullWgtMtxNum() const { return mJointTree.getDrawFullWgtMtxNum(); } u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); } u16* getWEvlpMixMtxIndex() const { return mJointTree.getWEvlpMixIndex(); } f32* getWEvlpMixWeight() const { return mJointTree.getWEvlpMixWeight(); } diff --git a/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h b/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h deleted file mode 100644 index 1b791fc63..000000000 --- a/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef J3DMTXBUFFER_H -#define J3DMTXBUFFER_H - -#include "JSystem/J3DGraphAnimator/J3DModelData.h" -#include "dolphin/types.h" - -class J3DModelData; - -class J3DMtxBuffer { -public: - J3DMtxBuffer() { initialize(); } - - 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]); } - MtxP getWeightAnmMtx(int idx) const { return mpWeightEvlpMtx[idx]; } - - void setScaleFlag(int idx, u8 flag) { mpScaleFlagArr[idx] = flag; } - u32* getCurrentViewNoPtr() { return &mCurrentViewNo; } - u8* getScaleFlagArray() const { return mpScaleFlagArr; } - u8 getScaleFlag(int idx) const { return mpScaleFlagArr[idx]; } - u8 getEnvScaleFlag(int idx) const { return mpEvlpScaleFlagArr[idx]; } - Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxArr[1]; } - Mtx* getDrawMtxPtr() const { return mpDrawMtxArr[1][mCurrentViewNo]; } - Mtx* getDrawMtx(u16 idx) const { return &mpDrawMtxArr[1][mCurrentViewNo][idx]; } - Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxArr[1]; } - Mtx33* getNrmMtxPtr() const { return mpNrmMtxArr[1][mCurrentViewNo]; } - Mtx33* getNrmMtx(u16 idx) const { return &mpNrmMtxArr[1][mCurrentViewNo][idx]; } - Mtx33*** getBumpMtxPtrPtr() const { return mpBumpMtxArr[1]; } - Mtx33* getBumpMtxPtr(int idx) const { return mpBumpMtxArr[1][idx][mCurrentViewNo]; } - J3DJointTree* getJointTree() const { return mJointTree; } - - void swapDrawMtx() { - Mtx* tmp = mpDrawMtxArr[0][mCurrentViewNo]; - mpDrawMtxArr[0][mCurrentViewNo] = mpDrawMtxArr[1][mCurrentViewNo]; - mpDrawMtxArr[1][mCurrentViewNo] = tmp; - } - - void swapNrmMtx() { - Mtx33* tmp = mpNrmMtxArr[0][mCurrentViewNo]; - mpNrmMtxArr[0][mCurrentViewNo] = mpNrmMtxArr[1][mCurrentViewNo]; - mpNrmMtxArr[1][mCurrentViewNo] = tmp; - } - - static Mtx sNoUseDrawMtx; - static Mtx33 sNoUseNrmMtx; - static Mtx* sNoUseDrawMtxPtr; - static Mtx33* sNoUseNrmMtxPtr; - -private: - /* 0x00 */ J3DJointTree* mJointTree; - /* 0x04 */ u8* mpScaleFlagArr; - /* 0x08 */ u8* mpEvlpScaleFlagArr; - /* 0x0C */ Mtx* mpAnmMtx; - /* 0x10 */ Mtx* mpWeightEvlpMtx; - /* 0x14 */ Mtx** mpDrawMtxArr[2]; - /* 0x1C */ Mtx33** mpNrmMtxArr[2]; - /* 0x28 */ Mtx33*** mpBumpMtxArr[2]; - /* 0x2C */ u32 mFlags; - /* 0x30 */ u32 mCurrentViewNo; - /* 0x34 */ Mtx* mpUserAnmMtx; - -public: - virtual ~J3DMtxBuffer(); -}; - -void J3DCalcViewBaseMtx(f32 (*param_0)[4], Vec const& param_1, f32 const (¶m_2)[3][4], - f32 (*param_3)[4]); - -#endif /* J3DMTXBUFFER_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h index 48e7746eb..7e7a1f720 100644 --- a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h +++ b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h @@ -2,10 +2,11 @@ #define J3DSKINDEFORM_H #include "JSystem/J3DGraphAnimator/J3DCluster.h" -#include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h" #include "JSystem/J3DGraphBase/J3DTransform.h" #include "dolphin/types.h" +class J3DModelData; +class J3DVertexBuffer; class J3DModel; class J3DAnmCluster; @@ -51,13 +52,13 @@ public: void initSkinInfo(J3DModelData*); int initMtxIndexArray(J3DModelData*); void changeFastSkinDL(J3DModelData*); - void calcNrmMtx(J3DMtxBuffer*); + // 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 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) { diff --git a/include/JSystem/J3DGraphBase/J3DPacket.h b/include/JSystem/J3DGraphBase/J3DPacket.h index 71156fbe8..9a76e957c 100644 --- a/include/JSystem/J3DGraphBase/J3DPacket.h +++ b/include/JSystem/J3DGraphBase/J3DPacket.h @@ -170,6 +170,8 @@ public: void setDrawMtx(Mtx** pDrawMtx) { mpDrawMtx = pDrawMtx; } void setNrmMtx(Mtx33** pNrmMtx) { mpNrmMtx = pNrmMtx; } void setBaseMtxPtr(Mtx* pMtx) { mpBaseMtxPtr = pMtx; } + void setScaleFlagArray(u8* pScaleFlagArray) { mpScaleFlagArray = pScaleFlagArray; } + void setCurrentViewNoPtr(u32* pCurrentViewNo) { mpCurrentViewNo = pCurrentViewNo; } J3DShape* getShape() const { return mpShape; } J3DModel* getModel() const { return mpModel; } diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 187e4c1a8..c248de419 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -4,6 +4,7 @@ // #include "JSystem/J3DGraphAnimator/J3DModel.h" +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" #include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/JKernel/JKRHeap.h" @@ -441,12 +442,12 @@ void J3DModel::calcAnmMtx() { j3dSys.setCurrentMtxCalc(getModelData()->getJointTree().getBasicMtxCalc()); j3dSys.setModel(this); - if (checkFlag(2)) + if (checkFlag(J3DMdlFlag_Unk00002)) j3dSys.getCurrentMtxCalc()->init(j3dDefaultScale, j3dDefaultMtx); else j3dSys.getCurrentMtxCalc()->init(mBaseScale, mBaseTransformMtx); - j3dSys.getCurrentMtxCalc()->recursiveCalc(getModelData()->getJointTree().getRootNode()); + getModelData()->getJointTree().getBasicMtxCalc()->recursiveCalc(getModelData()->getJointTree().getRootNode()); } /* 802EE67C-802EE874 .text calcWeightEnvelopeMtx__8J3DModelFv */ @@ -527,13 +528,51 @@ void J3DModel::entry() { } /* 802EEB24-802EEBDC .text calcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f */ -void calcViewBaseMtx(float(*)[4], const Vec&, const float(&)[3][4], float(*)[4]) { - /* Nonmatching */ +void calcViewBaseMtx(MtxP viewMtx, const Vec& scale, const Mtx& baseMtx, MtxP dstMtx) { + Mtx mtx; + mtx[0][0] = baseMtx[0][0] * scale.x; + mtx[0][1] = baseMtx[0][1] * scale.y; + mtx[0][2] = baseMtx[0][2] * scale.z; + mtx[0][3] = baseMtx[0][3]; + + mtx[1][0] = baseMtx[1][0] * scale.x; + mtx[1][1] = baseMtx[1][1] * scale.y; + mtx[1][2] = baseMtx[1][2] * scale.z; + mtx[1][3] = baseMtx[1][3]; + + mtx[2][0] = baseMtx[2][0] * scale.x; + mtx[2][1] = baseMtx[2][1] * scale.y; + mtx[2][2] = baseMtx[2][2] * scale.z; + mtx[2][3] = baseMtx[2][3]; + + MTXConcat(viewMtx, mtx, dstMtx); } +extern void J3DPSMtxArrayConcat(f32(*)[4], f32(*)[4], f32(*)[4], u32); + /* 802EEBDC-802EEE30 .text calcDrawMtx__8J3DModelFv */ void J3DModel::calcDrawMtx() { - /* Nonmatching */ + switch (mFlags & 0x03) { + case 1: + for (u32 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) + MTXConcat(j3dSys.getViewMtx(), getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); + if (getModelData()->getDrawFullWgtMtxNum() < getModelData()->getDrawMtxNum()) + J3DPSMtxArrayConcat(j3dSys.getViewMtx(), (MtxP)mpWeightEnvMtx, (MtxP)getDrawMtxPtr(), getModelData()->getWEvlpMtxNum()); + break; + case 0: + for (u32 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) + MTXCopy(getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); + for (u32 i = 0; i < getModelData()->getWEvlpMtxNum(); i++) + MTXCopy(getWeightAnmMtx(i), getDrawMtxPtr()[getModelData()->getDrawFullWgtMtxNum() + i]); + break; + case 2: + calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, mInternalView); + for (u32 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) + MTXConcat(mInternalView, getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); + if (getModelData()->getDrawFullWgtMtxNum() < getModelData()->getDrawMtxNum()) + J3DPSMtxArrayConcat(mInternalView, (MtxP)mpWeightEnvMtx, (MtxP)getDrawMtxPtr(), getModelData()->getWEvlpMtxNum()); + break; + } } /* 802EEE30-802EF050 .text viewCalc__8J3DModelFv */ @@ -577,17 +616,70 @@ void J3DModel::viewCalc() { /* 802EF050-802EF1B8 .text calcNrmMtx__8J3DModelFv */ void J3DModel::calcNrmMtx() { - /* Nonmatching */ + if (getModelData()->checkFlag(J3DMdlDataFlag_ConcatView) == 0) { + for (u16 i = 0; i < getModelData()->getDrawMtxNum(); i++) { + if (getModelData()->getDrawMtxFlag(i) == 0) { + if (getScaleFlag(getModelData()->getDrawMtxIndex(i)) == 1) + J3DPSMtx33CopyFrom34(getDrawMtx(i), getNrmMtx(i)); + else + J3DPSCalcInverseTranspose(getDrawMtx(i), getNrmMtx(i)); + } else { + if (getEnvScaleFlag(getModelData()->getDrawMtxIndex(i)) == 1) + J3DPSMtx33CopyFrom34(getDrawMtx(i), getNrmMtx(i)); + else + J3DPSCalcInverseTranspose(getDrawMtx(i), getNrmMtx(i)); + } + } + } } /* 802EF1B8-802EF2B0 .text calcBumpMtx__8J3DModelFv */ void J3DModel::calcBumpMtx() { - /* Nonmatching */ + if (getModelData()->checkBumpFlag() == 1) { + s32 bumpMtxOffset = 0; + for (s32 i = 0; i < getModelData()->getMaterialNum(); i++) { + J3DMaterial * pMaterial = getModelData()->getMaterialNodePointer(i); + if (pMaterial->getNBTScale()->mbHasScale == 1) { + pMaterial->getShape()->calcNBTScale(*pMaterial->getNBTScale()->getScale(), getNrmMtxPtr(), getBumpMtxPtr(bumpMtxOffset)); + DCStoreRange(getBumpMtxPtr(bumpMtxOffset), getModelData()->getDrawMtxNum() * sizeof(Mtx33)); + bumpMtxOffset++; + } + } + } } /* 802EF2B0-802EF414 .text calcBBoard__8J3DModelFv */ void J3DModel::calcBBoard() { - /* Nonmatching */ + if (getModelData()->checkBBoardFlag()) { + for (u16 i = 0; i < getModelData()->getDrawMtxNum(); i++) { + if (getModelData()->getDrawMtxFlag(i) != 0) + continue; + + u8 mtxType = getModelData()->getJointNodePointer(getModelData()->getDrawMtxIndex(i))->getMtxType(); + if (mtxType == J3DJntMtxType_BBoard) { + Mtx& drawMtx = getDrawMtx(i); + J3DCalcBBoardMtx(drawMtx); + Mtx33& nrmMtx = getNrmMtx(i); + + nrmMtx[0][0] = 1.0f / drawMtx[0][0]; + nrmMtx[0][1] = 0.0f; + nrmMtx[0][2] = 0.0f; + + nrmMtx[1][0] = 0.0f; + nrmMtx[1][1] = 1.0f / drawMtx[1][1]; + nrmMtx[1][2] = 0.0f; + + nrmMtx[2][0] = 0.0f; + nrmMtx[2][1] = 0.0f; + nrmMtx[2][2] = 1.0f / drawMtx[2][2]; + } else if (mtxType == J3DJntMtxType_YBBoard) { + Mtx& drawMtx = getDrawMtx(i); + J3DCalcYBBoardMtx(drawMtx); + Mtx33& nrmMtx = getNrmMtx(i); + J3DPSCalcInverseTranspose(drawMtx, nrmMtx); + } + } + } } /* 802EF414-802EF5D8 .text prepareShapePackets__8J3DModelFv */ @@ -624,11 +716,9 @@ void J3DModel::prepareShapePackets() { if (getModelData()->checkBumpFlag() == 1) { for (s32 i = 0; i < getModelData()->getMaterialNum(); i++) { J3DMaterial* pMaterial = getModelData()->getMaterialNodePointer(i); - if (pMaterial->getTexGenBlock()->getNBTScale()->mbHasScale) { + if (pMaterial->getTexGenBlock()->getNBTScale()->mbHasScale == 1) { J3DShape *pShape = pMaterial->getShape(); - J3DShapePacket *pPacket = getShapePacket(pShape->getIndex()); - u32 bumpMtxOffset = pShape->getBumpMtxOffset(); - pPacket->setNrmMtx(getBumpMtxPtrPtr()[bumpMtxOffset]); + getShapePacket(pShape->getIndex())->setNrmMtx(getBumpMtxPtrPtr(pShape->getBumpMtxOffset())); } } } diff --git a/src/JSystem/J3DGraphAnimator/J3DModelData.cpp b/src/JSystem/J3DGraphAnimator/J3DModelData.cpp index 3c04517bf..6d6d6c535 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModelData.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModelData.cpp @@ -63,8 +63,10 @@ void J3DJointTree::makeHierarchy(J3DNode* pRootNode, const J3DModelHierarchy** p } break; case kTypeMaterial: - *pHierarchy = inf + 1; - pNewMaterial = pMaterialTable->mMaterialNodePointer[inf->mValue]; + { + *pHierarchy = inf + 1; + pNewMaterial = pMaterialTable->getMaterialNodePointer(inf->getValue()); + } break; case kTypeShape: *pHierarchy = inf + 1; @@ -81,7 +83,7 @@ void J3DJointTree::makeHierarchy(J3DNode* pRootNode, const J3DModelHierarchy** p } else if (pNewMaterial != NULL && pRootNode->getType() == 'NJNT') { ((J3DJoint*)pRootNode)->addMesh(pNewMaterial); pNewMaterial->mJoint = ((J3DJoint*)pRootNode); - } else if (pNewShape != NULL && pNewNode->getType() == 'NJNT') { + } else if (pNewShape != NULL && pRootNode->getType() == 'NJNT') { pNewMaterial = ((J3DJoint*)pRootNode)->getMesh(); pNewMaterial->mShape = pNewShape; pNewShape->mMaterial = pNewMaterial; diff --git a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp index 5b4a2cc48..f5f60cf8b 100644 --- a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp +++ b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp @@ -6,10 +6,11 @@ #include "JSystem/J3DGraphBase/J3DShapeMtx.h" #include "JSystem/J3DGraphBase/J3DGD.h" #include "JSystem/J3DGraphBase/J3DPacket.h" -#include "JSystem/J3DGraphAnimator/J3DModel.h" #include "JSystem/J3DGraphBase/J3DShapeDraw.h" #include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DTransform.h" +#include "JSystem/J3DGraphAnimator/J3DModel.h" +#include "JSystem/J3DGraphAnimator/J3DModelData.h" extern void J3DFifoLoadNrmMtxImm(Mtx, u32); extern void J3DFifoLoadNrmMtxImm3x3(Mtx33, u32);