[Scummvm-git-logs] scummvm master -> 1d70f28214263b268e39d39956b973953d23bf5d
aquadran
noreply at scummvm.org
Sun Oct 20 14:33:50 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:
1d70f28214 WINTERMUTE: Match matrix transformations with original code
Commit: 1d70f28214263b268e39d39956b973953d23bf5d
https://github.com/scummvm/scummvm/commit/1d70f28214263b268e39d39956b973953d23bf5d
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-20T16:33:46+02:00
Commit Message:
WINTERMUTE: Match matrix transformations with original code
Changed paths:
engines/wintermute/ad/ad_actor_3dx.cpp
engines/wintermute/ad/ad_attach_3dx.cpp
engines/wintermute/base/gfx/xframe_node.cpp
engines/wintermute/base/gfx/xmesh.cpp
engines/wintermute/base/gfx/xskinmesh.cpp
diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index ae688fdf72e..7959f80c3aa 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -517,7 +517,7 @@ bool AdActor3DX::displayShadowVolume() {
}
DXMatrix viewMat;
- DXMatrixMultiply(&viewMat, &_worldMatrix, boneMat);
+ DXMatrixMultiply(&viewMat, boneMat, &_worldMatrix);
at->displayShadowVol(&viewMat, &lightVector, extrusionDepth, true);
}
@@ -568,7 +568,7 @@ bool AdActor3DX::displayAttachments(bool registerObjects) {
}
DXMatrix viewMat;
- DXMatrixMultiply(&viewMat, &origView, boneMat);
+ DXMatrixMultiply(&viewMat, boneMat, &origView);
at->displayAttachable(&viewMat, registerObjects);
}
diff --git a/engines/wintermute/ad/ad_attach_3dx.cpp b/engines/wintermute/ad/ad_attach_3dx.cpp
index ee5b793c009..4a059031187 100644
--- a/engines/wintermute/ad/ad_attach_3dx.cpp
+++ b/engines/wintermute/ad/ad_attach_3dx.cpp
@@ -107,7 +107,7 @@ bool AdAttach3DX::displayAttachable(DXMatrix *viewMat, bool registerObjects) {
//////////////////////////////////////////////////////////////////////////
bool AdAttach3DX::displayShadowVol(DXMatrix *modelMat, DXVector3 *light, float extrusionDepth, bool update) {
DXMatrix finalMat;
- DXMatrixMultiply(&finalMat, modelMat, &_worldMatrix);
+ DXMatrixMultiply(&finalMat, &_worldMatrix, modelMat);
if (_xmodel) {
if (update) {
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index e1ad7b98874..7e74793eb99 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -128,23 +128,21 @@ bool FrameNode::loadFromXData(const Common::String &filename, XModel *model, XFi
BaseEngine::LOG(0, "Error loading transformation matrix");
return false;
} else {
- for (int r = 0; r < 4; ++r) {
- for (int c = 0; c < 4; ++c) {
- _transformationMatrix._m[c][r] = frameTransformMatrix->_frameMatrix[r * 4 + c];
- }
+ for (int i = 0; i < 16; ++i) {
+ _transformationMatrix._m4x4[i] = frameTransformMatrix->_frameMatrix[i];
}
// mirror at orign
- _transformationMatrix._m[2][3] *= -1.0f;
+ _transformationMatrix._m[3][2] *= -1.0f;
// mirror base vectors
- _transformationMatrix._m[2][0] *= -1.0f;
- _transformationMatrix._m[2][1] *= -1.0f;
-
- // change handedness
_transformationMatrix._m[0][2] *= -1.0f;
_transformationMatrix._m[1][2] *= -1.0f;
+ // change handedness
+ _transformationMatrix._m[2][0] *= -1.0f;
+ _transformationMatrix._m[2][1] *= -1.0f;
+
_originalMatrix = _transformationMatrix;
return true;
}
@@ -271,23 +269,20 @@ bool FrameNode::updateMatrices(DXMatrix *parentMat) {
DXMatrix scaleMat;
DXMatrixScaling(&scaleMat, transScale._x, transScale._y, transScale._z);
- DXMatrixTranspose(&scaleMat, &scaleMat);
- DXMatrixMultiply(&_transformationMatrix, &scaleMat, &_transformationMatrix);
+ DXMatrixMultiply(&_transformationMatrix, &_transformationMatrix, &scaleMat);
DXMatrix rotMat;
DXMatrixRotationQuaternion(&rotMat, &transRot);
- DXMatrixTranspose(&rotMat, &rotMat);
- DXMatrixMultiply(&_transformationMatrix, &rotMat, &_transformationMatrix);
+ DXMatrixMultiply(&_transformationMatrix, &_transformationMatrix, &rotMat);
DXMatrix posMat;
DXMatrixTranslation(&posMat, transPos._x, transPos._y, transPos._z);
- DXMatrixTranspose(&posMat, &posMat);
- DXMatrixMultiply(&_transformationMatrix, &posMat, &_transformationMatrix);
+ DXMatrixMultiply(&_transformationMatrix, &_transformationMatrix, &posMat);
}
_transUsed[0] = _transUsed[1] = false;
// multiply by parent transformation
- DXMatrixMultiply(&_combinedMatrix, parentMat, &_transformationMatrix);
+ DXMatrixMultiply(&_combinedMatrix, &_transformationMatrix, parentMat);
// update child frames
for (uint32 i = 0; i < _frames.size(); i++) {
diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index 32a70972a85..565122bfb87 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -218,13 +218,7 @@ bool XMesh::update(FrameNode *parentFrame) {
// prepare final matrices
for (int i = 0; i < numBones; i++) {
- DXMatrix offsetMatrix;
- for (int r = 0; r < 4; ++r) {
- for (int c = 0; c < 4; ++c) {
- offsetMatrix._m[c][r] = _skinMesh->getBoneOffsetMatrix(i)->_m4x4[r * 4 + c];
- }
- }
- DXMatrixMultiply(&boneMatrices[i], _boneMatrices[i], &offsetMatrix);
+ DXMatrixMultiply(&boneMatrices[i], _skinMesh->getBoneOffsetMatrix(i), _boneMatrices[i]);
}
// generate skinned mesh
diff --git a/engines/wintermute/base/gfx/xskinmesh.cpp b/engines/wintermute/base/gfx/xskinmesh.cpp
index a2bd0c85dca..bd6c2f2b0af 100644
--- a/engines/wintermute/base/gfx/xskinmesh.cpp
+++ b/engines/wintermute/base/gfx/xskinmesh.cpp
@@ -394,7 +394,6 @@ bool DXSkinInfo::updateSkinnedMesh(const DXMatrix *boneTransforms, void *srcVert
for (i = 0; i < _numBones; i++) {
DXMatrix boneMatrix = boneTransforms[i];
- DXMatrixTranspose(&boneMatrix, &boneMatrix);
for (j = 0; j < _bones[i]._numInfluences; j++) {
DXVector3 position;
@@ -421,6 +420,7 @@ bool DXSkinInfo::updateSkinnedMesh(const DXMatrix *boneTransforms, void *srcVert
for (i = 0; i < _numBones; i++) {
DXMatrix boneInverse = boneTransforms[i];
DXMatrixInverse(&boneInverse, NULL, &boneInverse);
+ DXMatrixTranspose(&boneInverse, &boneInverse);
for (j = 0; j < _bones[i]._numInfluences; j++) {
DXVector3 normal;
More information about the Scummvm-git-logs
mailing list