diff options
Diffstat (limited to 'src/JSystem/J3DGraphAnimator')
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DAnimation.cpp | 10 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DCluster.cpp | 4 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DJoint.cpp | 107 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DModel.cpp | 4 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp | 17 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp | 20 |
6 files changed, 94 insertions, 68 deletions
diff --git a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp index 8cfa46ff23..6b9a2d2250 100644 --- a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -565,9 +565,8 @@ f32 J3DGetKeyFrameInterpolation(f32 frame, J3DAnmKeyTableBase* pKeyTable, T* pDa } if (pKeyTable->mType == 0) { - u32 idx = pKeyTable->mMaxFrame - 1; - if (pData[idx * 3] <= frame) { - return pData[idx * 3 + 1]; + if (pData[(pKeyTable->mMaxFrame - 1) * 3] <= frame) { + return pData[(pKeyTable->mMaxFrame - 1) * 3 + 1]; } u32 uVar7 = pKeyTable->mMaxFrame; @@ -585,9 +584,8 @@ f32 J3DGetKeyFrameInterpolation(f32 frame, J3DAnmKeyTableBase* pKeyTable, T* pDa f32 interpolated = J3DHermiteInterpolation(frame, &pData[0], &pData[1], &pData[2], &pData[3], &pData[4], &pData[5]); return interpolated; } else { - u32 idx = pKeyTable->mMaxFrame - 1; - if (pData[idx * 4] <= frame) { - return pData[idx * 4 + 1]; + if (pData[(pKeyTable->mMaxFrame - 1) * 4] <= frame) { + return pData[(pKeyTable->mMaxFrame - 1) * 4 + 1]; } u32 var_r27 = pKeyTable->mMaxFrame; diff --git a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp index da4370dc16..1bb6a195f2 100644 --- a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp @@ -252,6 +252,10 @@ void J3DDeformer::deform(J3DVertexBuffer* i_buffer, u16 param_1, f32* i_weights) } } +static void dummy(J3DDeformData* data) { + data->getClusterNum(); +} + void J3DDeformer::normalizeWeight(int i_keyNum, f32* i_weights) { f32 totalWeight = 0.0f; for (u16 i = 0; i < i_keyNum; i++) { diff --git a/src/JSystem/J3DGraphAnimator/J3DJoint.cpp b/src/JSystem/J3DGraphAnimator/J3DJoint.cpp index 25d449c032..00fd7d1935 100644 --- a/src/JSystem/J3DGraphAnimator/J3DJoint.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DJoint.cpp @@ -10,16 +10,16 @@ void J3DMtxCalcJ3DSysInitBasic::init(Vec const& scale, Mtx const& mtx) { J3DSys::mCurrentS = scale; - J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f}; - JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y, - J3DSys::mCurrentS.z); + Vec init = {1.0f, 1.0f, 1.0f}; + J3DSys::mParentS = init; + JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, scale.x, scale.y, scale.z); } void J3DMtxCalcJ3DSysInitMaya::init(Vec const& scale, Mtx const& mtx) { - J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f}; + Vec init = {1.0f, 1.0f, 1.0f}; + J3DSys::mParentS = init; J3DSys::mCurrentS = scale; - JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y, - J3DSys::mCurrentS.z); + JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, scale.x, scale.y, scale.z); } J3DMtxBuffer* J3DMtxCalc::mMtxBuffer; @@ -35,8 +35,9 @@ inline s32 checkScaleOne(const Vec& param_0) { } void J3DMtxCalcCalcTransformBasic::calcTransform(J3DTransformInfo const& transInfo) { + J3DJoint* joint = J3DMtxCalc::getJoint(); J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer(); - u16 jntNo = J3DMtxCalc::getJoint()->getJntNo(); + u16 jntNo = joint->getJntNo(); MtxP anmMtx = mtxBuf->getAnmMtx(jntNo); @@ -58,8 +59,9 @@ void J3DMtxCalcCalcTransformBasic::calcTransform(J3DTransformInfo const& transIn } void J3DMtxCalcCalcTransformSoftimage::calcTransform(J3DTransformInfo const& transInfo) { + J3DJoint* joint = J3DMtxCalc::getJoint(); J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer(); - u16 jntNo = J3DMtxCalc::getJoint()->getJntNo(); + u16 jntNo = joint->getJntNo(); MtxP anmMtx = mtxBuf->getAnmMtx(jntNo); @@ -104,20 +106,22 @@ void J3DMtxCalcCalcTransformMaya::calcTransform(J3DTransformInfo const& transInf transInfo.mScale.z); } - if (joint->getScaleCompensate() == 1) { - f32 invX = JMath::fastReciprocal(J3DSys::mParentS.x); - f32 invY = JMath::fastReciprocal(J3DSys::mParentS.y); - f32 invZ = JMath::fastReciprocal(J3DSys::mParentS.z); - - anmMtx[0][0] *= invX; - anmMtx[0][1] *= invX; - anmMtx[0][2] *= invX; - anmMtx[1][0] *= invY; - anmMtx[1][1] *= invY; - anmMtx[1][2] *= invY; - anmMtx[2][0] *= invZ; - anmMtx[2][1] *= invZ; - anmMtx[2][2] *= invZ; + u8 scaleCompensate = joint->getScaleCompensate(); + if (scaleCompensate == 1) { + Vec inv; + inv.x = JMath::fastReciprocal(J3DSys::mParentS.x); + inv.y = JMath::fastReciprocal(J3DSys::mParentS.y); + inv.z = JMath::fastReciprocal(J3DSys::mParentS.z); + + anmMtx[0][0] *= inv.x; + anmMtx[0][1] *= inv.x; + anmMtx[0][2] *= inv.x; + anmMtx[1][0] *= inv.y; + anmMtx[1][1] *= inv.y; + anmMtx[1][2] *= inv.y; + anmMtx[2][0] *= inv.z; + anmMtx[2][1] *= inv.z; + anmMtx[2][2] *= inv.z; } MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx); @@ -131,13 +135,13 @@ void J3DMtxCalcCalcTransformMaya::calcTransform(J3DTransformInfo const& transInf void J3DJoint::appendChild(J3DJoint* pChild) { if (mChild == NULL) { mChild = pChild; - } else { - J3DJoint* curChild = mChild; - while (curChild->getYounger() != NULL) { - curChild = curChild->getYounger(); - } - curChild->setYounger(pChild); + return; + } + J3DJoint* curChild = mChild; + while (curChild->getYounger() != NULL) { + curChild = curChild->getYounger(); } + curChild->setYounger(pChild); } J3DJoint::J3DJoint() { @@ -149,7 +153,8 @@ J3DJoint::J3DJoint() { mJntNo = 0; mKind = 1; mScaleCompensate = false; - __memcpy(&mTransformInfo, &j3dDefaultTransformInfo, sizeof(J3DTransformInfo)); + J3DTransformInfo* r30 = &mTransformInfo; + void* r29 = __memcpy(r30, &j3dDefaultTransformInfo, sizeof(J3DTransformInfo)); mBoundingSphereRadius = 0.0f; mMtxCalc = NULL; mMesh = NULL; @@ -173,16 +178,16 @@ void J3DJoint::entryIn() { j3dSys.getModel()->getShapePacket(mesh->getShape()->getIndex()); if (!matPacket->isLocked()) { if (mesh->getMaterialAnm()) { - J3DMaterialAnm* piVar8 = mesh->getMaterialAnm(); - piVar8->calc(mesh); + mesh->getMaterialAnm()->calc(mesh); } mesh->calc(anmMtx); } mesh->setCurrentMtx(); matPacket->setMaterialAnmID(mesh->getMaterialAnm()); matPacket->setShapePacket(shapePacket); - J3DDrawBuffer* drawBuffer = j3dSys.getDrawBuffer(mesh->isDrawModeOpaTexEdge()); - if ((u8)matPacket->entry(drawBuffer)) { + bool isDrawModeOpaTexEdge = mesh->isDrawModeOpaTexEdge() == FALSE; + u8 r24 = matPacket->entry(j3dSys.getDrawBuffer(isDrawModeOpaTexEdge)); + if (r24) { j3dSys.setMatPacket(matPacket); J3DDrawBuffer::entryNum++; mesh->makeDisplayList(); @@ -197,18 +202,18 @@ J3DMtxCalc* J3DJoint::mCurrentMtxCalc; void J3DJoint::recursiveCalc() { J3DMtxCalc* prevMtxCalc = NULL; Mtx prevCurrentMtx; - mDoMtx_copy(J3DSys::mCurrentMtx, prevCurrentMtx); - f32 currentX = J3DSys::mCurrentS.x; - f32 currentY = J3DSys::mCurrentS.y; - f32 currentZ = J3DSys::mCurrentS.z; - f32 parentX = J3DSys::mParentS.x; - f32 parentY = J3DSys::mParentS.y; - f32 parentZ = J3DSys::mParentS.z; + MTXCopy(J3DSys::mCurrentMtx, prevCurrentMtx); + Vec current, parent; + current = J3DSys::mCurrentS; + parent = J3DSys::mParentS; if (getMtxCalc() != NULL) { prevMtxCalc = getCurrentMtxCalc(); J3DMtxCalc* piVar2 = this->getMtxCalc(); setCurrentMtxCalc(piVar2); J3DMtxCalc::setJoint(this); +#if DEBUG + J3DMtxCalc::setMtxBuffer(J3DMtxCalc::getMtxBuffer()); +#endif piVar2->calc(); } else { if (getCurrentMtxCalc() != NULL) { @@ -223,18 +228,14 @@ void J3DJoint::recursiveCalc() { (*jointCallback)(this, 0); } - J3DJoint* child = getChild(); - if (child != NULL) { - child->recursiveCalc(); + J3DJoint* joint = getChild(); + if (joint != NULL) { + joint->recursiveCalc(); } - mDoMtx_copy(prevCurrentMtx, J3DSys::mCurrentMtx); + MTXCopy(prevCurrentMtx, J3DSys::mCurrentMtx); - J3DSys::mCurrentS.x = currentX; - J3DSys::mCurrentS.y = currentY; - J3DSys::mCurrentS.z = currentZ; - J3DSys::mParentS.x = parentX; - J3DSys::mParentS.y = parentY; - J3DSys::mParentS.z = parentZ; + J3DSys::mCurrentS = current; + J3DSys::mParentS = parent; if (prevMtxCalc != NULL) { setCurrentMtxCalc(prevMtxCalc); @@ -243,8 +244,8 @@ void J3DJoint::recursiveCalc() { (*jointCallback)(this, 1); } - J3DJoint* younger = getYounger(); - if (younger != NULL) { - younger->recursiveCalc(); + joint = getYounger(); + if (joint != NULL) { + joint->recursiveCalc(); } } diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index de6e4510bd..076670c80c 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -148,8 +148,8 @@ s32 J3DModel::createMatPacket(J3DModelData* pModelData, u32 mdlFlags) { } else { if (pModelData->getModelDataType() == 1) { if (mdlFlags & J3DMdlFlag_UseSingleDL) { - matPacket->mpDisplayListObj = materialNode->getSharedDisplayListObj(); - matPacket->setDisplayListObj(matPacket->mpDisplayListObj); + J3DDisplayListObj* dlobj = materialNode->getSharedDisplayListObj(); + matPacket->setDisplayListObj(dlobj); } else { J3DDisplayListObj* dlobj = materialNode->getSharedDisplayListObj(); ret = dlobj->single_To_Double(); diff --git a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp index bf1987365a..a1e9ba0243 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp @@ -409,7 +409,10 @@ void J3DMtxBuffer::calcDrawMtx(u32 mdlFlag, Vec const& param_1, Mtx const& param MtxP viewMtx; Mtx viewBaseMtx; - u16 fullWgtNum; + u16 fullWgtNum; // r25 + u16 local_68; + u16 local_6a; + u16 local_6c; switch (mdlFlag) { case 0: @@ -424,19 +427,19 @@ void J3DMtxBuffer::calcDrawMtx(u32 mdlFlag, Vec const& param_1, Mtx const& param } return; case 1: - fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); - for (u16 i = 0; i < fullWgtNum; i++) { + local_68 = mJointTree->getDrawFullWgtMtxNum(); + for (u16 i = 0; i < local_68; i++) { MTXCopy(getAnmMtx(mJointTree->getDrawMtxIndex(i)), *getDrawMtx(i)); } - fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); - for (u16 i = 0; i < fullWgtNum; i++) { + local_6a = mJointTree->getDrawFullWgtMtxNum(); + for (u16 i = 0; i < local_6a; i++) { MTXCopy(getWeightAnmMtx(i), *getDrawMtx(mJointTree->getDrawFullWgtMtxNum() + i)); } break; case 2: J3DCalcViewBaseMtx(j3dSys.getViewMtx(), param_1, param_2, viewBaseMtx); - fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); - for (u16 i = 0; i < fullWgtNum; i++) { + local_6c = mJointTree->getDrawFullWgtMtxNum(); + for (u16 i = 0; i < local_6c; i++) { MTXConcat(viewBaseMtx, getAnmMtx(mJointTree->getDrawMtxIndex(i)), *getDrawMtx(i)); } if (mJointTree->getDrawMtxNum() > mJointTree->getDrawFullWgtMtxNum()) { diff --git a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp index d2501ea709..d705c1c59a 100644 --- a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp @@ -1,6 +1,7 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphAnimator/J3DSkinDeform.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" #include "JSystem/JKernel/JKRHeap.h" #include <string> @@ -675,4 +676,23 @@ void J3DVtxColorCalc::calc(J3DModel* pModel) { calc(pModel->getVertexBuffer()); } +void J3DVtxColorCalc::calc(J3DVertexBuffer* buffer) { + J3D_ASSERT_NULLPTR(1366, buffer != NULL); + if (checkFlag(1) && mpVtxColor) { + buffer->swapVtxColArrayPointer(); + u16 anmTableNum = mpVtxColor->getAnmTableNum(0); + GXColor* colorArray = buffer->getVtxColArrayPointer(0); + for (u32 i = 0; i < anmTableNum; i++) { + GXColor color; + mpVtxColor->getColor(0, i, &color); + J3DAnmVtxColorIndexData* r28 = mpVtxColor->getAnmVtxColorIndexData(0, i); + for (u32 j = 0; j < r28->mNum; j++) { + colorArray[((u16*)r28->mpData)[j]] = color; + } + } + DCStoreRange(colorArray, buffer->getVertexData()->getColNum() * 4); + buffer->setCurrentVtxCol(colorArray); + } +} + J3DSkinDeform::~J3DSkinDeform() {} |
