[Scummvm-git-logs] scummvm master -> 721685dbf687fbc77429f36bd0257d9ff438604d
aquadran
noreply at scummvm.org
Thu Oct 17 18:18:14 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:
721685dbf6 WINTERMUTE: Convert FrameNode::updateMatrices() to DX math
Commit: 721685dbf687fbc77429f36bd0257d9ff438604d
https://github.com/scummvm/scummvm/commit/721685dbf687fbc77429f36bd0257d9ff438604d
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-17T20:18:07+02:00
Commit Message:
WINTERMUTE: Convert FrameNode::updateMatrices() to DX math
Changed paths:
engines/wintermute/base/gfx/xframe_node.cpp
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index dcc3a3a3e2d..e951b0fc840 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -252,41 +252,46 @@ FrameNode *FrameNode::findFrame(const char *frameName) {
//////////////////////////////////////////////////////////////////////////
bool FrameNode::updateMatrices(DXMatrix &parentMat) {
if (_transUsed[0]) {
- Math::Vector3d transPos = _transPos[0];
- Math::Vector3d transScale = _transScale[0];
- Math::Quaternion transRot = _transRot[0];
+ DXVector3 transPos = DXVector3(_transPos[0].getData());
+ DXVector3 transScale = DXVector3(_transScale[0].getData());
+ DXQuaternion transRot = DXQuaternion(_transRot[0].getData());
float lerpValue = _lerpValue[0];
if (_transUsed[1]) {
- transScale = (1 - lerpValue) * transScale + lerpValue * _transScale[1];
- transRot = transRot.slerpQuat(_transRot[1], lerpValue);
- transPos = (1 - lerpValue) * transPos + lerpValue * _transPos[1];
+ DXVector3 transPos1 = DXVector3(_transPos[1].getData());
+ DXVector3 transScale1 = DXVector3(_transScale[1].getData());
+ DXQuaternion transRot1 = DXQuaternion(_transRot[1].getData());
+ DXVec3Lerp(&transScale, &transScale, &transScale1, lerpValue);
+ DXQuaternionSlerp(&transRot, &transRot, &transRot1, lerpValue);
+ DXVec3Lerp(&transPos, &transPos, &transPos1, lerpValue);
}
// prepare local transformation matrix
- _transformationMatrix.setToIdentity();
-
- Math::Matrix4 scaleMat;
- scaleMat.setToIdentity();
- scaleMat(0, 0) = transScale.x();
- scaleMat(1, 1) = transScale.y();
- scaleMat(2, 2) = transScale.z();
- Math::Matrix4 rotMat;
- transRot.toMatrix(rotMat);
- Math::Matrix4 posMat;
- posMat.setToIdentity();
- posMat.translate(transPos);
-
- _transformationMatrix = posMat * rotMat * scaleMat;
+ DXMatrix transformationMatrix = DXMatrix(_transformationMatrix.getData());
+ DXMatrixIdentity(&transformationMatrix);
+
+ DXMatrix scaleMat;
+ DXMatrixScaling(&scaleMat, transScale._x, transScale._y, transScale._z);
+ DXMatrixTranspose(&scaleMat, &scaleMat);
+ DXMatrixMultiply(&transformationMatrix, &scaleMat, &transformationMatrix);
+
+ DXMatrix rotMat;
+ DXMatrixRotationQuaternion(&rotMat, &transRot);
+ DXMatrixTranspose(&rotMat, &rotMat);
+ DXMatrixMultiply(&transformationMatrix, &rotMat, &transformationMatrix);
+
+ DXMatrix posMat;
+ DXMatrixTranslation(&posMat, transPos._x, transPos._y, transPos._z);
+ DXMatrixTranspose(&posMat, &posMat);
+ DXMatrixMultiply(&transformationMatrix, &posMat, &transformationMatrix);
+ _transformationMatrix.setData(transformationMatrix._m4x4);
}
_transUsed[0] = _transUsed[1] = false;
// multiply by parent transformation
- Math::Matrix4 parentMatrix;
- parentMatrix.setData(parentMat._m4x4);
- Math::Matrix4 combinedMatrix = parentMatrix * _transformationMatrix;
- _combinedMatrix = DXMatrix(combinedMatrix.getData());
+ DXMatrix transformationMatrix = DXMatrix(_transformationMatrix.getData());
+ DXMatrixMultiply(&_combinedMatrix, &parentMat, &transformationMatrix);
// update child frames
for (uint32 i = 0; i < _frames.size(); i++) {
More information about the Scummvm-git-logs
mailing list