mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
chore: fix xmodel root struct bone trans and quats
This commit is contained in:
parent
2687fbf9fd
commit
c261aef1ef
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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 = {
|
||||||
|
@ -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 = {
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user