mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-09 10:52:25 -04:00
minor J3DModel work
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user