[Scummvm-git-logs] scummvm master -> 6aac0ba2e18ba08f4186977741f608f2791808ab
aquadran
noreply at scummvm.org
Thu Oct 17 17:18:42 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:
6aac0ba2e1 WINTERMUTE: Convert XMesh::update to DX math
Commit: 6aac0ba2e18ba08f4186977741f608f2791808ab
https://github.com/scummvm/scummvm/commit/6aac0ba2e18ba08f4186977741f608f2791808ab
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-17T19:18:37+02:00
Commit Message:
WINTERMUTE: Convert XMesh::update to DX math
Changed paths:
engines/wintermute/base/gfx/xframe_node.cpp
engines/wintermute/base/gfx/xmesh.cpp
engines/wintermute/base/gfx/xmesh.h
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index 0864b82a1f3..0c3b2495687 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -415,13 +415,13 @@ bool FrameNode::pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir
//////////////////////////////////////////////////////////////////////////
bool FrameNode::getBoundingBox(Math::Vector3d *boxStart, Math::Vector3d *boxEnd) {
for (uint32 i = 0; i < _meshes.size(); i++) {
- boxStart->x() = MIN(boxStart->x(), _meshes[i]->_BBoxStart.x());
- boxStart->y() = MIN(boxStart->y(), _meshes[i]->_BBoxStart.y());
- boxStart->z() = MIN(boxStart->z(), _meshes[i]->_BBoxStart.z());
+ boxStart->x() = MIN(boxStart->x(), _meshes[i]->_BBoxStart._x);
+ boxStart->y() = MIN(boxStart->y(), _meshes[i]->_BBoxStart._y);
+ boxStart->z() = MIN(boxStart->z(), _meshes[i]->_BBoxStart._z);
- boxEnd->x() = MAX(boxEnd->x(), _meshes[i]->_BBoxEnd.x());
- boxEnd->y() = MAX(boxEnd->y(), _meshes[i]->_BBoxEnd.y());
- boxEnd->z() = MAX(boxEnd->z(), _meshes[i]->_BBoxEnd.z());
+ boxEnd->x() = MAX(boxEnd->x(), _meshes[i]->_BBoxEnd._x);
+ boxEnd->y() = MAX(boxEnd->y(), _meshes[i]->_BBoxEnd._y);
+ boxEnd->z() = MAX(boxEnd->z(), _meshes[i]->_BBoxEnd._z);
}
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 b92e20fc139..562ea966b70 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -48,7 +48,7 @@ XMesh::XMesh(Wintermute::BaseGame *inGame) : BaseNamedObject(inGame) {
_boneMatrices = nullptr;
_adjacency = nullptr;
- _BBoxStart = _BBoxEnd = Math::Vector3d(0.0f, 0.0f, 0.0f);
+ _BBoxStart = _BBoxEnd = DXVector3(0.0f, 0.0f, 0.0f);
}
XMesh::~XMesh() {
@@ -217,16 +217,14 @@ bool XMesh::update(FrameNode *parentFrame) {
DXMatrix *boneMatrices = new DXMatrix[numBones];
// prepare final matrices
- for (int i = 0; i < numBones; ++i) {
- Math::Matrix4 offsetMatrix;
+ for (int i = 0; i < numBones; i++) {
+ DXMatrix offsetMatrix;
for (int r = 0; r < 4; ++r) {
for (int c = 0; c < 4; ++c) {
- offsetMatrix(c, r) = _skinMesh->getBoneOffsetMatrix(i)->_m4x4[r * 4 + c];
+ offsetMatrix._m[c][r] = _skinMesh->getBoneOffsetMatrix(i)->_m4x4[r * 4 + c];
}
}
- Math::Matrix4 boneMatrix;
- boneMatrix.setData(_boneMatrices[i]->_m4x4);
- boneMatrices[i] = DXMatrix((boneMatrix * offsetMatrix).getData());
+ DXMatrixMultiply(&boneMatrices[i], _boneMatrices[i], &offsetMatrix);
}
// generate skinned mesh
@@ -241,13 +239,9 @@ bool XMesh::update(FrameNode *parentFrame) {
// update mesh bounding box
byte *points = _blendedMesh->getVertexBuffer().ptr();
- DXVector3 BBoxStart = DXVector3(_BBoxStart.x(), _BBoxStart.y(), _BBoxStart.z());
- DXVector3 BBoxEnd = DXVector3(_BBoxEnd.x(), _BBoxEnd.y(), _BBoxEnd.z());
- DXComputeBoundingBox((DXVector3 *)points, _blendedMesh->getNumVertices(), DXGetFVFVertexSize(_blendedMesh->getFVF()), &BBoxStart, &BBoxEnd);
- _BBoxStart = Math::Vector3d(BBoxStart._x, BBoxStart._y, BBoxStart._z);
- _BBoxEnd = Math::Vector3d(BBoxEnd._x, BBoxEnd._y, BBoxEnd._z);
+ DXComputeBoundingBox((DXVector3 *)points, _blendedMesh->getNumVertices(), DXGetFVFVertexSize(_blendedMesh->getFVF()), &_BBoxStart, &_BBoxEnd);
// if you want something done right...
- if (isnan(_BBoxEnd.x())) {
+ if (isnan(_BBoxEnd._x)) {
float minX = FLT_MAX;
float minY = FLT_MAX;
float minZ = FLT_MAX;
@@ -271,8 +265,8 @@ bool XMesh::update(FrameNode *parentFrame) {
vectBuf += DXGetFVFVertexSize(fvfSize);
}
- _BBoxStart = Math::Vector3d(minX, minY, minZ);
- _BBoxEnd = Math::Vector3d(maxX, maxY, maxZ);
+ _BBoxStart = DXVector3(minX, minY, minZ);
+ _BBoxEnd = DXVector3(maxX, maxY, maxZ);
}
} else {
// update static mesh
@@ -287,22 +281,16 @@ bool XMesh::update(FrameNode *parentFrame) {
for (uint32 i = 0; i < numVertices; i++) {
DXVector3 v = *(DXVector3 *)(oldPoints + i * fvfSize);
- Math::Vector3d newVertex = Math::Vector3d(v._x, v._y, v._z);
- Math::Matrix4 combinedMatrix;
- combinedMatrix.setData(parentFrame->getCombinedMatrix()->_m4x4);
- combinedMatrix.transform(&newVertex, true);
-
- ((DXVector3 *)(newPoints + i * fvfSize))->_x = newVertex.x();
- ((DXVector3 *)(newPoints + i * fvfSize))->_y = newVertex.y();
- ((DXVector3 *)(newPoints + i * fvfSize))->_z = newVertex.z();
+ DXVector4 newVertex;
+ DXVec3Transform(&newVertex, &v, parentFrame->getCombinedMatrix());
+
+ ((DXVector3 *)(newPoints + i * fvfSize))->_x = newVertex._x;
+ ((DXVector3 *)(newPoints + i * fvfSize))->_y = newVertex._y;
+ ((DXVector3 *)(newPoints + i * fvfSize))->_z = newVertex._z;
}
// update bounding box
- DXVector3 BBoxStart = DXVector3(_BBoxStart.x(), _BBoxStart.y(), _BBoxStart.z());
- DXVector3 BBoxEnd = DXVector3(_BBoxEnd.x(), _BBoxEnd.y(), _BBoxEnd.z());
- DXComputeBoundingBox((DXVector3 *)newPoints, _blendedMesh->getNumVertices(), DXGetFVFVertexSize(_blendedMesh->getFVF()), &BBoxStart, &BBoxEnd);
- _BBoxStart = Math::Vector3d(BBoxStart._x, BBoxStart._y, BBoxStart._z);
- _BBoxEnd = Math::Vector3d(BBoxEnd._x, BBoxEnd._y, BBoxEnd._z);
+ DXComputeBoundingBox((DXVector3 *)newPoints, _blendedMesh->getNumVertices(), DXGetFVFVertexSize(_blendedMesh->getFVF()), &_BBoxStart, &_BBoxEnd);
}
return res;
}
diff --git a/engines/wintermute/base/gfx/xmesh.h b/engines/wintermute/base/gfx/xmesh.h
index 2bf710fdd5b..eb07e5c0a86 100644
--- a/engines/wintermute/base/gfx/xmesh.h
+++ b/engines/wintermute/base/gfx/xmesh.h
@@ -61,8 +61,8 @@ public:
bool pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir);
- Math::Vector3d _BBoxStart;
- Math::Vector3d _BBoxEnd;
+ DXVector3 _BBoxStart;
+ DXVector3 _BBoxEnd;
bool setMaterialSprite(const Common::String &matName, BaseSprite *sprite);
bool setMaterialTheora(const Common::String &matName, VideoTheoraPlayer *theora);
More information about the Scummvm-git-logs
mailing list