minor J3DModel work

This commit is contained in:
LagoLunatic
2023-12-04 16:08:12 -05:00
parent 6bb6c41f6f
commit be8d5c758d
3 changed files with 74 additions and 42 deletions
+25 -17
View File
@@ -76,6 +76,7 @@ public:
MtxP getAnmMtx(int idx) { return mpNodeMtx[idx]; }
void setAnmMtx(int idx, Mtx mtx) { MTXCopy(mtx, mpNodeMtx[idx]); }
MtxP getWeightAnmMtx(int idx) { return mpWeightEnvMtx[idx]; }
void setWeightAnmMtx(int idx, Mtx mtx) { MTXCopy(mtx, mpWeightEnvMtx[idx]); }
s32 setNoUseDrawMtx();
s32 createSingleDrawMtx(J3DModelData*);
@@ -111,29 +112,36 @@ public:
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; }
u8 getScaleFlag(u32 idx) const { return mpScaleFlagArr[idx]; }
u32 getMtxCalcMode() { return mFlags & 0x03; }
u8 getScaleFlag(int idx) const { return mpScaleFlagArr[idx]; }
void setScaleFlag(int idx, u8 param_1) { mpScaleFlagArr[idx] = param_1; }
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& 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]; }
u8 getEnvScaleFlag(int idx) const { return mpEvlpScaleFlagArr[idx]; }
J3DVertexBuffer* getVertexBuffer() { return (J3DVertexBuffer*)&mVertexBuffer; }
J3DMatPacket* getMatPacket(u16 idx) { return &mpMatPacket[idx]; }
J3DMatPacket* getMatPacketArray() { return mpMatPacket; }
J3DShapePacket* getShapePacket(u16 idx) { return &mpShapePacket[idx]; }
J3DShapePacket* getShapePacketArray() { return mpShapePacket; }
Mtx* getDrawMtxPtr() { return mpDrawMtxBuf[1][mCurrentViewNo]; }
Mtx& getDrawMtx(int idx) { return getDrawMtxPtr()[idx]; }
Mtx33* getNrmMtxPtr() { return mpNrmMtxBuf[1][mCurrentViewNo]; }
Mtx33& getNrmMtx(int idx) { return getNrmMtxPtr()[idx]; }
Mtx33* getBumpMtxPtr(int idx) { return mpBumpMtxArr[1][idx][mCurrentViewNo]; }
void setBaseScale(const Vec& scale) { mBaseScale = scale; }
void setUserArea(u32 area) { mUserArea = area; }
u32 getUserArea() const { return mUserArea; }
Vec* getBaseScale() { return &mBaseScale; }
void setVisibilityManager(J3DVisibilityManager* manager) { mpVisibilityManager = manager; }
// TODO
void getCurrentVtxNrm() {}
void setCurrentVtxNrm(void*) {}
void getCurrentVtxPos() {}
void setCurrentVtxPos(void*) {}
void setModelData(J3DModelData*) {}
void setNrmMtx(int, Mtx) {}
// Appears in TP debug maps but not TWW debug maps.
Vec* getBaseScale() { return &mBaseScale; }
/* 0x004 */ J3DModelData* mModelData;
/* 0x008 */ u32 mFlags;
/* 0x00C */ u32 mDiffFlag;
@@ -51,7 +51,7 @@ public:
J3DJoint* getJointNodePointer(u16 idx) const { return mJointTree.getJointNodePointer(idx); }
J3DJointTree& getJointTree() { return mJointTree; }
JUTNameTab* getJointName() const { return mJointTree.getJointName(); }
Mtx& getInvJointMtx(s32 idx) const { return mJointTree.getInvJointMtx(idx); }
Mtx& getInvJointMtx(int idx) { return mJointTree.getInvJointMtx(idx); }
J3DTexture* getTexture() const { return mMaterialTable.getTexture(); }
JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); }
void setTexture(J3DTexture* pTexture) { mMaterialTable.setTexture(pTexture); }
@@ -59,22 +59,18 @@ public:
bool isLocked() { return mMaterialTable.isLocked(); }
u16 getDrawFullWgtMtxNum() const { return mJointTree.getDrawFullWgtMtxNum(); }
u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); }
u16* getWEvlpMixMtxIndex() const { return mJointTree.getWEvlpMixIndex(); }
f32* getWEvlpMixWeight() const { return mJointTree.getWEvlpMixWeight(); }
u16* getWEvlpMixMtxIndex() { return mJointTree.getWEvlpMixIndex(); }
f32* getWEvlpMixWeight() { return mJointTree.getWEvlpMixWeight(); }
u8 getWEvlpMixMtxNum(u16 idx) const { return mJointTree.getWEvlpMixMtxNum(idx); }
u32 getModelDataType() const { return mJointTree.getModelDataType(); }
void* getVtxPosArray() const { return mVertexData.getVtxPosArray(); }
void* getVtxNrmArray() const { return mVertexData.getVtxNrmArray(); }
GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
u32 getFlag() const { return mFlags; }
void* getRawData() const { return mpRawData; }
u16 checkBumpFlag() const { return mbHasBumpArray; }
void setBumpFlag(u32 flag) { mbHasBumpArray = flag; }
bool checkBBoardFlag() const { return mbHasBillboard == 1; }
void entryTexMtxAnimator(J3DAnmTextureSRTKey* anm) { mMaterialTable.entryTexMtxAnimator(anm); }
void entryTevRegAnimator(J3DAnmTevRegKey* anm) { mMaterialTable.entryTevRegAnimator(anm); }
void entryTexNoAnimator(J3DAnmTexPattern* anm) { mMaterialTable.entryTexNoAnimator(anm); }
int removeTexNoAnimator(J3DAnmTexPattern* anm) {
return mMaterialTable.removeTexNoAnimator(anm);
}
@@ -88,6 +84,20 @@ public:
return mMaterialTable.removeMatColorAnimator(anm);
}
// TODO
void entryMatColorAnimator(J3DAnmColor*) {}
void getBasicMtxCalc() {}
void getBinary() {}
void getHierarchy() const {}
void getRootNode() {}
void makeHierarchy(J3DNode*, const J3DModelHierarchy**) {}
void setBasicMtxCalc(J3DMtxCalc*) {}
void setHierarchy(J3DModelHierarchy*) {}
void setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm*) {}
void setModelDataType(u32) {}
void setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*) {}
void setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*) {}
private:
/* 0x04 */ void* mpRawData;
/* 0x08 */ u32 mFlags;
+32 -18
View File
@@ -22,7 +22,6 @@ J3DModel::J3DModel() {
/* 802ED5AC-802ED610 .text __dt__8J3DModelFv */
J3DModel::~J3DModel() {
/* Nonmatching */
}
/* 802ED610-802ED6C4 .text initialize__8J3DModelFv */
@@ -320,18 +319,20 @@ s32 J3DModel::createMatPacket(J3DModelData* pModelData, u32 flag) {
/* 802EDF60-802EE1D4 .text createBumpMtxArray__8J3DModelFP12J3DModelDataUl */
s32 J3DModel::createBumpMtxArray(J3DModelData* modelData, u32 bufferNum) {
/* Nonmatching */
if (modelData->getModelDataType() == 0) {
u16 bumpMtxNum = 0;
u32 bumpMtxNum = 0;
u16 hasScaleNum = 0;
for (s32 matIdx = 0; matIdx < modelData->getMaterialNum(); matIdx++) {
J3DMaterial * pMaterial = getModelData()->getMaterialNodePointer(matIdx);
if (pMaterial->getNBTScale()->mbHasScale == 1)
if (pMaterial->getNBTScale()->mbHasScale == 1) {
bumpMtxNum += pMaterial->getShape()->countBumpMtxNum();
hasScaleNum++;
}
}
if (bumpMtxNum != 0 && bufferNum != 0) {
if ((u16)bumpMtxNum != 0 && bufferNum != 0) {
for (s32 i = 0; i < 2; i++) {
mpBumpMtxArr[i] = new Mtx33**[bumpMtxNum];
mpBumpMtxArr[i] = new Mtx33**[hasScaleNum];
if (mpBumpMtxArr[i] == NULL)
return J3DErrType_OutOfMemory;
}
@@ -366,8 +367,8 @@ s32 J3DModel::createBumpMtxArray(J3DModelData* modelData, u32 bufferNum) {
}
}
if (bumpMtxNum != 0)
getModelData()->setBumpFlag(1);
if (hasScaleNum != 0)
mModelData->setBumpFlag(1);
}
return J3DErrType_Success;
@@ -603,23 +604,36 @@ extern void J3DPSMtxArrayConcat(f32(*)[4], f32(*)[4], f32(*)[4], u32);
void J3DModel::calcDrawMtx() {
switch (getMtxCalcMode()) {
case 0:
for (u16 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());
MtxP viewMtx = j3dSys.getViewMtx();
for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) {
u16 drawMtxIdx = getModelData()->getDrawMtxIndex(i);
MTXConcat(viewMtx, getAnmMtx(drawMtxIdx), getDrawMtxPtr()[i]);
}
if (getModelData()->getDrawMtxNum() > getModelData()->getDrawFullWgtMtxNum()) {
MtxP weightAnmMtx = getWeightAnmMtx(0);
MtxP drawMtx = getDrawMtxPtr()[getModelData()->getDrawFullWgtMtxNum()];
J3DPSMtxArrayConcat(viewMtx, weightAnmMtx, drawMtx, getModelData()->getWEvlpMtxNum());
}
break;
case 1:
for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++)
MTXCopy(getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]);
for (u16 i = 0; i < getModelData()->getWEvlpMtxNum(); i++)
MTXCopy(getWeightAnmMtx(i), getDrawMtxPtr()[getModelData()->getDrawFullWgtMtxNum() + i]);
for (u16 i = 0; i < getModelData()->getWEvlpMtxNum(); i++) {
MtxP drawMtx = getDrawMtxPtr()[getModelData()->getDrawFullWgtMtxNum() + i];
setWeightAnmMtx(i, drawMtx);
}
break;
case 2:
calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, mViewBaseMtx);
for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++)
MTXConcat(mViewBaseMtx, getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]);
if (getModelData()->getDrawFullWgtMtxNum() > getModelData()->getDrawMtxNum())
J3DPSMtxArrayConcat(mViewBaseMtx, (MtxP)mpWeightEnvMtx, (MtxP)getDrawMtxPtr(), getModelData()->getWEvlpMtxNum());
for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) {
MtxP anmMtx = getAnmMtx(getModelData()->getDrawMtxIndex(i));
MTXConcat(mViewBaseMtx, anmMtx, getDrawMtxPtr()[i]);
}
if (getModelData()->getDrawFullWgtMtxNum() > getModelData()->getDrawMtxNum()) {
MtxP weightAnmMtx = getWeightAnmMtx(0);
MtxP drawMtx = getDrawMtxPtr()[getModelData()->getDrawFullWgtMtxNum()];
J3DPSMtxArrayConcat(mViewBaseMtx, weightAnmMtx, drawMtx, getModelData()->getWEvlpMtxNum());
}
break;
}
}