chore: fix xmodel root struct bone trans and quats

This commit is contained in:
Jan 2024-09-04 22:07:57 +02:00
parent 2687fbf9fd
commit c261aef1ef
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
7 changed files with 21 additions and 17 deletions

View File

@ -672,7 +672,7 @@ namespace T5
uint16_t* boneNames; uint16_t* boneNames;
char* parentList; char* parentList;
XModelQuat* quats; XModelQuat* quats;
vec4_t* trans; float* trans;
char* partClassification; char* partClassification;
DObjAnimMat* baseMat; DObjAnimMat* baseMat;
XSurface* surfs; XSurface* surfs;

View File

@ -616,7 +616,7 @@ namespace T6
ScriptString* boneNames; ScriptString* boneNames;
unsigned char* parentList; unsigned char* parentList;
XModelQuat* quats; XModelQuat* quats;
vec4_t* trans; float* trans;
unsigned char* partClassification; unsigned char* partClassification;
DObjAnimMat* baseMat; DObjAnimMat* baseMat;
XSurface* surfs; XSurface* surfs;

View File

@ -314,7 +314,9 @@ namespace
if (xmodel.numBones > xmodel.numRootBones) if (xmodel.numBones > xmodel.numRootBones)
{ {
xmodel.parentList = m_memory.Alloc<unsigned char>(xmodel.numBones - xmodel.numRootBones); xmodel.parentList = m_memory.Alloc<unsigned char>(xmodel.numBones - xmodel.numRootBones);
xmodel.trans = m_memory.Alloc<vec4_t>(xmodel.numBones - xmodel.numRootBones);
// For some reason Treyarch games allocate for a vec4 here. it is treated as a vec3 though?
xmodel.trans = m_memory.Alloc<float>((xmodel.numBones - xmodel.numRootBones) * 4u);
xmodel.quats = m_memory.Alloc<XModelQuat>(xmodel.numBones - xmodel.numRootBones); xmodel.quats = m_memory.Alloc<XModelQuat>(xmodel.numBones - xmodel.numRootBones);
} }
else else
@ -344,10 +346,10 @@ namespace
xmodel.parentList[nonRootIndex] = static_cast<unsigned char>(boneIndex - parentBoneIndex); xmodel.parentList[nonRootIndex] = static_cast<unsigned char>(boneIndex - parentBoneIndex);
auto& trans = xmodel.trans[nonRootIndex]; auto* trans = &xmodel.trans[nonRootIndex * 3];
trans.x = bone.localOffset[0]; trans[0] = bone.localOffset[0];
trans.y = bone.localOffset[1]; trans[1] = bone.localOffset[1];
trans.z = bone.localOffset[2]; trans[2] = bone.localOffset[2];
auto& quats = xmodel.quats[nonRootIndex]; auto& quats = xmodel.quats[nonRootIndex];
quats.v[0] = QuatInt16::ToInt16(bone.localRotation.x); quats.v[0] = QuatInt16::ToInt16(bone.localRotation.x);

View File

@ -139,10 +139,10 @@ namespace
} }
else else
{ {
const auto& trans = model->trans[boneNum - model->numRootBones]; const auto* trans = &model->trans[(boneNum - model->numRootBones) * 3];
bone.localOffset[0] = trans.x; bone.localOffset[0] = trans[0];
bone.localOffset[1] = trans.y; bone.localOffset[1] = trans[1];
bone.localOffset[2] = trans.z; bone.localOffset[2] = trans[2];
const auto& quat = model->quats[boneNum - model->numRootBones]; const auto& quat = model->quats[boneNum - model->numRootBones];
bone.localRotation = { bone.localRotation = {

View File

@ -153,10 +153,10 @@ namespace
} }
else else
{ {
const auto& trans = model->trans[boneNum - model->numRootBones]; const auto* trans = &model->trans[(boneNum - model->numRootBones) * 3];
bone.localOffset[0] = trans.x; bone.localOffset[0] = trans[0];
bone.localOffset[1] = trans.y; bone.localOffset[1] = trans[1];
bone.localOffset[2] = trans.z; bone.localOffset[2] = trans[2];
const auto& quat = model->quats[boneNum - model->numRootBones]; const auto& quat = model->quats[boneNum - model->numRootBones];
bone.localRotation = { bone.localRotation = {

View File

@ -13,7 +13,8 @@ set count parentList numBones - numRootBones;
set reusable quats; set reusable quats;
set count quats numBones - numRootBones; set count quats numBones - numRootBones;
set reusable trans; set reusable trans;
set count trans numBones - numRootBones; // This is actually the count but it looks like a bug? It is used like a vec3, but it takes as much memory as vec4
set count trans (numBones - numRootBones) * 4;
set reusable partClassification; set reusable partClassification;
set count partClassification numBones; set count partClassification numBones;
set reusable baseMat; set reusable baseMat;

View File

@ -13,7 +13,8 @@ set count parentList numBones - numRootBones;
set reusable quats; set reusable quats;
set count quats numBones - numRootBones; set count quats numBones - numRootBones;
set reusable trans; set reusable trans;
set count trans numBones - numRootBones; // This is actually the count but it looks like a bug? It is used like a vec3, but it takes as much memory as vec4
set count trans (numBones - numRootBones) * 4;
set reusable partClassification; set reusable partClassification;
set count partClassification numBones; set count partClassification numBones;
set reusable baseMat; set reusable baseMat;