[Scummvm-git-logs] scummvm master -> c8618922158b5c8db2163e66a3e12682f469ae8e
aquadran
noreply at scummvm.org
Mon Oct 14 16:34:00 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c861892215 WINTERMUTE: Sync function loadAnimationKeyData code with original
Commit: c8618922158b5c8db2163e66a3e12682f469ae8e
https://github.com/scummvm/scummvm/commit/c8618922158b5c8db2163e66a3e12682f469ae8e
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-14T18:33:55+02:00
Commit Message:
WINTERMUTE: Sync function loadAnimationKeyData code with original
Changed paths:
engines/wintermute/base/gfx/xanimation.cpp
diff --git a/engines/wintermute/base/gfx/xanimation.cpp b/engines/wintermute/base/gfx/xanimation.cpp
index ee04f699f88..065e2d9e23c 100644
--- a/engines/wintermute/base/gfx/xanimation.cpp
+++ b/engines/wintermute/base/gfx/xanimation.cpp
@@ -27,6 +27,7 @@
#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/math/math_util.h"
#include "engines/wintermute/base/gfx/xanimation.h"
#include "engines/wintermute/base/gfx/xanimation_set.h"
#include "engines/wintermute/base/gfx/xframe_node.h"
@@ -200,43 +201,33 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
return false;
}
- Math::Quaternion qRot;
- Math::Vector3d transVec;
- Math::Vector3d scaleVec;
+ DXQuaternion qRot;
+ DXVector3 transVec;
+ DXVector3 scaleVec;
for (uint32 key = 0; key < numKeys; key++) {
const XTimedFloatKeys *fileMatrixKey = &animationKey->_keys[key];
uint32 time = fileMatrixKey->_time;
assert(fileMatrixKey->_numTfkeys == 16);
- Math::Matrix4 keyData;
- for (int r = 0; r < 4; ++r) {
- for (int c = 0; c < 4; ++c) {
- keyData(c, r) = fileMatrixKey->_tfkeys[r * 4 + c];
- }
+ DXMatrix keyData;
+ for (uint32 i = 0; i < 16; ++i) {
+ keyData._m4x4[i] = fileMatrixKey->_tfkeys[i];
}
// mirror at orign
- keyData(2, 3) *= -1.0f;
+ keyData._m[3][2] *= -1.0f;
// mirror base vectors
- keyData(2, 0) *= -1.0f;
- keyData(2, 1) *= -1.0f;
+ keyData._m[0][2] *= -1.0f;
+ keyData._m[1][2] *= -1.0f;
// change handedness
- keyData(0, 2) *= -1.0f;
- keyData(1, 2) *= -1.0f;
-
- transVec = keyData.getPosition();
-
- scaleVec.x() = keyData(0, 0) * keyData(0, 0) + keyData(1, 0) * keyData(1, 0) + keyData(2, 0) * keyData(2, 0);
- scaleVec.x() = sqrtf(scaleVec.x());
- scaleVec.y() = keyData(0, 1) * keyData(0, 1) + keyData(1, 1) * keyData(1, 1) + keyData(2, 1) * keyData(2, 1);
- scaleVec.y() = sqrtf(scaleVec.y());
- scaleVec.z() = keyData(0, 2) * keyData(0, 2) + keyData(1, 2) * keyData(1, 2) + keyData(2, 2) * keyData(2, 2);
- scaleVec.z() = sqrtf(scaleVec.z());
+ keyData._m[2][0] *= -1.0f;
+ keyData._m[2][1] *= -1.0f;
- qRot.fromMatrix(keyData.getRotation());
+ // we always convert matrix keys to T-R-S
+ decomposeMatrixSimple(&keyData, &transVec, &scaleVec, &qRot);
BonePositionKey *positionKey = new BonePositionKey;
BoneScaleKey *scaleKey = new BoneScaleKey;
@@ -246,9 +237,9 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
scaleKey->_time = time;
rotationKey->_time = time;
- positionKey->_pos = transVec;
- scaleKey->_scale = scaleVec;
- rotationKey->_rotation = qRot;
+ positionKey->_pos = Math::Vector3d(transVec._x, transVec._y, transVec._z);
+ scaleKey->_scale = Math::Vector3d(scaleVec._x, scaleVec._y, scaleVec._z);
+ rotationKey->_rotation = Math::Vector4d(qRot._x, qRot._y, qRot._z, qRot._w);
_posKeys.push_back(positionKey);
_scaleKeys.push_back(scaleKey);
More information about the Scummvm-git-logs
mailing list