mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-03 12:39:41 +00:00
Rename Transformation->NiTransform and update everything directly related
This commit is contained in:
parent
535290a83d
commit
6872c7144e
11 changed files with 52 additions and 77 deletions
|
@ -6,9 +6,9 @@
|
|||
|
||||
namespace Nif::Testing
|
||||
{
|
||||
inline void init(Transformation& value)
|
||||
inline void init(NiTransform& value)
|
||||
{
|
||||
value = Transformation::getIdentity();
|
||||
value = NiTransform::getIdentity();
|
||||
}
|
||||
|
||||
inline void init(Extra& value)
|
||||
|
|
|
@ -274,12 +274,12 @@ namespace
|
|||
using namespace Nif::Testing;
|
||||
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 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
|
||||
|
@ -740,7 +740,7 @@ namespace
|
|||
TEST_F(TestBulletNifLoader, for_tri_shape_root_node_and_filename_starting_with_x_should_return_animated_shape)
|
||||
{
|
||||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 3;
|
||||
mNiTriShape.trafo.mScale = 3;
|
||||
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
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)
|
||||
{
|
||||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 3;
|
||||
mNiTriShape.trafo.mScale = 3;
|
||||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiNode.trafo.scale = 4;
|
||||
mNiNode.trafo.mScale = 4;
|
||||
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
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)
|
||||
{
|
||||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 3;
|
||||
mNiTriShape.trafo.mScale = 3;
|
||||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
|
||||
copy(mTransform, mNiTriShape2.trafo);
|
||||
mNiTriShape2.trafo.scale = 3;
|
||||
mNiTriShape2.trafo.mScale = 3;
|
||||
mNiTriShape2.parents.push_back(&mNiNode);
|
||||
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({
|
||||
|
@ -835,11 +835,11 @@ namespace
|
|||
mController.recType = Nif::RC_NiKeyframeController;
|
||||
mController.flags |= Nif::Controller::Flag_Active;
|
||||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 3;
|
||||
mNiTriShape.trafo.mScale = 3;
|
||||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiTriShape.mController = Nif::ControllerPtr(&mController);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiNode.trafo.scale = 4;
|
||||
mNiNode.trafo.mScale = 4;
|
||||
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
|
@ -865,17 +865,17 @@ namespace
|
|||
mController.recType = Nif::RC_NiKeyframeController;
|
||||
mController.flags |= Nif::Controller::Flag_Active;
|
||||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 3;
|
||||
mNiTriShape.trafo.mScale = 3;
|
||||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
copy(mTransform, mNiTriShape2.trafo);
|
||||
mNiTriShape2.trafo.scale = 3;
|
||||
mNiTriShape2.trafo.mScale = 3;
|
||||
mNiTriShape2.parents.push_back(&mNiNode);
|
||||
mNiTriShape2.mController = Nif::ControllerPtr(&mController);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({
|
||||
Nif::NodePtr(&mNiTriShape),
|
||||
Nif::NodePtr(&mNiTriShape2),
|
||||
}));
|
||||
mNiNode.trafo.scale = 4;
|
||||
mNiNode.trafo.mScale = 4;
|
||||
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
|
@ -1352,12 +1352,12 @@ namespace
|
|||
TEST_F(TestBulletNifLoader, should_handle_node_with_multiple_parents)
|
||||
{
|
||||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 4;
|
||||
mNiTriShape.trafo.mScale = 4;
|
||||
mNiTriShape.parents = { &mNiNode, &mNiNode2 };
|
||||
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.trafo.scale = 3;
|
||||
mNiNode2.trafo.mScale = 3;
|
||||
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
|
|
|
@ -347,9 +347,7 @@ namespace Nif
|
|||
|
||||
void NiSkinData::read(NIFStream* nif)
|
||||
{
|
||||
nif->read(mTransform.rotation);
|
||||
nif->read(mTransform.pos);
|
||||
nif->read(mTransform.scale);
|
||||
nif->read(mTransform);
|
||||
|
||||
uint32_t numBones;
|
||||
nif->read(numBones);
|
||||
|
@ -366,9 +364,7 @@ namespace Nif
|
|||
mBones.resize(numBones);
|
||||
for (BoneInfo& bi : mBones)
|
||||
{
|
||||
nif->read(bi.mTransform.rotation);
|
||||
nif->read(bi.mTransform.pos);
|
||||
nif->read(bi.mTransform.scale);
|
||||
nif->read(bi.mTransform);
|
||||
nif->read(bi.mBoundSphere);
|
||||
|
||||
uint16_t numVertices;
|
||||
|
|
|
@ -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
|
||||
#define OPENMW_COMPONENTS_NIF_DATA_HPP
|
||||
|
||||
#include "nifkey.hpp"
|
||||
#include "niftypes.hpp" // Transformation
|
||||
#include "niftypes.hpp" // NiTransform
|
||||
#include "node.hpp"
|
||||
#include "recordptr.hpp"
|
||||
#include <components/nif/node.hpp>
|
||||
|
||||
namespace Nif
|
||||
{
|
||||
|
@ -278,12 +255,12 @@ namespace Nif
|
|||
|
||||
struct BoneInfo
|
||||
{
|
||||
Transformation mTransform;
|
||||
NiTransform mTransform;
|
||||
osg::BoundingSpheref mBoundSphere;
|
||||
std::vector<VertWeight> mWeights;
|
||||
};
|
||||
|
||||
Transformation mTransform;
|
||||
NiTransform mTransform;
|
||||
std::vector<BoneInfo> mBones;
|
||||
NiSkinPartitionPtr mPartitions;
|
||||
|
||||
|
@ -413,5 +390,5 @@ namespace Nif
|
|||
void read(NIFStream* nif) override;
|
||||
};
|
||||
|
||||
} // Namespace
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -130,11 +130,11 @@ namespace Nif
|
|||
}
|
||||
|
||||
template <>
|
||||
void NIFStream::read<Transformation>(Transformation& t)
|
||||
void NIFStream::read<NiTransform>(NiTransform& transform)
|
||||
{
|
||||
read(t.pos);
|
||||
read(t.rotation);
|
||||
read(t.scale);
|
||||
read(transform.mRotation);
|
||||
read(transform.mTranslation);
|
||||
read(transform.mScale);
|
||||
}
|
||||
|
||||
template <>
|
||||
|
@ -192,7 +192,7 @@ namespace Nif
|
|||
}
|
||||
|
||||
template <>
|
||||
void NIFStream::read<Transformation>(Transformation* dest, size_t size)
|
||||
void NIFStream::read<NiTransform>(NiTransform* dest, size_t size)
|
||||
{
|
||||
readRange(*this, dest, size);
|
||||
}
|
||||
|
|
|
@ -159,7 +159,6 @@ namespace Nif
|
|||
osg::Vec4f getVector4() { return get<osg::Vec4f>(); }
|
||||
Matrix3 getMatrix3() { return get<Matrix3>(); }
|
||||
osg::Quat getQuaternion() { return get<osg::Quat>(); }
|
||||
Transformation getTrafo() { return get<Transformation>(); }
|
||||
bool getBoolean() { return get<bool>(); }
|
||||
std::string getString() { return get<std::string>(); }
|
||||
};
|
||||
|
@ -177,7 +176,7 @@ namespace Nif
|
|||
template <>
|
||||
void NIFStream::read<osg::BoundingSpheref>(osg::BoundingSpheref& sphere);
|
||||
template <>
|
||||
void NIFStream::read<Transformation>(Transformation& t);
|
||||
void NIFStream::read<NiTransform>(NiTransform& transform);
|
||||
template <>
|
||||
void NIFStream::read<bool>(bool& data);
|
||||
template <>
|
||||
|
@ -196,7 +195,7 @@ namespace Nif
|
|||
template <>
|
||||
void NIFStream::read<osg::BoundingSpheref>(osg::BoundingSpheref* dest, size_t size);
|
||||
template <>
|
||||
void NIFStream::read<Transformation>(Transformation* dest, size_t size);
|
||||
void NIFStream::read<NiTransform>(NiTransform* dest, size_t size);
|
||||
template <>
|
||||
void NIFStream::read<bool>(bool* dest, size_t size);
|
||||
template <>
|
||||
|
|
|
@ -53,29 +53,29 @@ namespace Nif
|
|||
}
|
||||
};
|
||||
|
||||
struct Transformation
|
||||
struct NiTransform
|
||||
{
|
||||
osg::Vec3f pos;
|
||||
Matrix3 rotation; // this can contain scale components too, including negative and nonuniform scales
|
||||
float scale;
|
||||
Matrix3 mRotation; // this can contain scale components too, including negative and nonuniform scales
|
||||
osg::Vec3f mTranslation;
|
||||
float mScale;
|
||||
|
||||
osg::Matrixf toMatrix() const
|
||||
{
|
||||
osg::Matrixf transform;
|
||||
transform.setTrans(pos);
|
||||
transform.setTrans(mTranslation);
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -80,7 +80,10 @@ namespace Nif
|
|||
NiObjectNET::read(nif);
|
||||
|
||||
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))
|
||||
velocity = nif->getVector3();
|
||||
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.
|
||||
if (0 == recIndex && !Misc::StringUtils::ciEqual(mName, "bip01"))
|
||||
{
|
||||
trafo = Nif::Transformation::getIdentity();
|
||||
trafo = Nif::NiTransform::getIdentity();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace Nif
|
|||
// Node flags. Interpretation depends somewhat on the type of node.
|
||||
unsigned int flags;
|
||||
|
||||
Transformation trafo;
|
||||
NiTransform trafo;
|
||||
osg::Vec3f velocity; // Unused? Might be a run-time game state
|
||||
PropertyList props;
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
namespace NifOsg
|
||||
{
|
||||
MatrixTransform::MatrixTransform(const Nif::Transformation& trafo)
|
||||
: osg::MatrixTransform(trafo.toMatrix())
|
||||
, mScale(trafo.scale)
|
||||
, mRotationScale(trafo.rotation)
|
||||
MatrixTransform::MatrixTransform(const Nif::NiTransform& transform)
|
||||
: osg::MatrixTransform(transform.toMatrix())
|
||||
, mScale(transform.mScale)
|
||||
, mRotationScale(transform.mRotation)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace NifOsg
|
|||
{
|
||||
public:
|
||||
MatrixTransform() = default;
|
||||
MatrixTransform(const Nif::Transformation& trafo);
|
||||
MatrixTransform(const Nif::NiTransform& transform);
|
||||
MatrixTransform(const MatrixTransform& copy, const osg::CopyOp& copyop);
|
||||
|
||||
META_Node(NifOsg, MatrixTransform)
|
||||
|
|
Loading…
Reference in a new issue