1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-03-03 13:09:40 +00:00

Rename Transformation->NiTransform and update everything directly related

This commit is contained in:
Alexei Kotov 2023-09-10 01:38:17 +03:00
parent 535290a83d
commit 6872c7144e
11 changed files with 52 additions and 77 deletions

View file

@ -6,9 +6,9 @@
namespace Nif::Testing namespace Nif::Testing
{ {
inline void init(Transformation& value) inline void init(NiTransform& value)
{ {
value = Transformation::getIdentity(); value = NiTransform::getIdentity();
} }
inline void init(Extra& value) inline void init(Extra& value)

View file

@ -274,12 +274,12 @@ namespace
using namespace Nif::Testing; using namespace Nif::Testing;
using NifBullet::BulletNifLoader; using NifBullet::BulletNifLoader;
void copy(const btTransform& src, Nif::Transformation& dst) void copy(const btTransform& src, Nif::NiTransform& dst)
{ {
dst.pos = osg::Vec3f(src.getOrigin().x(), src.getOrigin().y(), src.getOrigin().z()); dst.mTranslation = osg::Vec3f(src.getOrigin().x(), src.getOrigin().y(), src.getOrigin().z());
for (int row = 0; row < 3; ++row) for (int row = 0; row < 3; ++row)
for (int column = 0; column < 3; ++column) for (int column = 0; column < 3; ++column)
dst.rotation.mValues[row][column] = src.getBasis().getRow(row)[column]; dst.mRotation.mValues[row][column] = src.getBasis().getRow(row)[column];
} }
struct TestBulletNifLoader : Test struct TestBulletNifLoader : Test
@ -740,7 +740,7 @@ namespace
TEST_F(TestBulletNifLoader, for_tri_shape_root_node_and_filename_starting_with_x_should_return_animated_shape) TEST_F(TestBulletNifLoader, for_tri_shape_root_node_and_filename_starting_with_x_should_return_animated_shape)
{ {
copy(mTransform, mNiTriShape.trafo); copy(mTransform, mNiTriShape.trafo);
mNiTriShape.trafo.scale = 3; mNiTriShape.trafo.mScale = 3;
Nif::NIFFile file("xtest.nif"); Nif::NIFFile file("xtest.nif");
file.mRoots.push_back(&mNiTriShape); file.mRoots.push_back(&mNiTriShape);
@ -764,10 +764,10 @@ namespace
TEST_F(TestBulletNifLoader, for_tri_shape_child_node_and_filename_starting_with_x_should_return_animated_shape) TEST_F(TestBulletNifLoader, for_tri_shape_child_node_and_filename_starting_with_x_should_return_animated_shape)
{ {
copy(mTransform, mNiTriShape.trafo); copy(mTransform, mNiTriShape.trafo);
mNiTriShape.trafo.scale = 3; mNiTriShape.trafo.mScale = 3;
mNiTriShape.parents.push_back(&mNiNode); mNiTriShape.parents.push_back(&mNiNode);
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) })); mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
mNiNode.trafo.scale = 4; mNiNode.trafo.mScale = 4;
Nif::NIFFile file("xtest.nif"); Nif::NIFFile file("xtest.nif");
file.mRoots.push_back(&mNiNode); file.mRoots.push_back(&mNiNode);
@ -792,11 +792,11 @@ namespace
TestBulletNifLoader, for_two_tri_shape_children_nodes_and_filename_starting_with_x_should_return_animated_shape) TestBulletNifLoader, for_two_tri_shape_children_nodes_and_filename_starting_with_x_should_return_animated_shape)
{ {
copy(mTransform, mNiTriShape.trafo); copy(mTransform, mNiTriShape.trafo);
mNiTriShape.trafo.scale = 3; mNiTriShape.trafo.mScale = 3;
mNiTriShape.parents.push_back(&mNiNode); mNiTriShape.parents.push_back(&mNiNode);
copy(mTransform, mNiTriShape2.trafo); copy(mTransform, mNiTriShape2.trafo);
mNiTriShape2.trafo.scale = 3; mNiTriShape2.trafo.mScale = 3;
mNiTriShape2.parents.push_back(&mNiNode); mNiTriShape2.parents.push_back(&mNiNode);
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({
@ -835,11 +835,11 @@ namespace
mController.recType = Nif::RC_NiKeyframeController; mController.recType = Nif::RC_NiKeyframeController;
mController.flags |= Nif::Controller::Flag_Active; mController.flags |= Nif::Controller::Flag_Active;
copy(mTransform, mNiTriShape.trafo); copy(mTransform, mNiTriShape.trafo);
mNiTriShape.trafo.scale = 3; mNiTriShape.trafo.mScale = 3;
mNiTriShape.parents.push_back(&mNiNode); mNiTriShape.parents.push_back(&mNiNode);
mNiTriShape.mController = Nif::ControllerPtr(&mController); mNiTriShape.mController = Nif::ControllerPtr(&mController);
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) })); mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
mNiNode.trafo.scale = 4; mNiNode.trafo.mScale = 4;
Nif::NIFFile file("test.nif"); Nif::NIFFile file("test.nif");
file.mRoots.push_back(&mNiNode); file.mRoots.push_back(&mNiNode);
@ -865,17 +865,17 @@ namespace
mController.recType = Nif::RC_NiKeyframeController; mController.recType = Nif::RC_NiKeyframeController;
mController.flags |= Nif::Controller::Flag_Active; mController.flags |= Nif::Controller::Flag_Active;
copy(mTransform, mNiTriShape.trafo); copy(mTransform, mNiTriShape.trafo);
mNiTriShape.trafo.scale = 3; mNiTriShape.trafo.mScale = 3;
mNiTriShape.parents.push_back(&mNiNode); mNiTriShape.parents.push_back(&mNiNode);
copy(mTransform, mNiTriShape2.trafo); copy(mTransform, mNiTriShape2.trafo);
mNiTriShape2.trafo.scale = 3; mNiTriShape2.trafo.mScale = 3;
mNiTriShape2.parents.push_back(&mNiNode); mNiTriShape2.parents.push_back(&mNiNode);
mNiTriShape2.mController = Nif::ControllerPtr(&mController); mNiTriShape2.mController = Nif::ControllerPtr(&mController);
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({
Nif::NodePtr(&mNiTriShape), Nif::NodePtr(&mNiTriShape),
Nif::NodePtr(&mNiTriShape2), Nif::NodePtr(&mNiTriShape2),
})); }));
mNiNode.trafo.scale = 4; mNiNode.trafo.mScale = 4;
Nif::NIFFile file("test.nif"); Nif::NIFFile file("test.nif");
file.mRoots.push_back(&mNiNode); file.mRoots.push_back(&mNiNode);
@ -1352,12 +1352,12 @@ namespace
TEST_F(TestBulletNifLoader, should_handle_node_with_multiple_parents) TEST_F(TestBulletNifLoader, should_handle_node_with_multiple_parents)
{ {
copy(mTransform, mNiTriShape.trafo); copy(mTransform, mNiTriShape.trafo);
mNiTriShape.trafo.scale = 4; mNiTriShape.trafo.mScale = 4;
mNiTriShape.parents = { &mNiNode, &mNiNode2 }; mNiTriShape.parents = { &mNiNode, &mNiNode2 };
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) })); mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
mNiNode.trafo.scale = 2; mNiNode.trafo.mScale = 2;
mNiNode2.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) })); mNiNode2.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
mNiNode2.trafo.scale = 3; mNiNode2.trafo.mScale = 3;
Nif::NIFFile file("xtest.nif"); Nif::NIFFile file("xtest.nif");
file.mRoots.push_back(&mNiNode); file.mRoots.push_back(&mNiNode);

View file

@ -347,9 +347,7 @@ namespace Nif
void NiSkinData::read(NIFStream* nif) void NiSkinData::read(NIFStream* nif)
{ {
nif->read(mTransform.rotation); nif->read(mTransform);
nif->read(mTransform.pos);
nif->read(mTransform.scale);
uint32_t numBones; uint32_t numBones;
nif->read(numBones); nif->read(numBones);
@ -366,9 +364,7 @@ namespace Nif
mBones.resize(numBones); mBones.resize(numBones);
for (BoneInfo& bi : mBones) for (BoneInfo& bi : mBones)
{ {
nif->read(bi.mTransform.rotation); nif->read(bi.mTransform);
nif->read(bi.mTransform.pos);
nif->read(bi.mTransform.scale);
nif->read(bi.mBoundSphere); nif->read(bi.mBoundSphere);
uint16_t numVertices; uint16_t numVertices;

View file

@ -1,33 +1,10 @@
/*
OpenMW - The completely unofficial reimplementation of Morrowind
Copyright (C) 2008-2010 Nicolay Korslund
Email: < korslund@gmail.com >
WWW: https://openmw.org/
This file (data.h) is part of the OpenMW package.
OpenMW is distributed as free software: you can redistribute it
and/or modify it under the terms of the GNU General Public License
version 3, as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
version 3 along with this program. If not, see
https://www.gnu.org/licenses/ .
*/
#ifndef OPENMW_COMPONENTS_NIF_DATA_HPP #ifndef OPENMW_COMPONENTS_NIF_DATA_HPP
#define OPENMW_COMPONENTS_NIF_DATA_HPP #define OPENMW_COMPONENTS_NIF_DATA_HPP
#include "nifkey.hpp" #include "nifkey.hpp"
#include "niftypes.hpp" // Transformation #include "niftypes.hpp" // NiTransform
#include "node.hpp"
#include "recordptr.hpp" #include "recordptr.hpp"
#include <components/nif/node.hpp>
namespace Nif namespace Nif
{ {
@ -278,12 +255,12 @@ namespace Nif
struct BoneInfo struct BoneInfo
{ {
Transformation mTransform; NiTransform mTransform;
osg::BoundingSpheref mBoundSphere; osg::BoundingSpheref mBoundSphere;
std::vector<VertWeight> mWeights; std::vector<VertWeight> mWeights;
}; };
Transformation mTransform; NiTransform mTransform;
std::vector<BoneInfo> mBones; std::vector<BoneInfo> mBones;
NiSkinPartitionPtr mPartitions; NiSkinPartitionPtr mPartitions;
@ -413,5 +390,5 @@ namespace Nif
void read(NIFStream* nif) override; void read(NIFStream* nif) override;
}; };
} // Namespace }
#endif #endif

View file

@ -130,11 +130,11 @@ namespace Nif
} }
template <> template <>
void NIFStream::read<Transformation>(Transformation& t) void NIFStream::read<NiTransform>(NiTransform& transform)
{ {
read(t.pos); read(transform.mRotation);
read(t.rotation); read(transform.mTranslation);
read(t.scale); read(transform.mScale);
} }
template <> template <>
@ -192,7 +192,7 @@ namespace Nif
} }
template <> template <>
void NIFStream::read<Transformation>(Transformation* dest, size_t size) void NIFStream::read<NiTransform>(NiTransform* dest, size_t size)
{ {
readRange(*this, dest, size); readRange(*this, dest, size);
} }

View file

@ -159,7 +159,6 @@ namespace Nif
osg::Vec4f getVector4() { return get<osg::Vec4f>(); } osg::Vec4f getVector4() { return get<osg::Vec4f>(); }
Matrix3 getMatrix3() { return get<Matrix3>(); } Matrix3 getMatrix3() { return get<Matrix3>(); }
osg::Quat getQuaternion() { return get<osg::Quat>(); } osg::Quat getQuaternion() { return get<osg::Quat>(); }
Transformation getTrafo() { return get<Transformation>(); }
bool getBoolean() { return get<bool>(); } bool getBoolean() { return get<bool>(); }
std::string getString() { return get<std::string>(); } std::string getString() { return get<std::string>(); }
}; };
@ -177,7 +176,7 @@ namespace Nif
template <> template <>
void NIFStream::read<osg::BoundingSpheref>(osg::BoundingSpheref& sphere); void NIFStream::read<osg::BoundingSpheref>(osg::BoundingSpheref& sphere);
template <> template <>
void NIFStream::read<Transformation>(Transformation& t); void NIFStream::read<NiTransform>(NiTransform& transform);
template <> template <>
void NIFStream::read<bool>(bool& data); void NIFStream::read<bool>(bool& data);
template <> template <>
@ -196,7 +195,7 @@ namespace Nif
template <> template <>
void NIFStream::read<osg::BoundingSpheref>(osg::BoundingSpheref* dest, size_t size); void NIFStream::read<osg::BoundingSpheref>(osg::BoundingSpheref* dest, size_t size);
template <> template <>
void NIFStream::read<Transformation>(Transformation* dest, size_t size); void NIFStream::read<NiTransform>(NiTransform* dest, size_t size);
template <> template <>
void NIFStream::read<bool>(bool* dest, size_t size); void NIFStream::read<bool>(bool* dest, size_t size);
template <> template <>

View file

@ -53,29 +53,29 @@ namespace Nif
} }
}; };
struct Transformation struct NiTransform
{ {
osg::Vec3f pos; Matrix3 mRotation; // this can contain scale components too, including negative and nonuniform scales
Matrix3 rotation; // this can contain scale components too, including negative and nonuniform scales osg::Vec3f mTranslation;
float scale; float mScale;
osg::Matrixf toMatrix() const osg::Matrixf toMatrix() const
{ {
osg::Matrixf transform; osg::Matrixf transform;
transform.setTrans(pos); transform.setTrans(mTranslation);
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j) for (int j = 0; j < 3; ++j)
transform(j, i) = rotation.mValues[i][j] * scale; // NB column/row major difference transform(j, i) = mRotation.mValues[i][j] * mScale; // NB column/row major difference
return transform; return transform;
} }
bool isIdentity() const { return pos == osg::Vec3f(0, 0, 0) && rotation.isIdentity() && scale == 1.f; } bool isIdentity() const { return mRotation.isIdentity() && mTranslation == osg::Vec3f() && mScale == 1.f; }
static const Transformation& getIdentity() static const NiTransform& getIdentity()
{ {
static const Transformation identity = { osg::Vec3f(), Matrix3(), 1.0f }; static const NiTransform identity = { Matrix3(), osg::Vec3f(), 1.0f };
return identity; return identity;
} }
}; };

View file

@ -80,7 +80,10 @@ namespace Nif
NiObjectNET::read(nif); NiObjectNET::read(nif);
flags = nif->getBethVersion() <= 26 ? nif->getUShort() : nif->getUInt(); flags = nif->getBethVersion() <= 26 ? nif->getUShort() : nif->getUInt();
trafo = nif->getTrafo(); nif->read(trafo.mTranslation);
nif->read(trafo.mRotation);
nif->read(trafo.mScale);
if (nif->getVersion() <= NIFStream::generateVersion(4, 2, 2, 0)) if (nif->getVersion() <= NIFStream::generateVersion(4, 2, 2, 0))
velocity = nif->getVector3(); velocity = nif->getVector3();
if (nif->getBethVersion() <= NIFFile::BethVersion::BETHVER_FO3) if (nif->getBethVersion() <= NIFFile::BethVersion::BETHVER_FO3)
@ -130,7 +133,7 @@ namespace Nif
// We want to do this on world scene graph level rather than local scene graph level. // We want to do this on world scene graph level rather than local scene graph level.
if (0 == recIndex && !Misc::StringUtils::ciEqual(mName, "bip01")) if (0 == recIndex && !Misc::StringUtils::ciEqual(mName, "bip01"))
{ {
trafo = Nif::Transformation::getIdentity(); trafo = Nif::NiTransform::getIdentity();
} }
} }

View file

@ -83,7 +83,7 @@ namespace Nif
// Node flags. Interpretation depends somewhat on the type of node. // Node flags. Interpretation depends somewhat on the type of node.
unsigned int flags; unsigned int flags;
Transformation trafo; NiTransform trafo;
osg::Vec3f velocity; // Unused? Might be a run-time game state osg::Vec3f velocity; // Unused? Might be a run-time game state
PropertyList props; PropertyList props;

View file

@ -2,10 +2,10 @@
namespace NifOsg namespace NifOsg
{ {
MatrixTransform::MatrixTransform(const Nif::Transformation& trafo) MatrixTransform::MatrixTransform(const Nif::NiTransform& transform)
: osg::MatrixTransform(trafo.toMatrix()) : osg::MatrixTransform(transform.toMatrix())
, mScale(trafo.scale) , mScale(transform.mScale)
, mRotationScale(trafo.rotation) , mRotationScale(transform.mRotation)
{ {
} }

View file

@ -12,7 +12,7 @@ namespace NifOsg
{ {
public: public:
MatrixTransform() = default; MatrixTransform() = default;
MatrixTransform(const Nif::Transformation& trafo); MatrixTransform(const Nif::NiTransform& transform);
MatrixTransform(const MatrixTransform& copy, const osg::CopyOp& copyop); MatrixTransform(const MatrixTransform& copy, const osg::CopyOp& copyop);
META_Node(NifOsg, MatrixTransform) META_Node(NifOsg, MatrixTransform)