62 lines
2.0 KiB
C++
62 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "../Utils/MeshHelper.hpp"
|
|
|
|
|
|
class WorldObject {
|
|
public:
|
|
virtual const Mesh& GetObjectMesh() const = 0;
|
|
virtual const size_t GetObjectVerticesCount() const = 0;
|
|
const M3D_MATRIX GetTransform() noexcept {
|
|
M3D_MATRIX M = M3D_MIdentity();
|
|
M *= M3D_TransformMatrixScale(M3D_V4LoadF3(&scale));
|
|
M *= M3D_TransformMatrixRotation(M3D_V4LoadF3(&rot));
|
|
M *= M3D_TransformMatrixTranslate(M3D_V4LoadF3(&pos));
|
|
return M;
|
|
}
|
|
const M3D_F4X4 GetTransform4x4f() noexcept {
|
|
M3D_F4X4 out;
|
|
M3D_V4StoreF4x4(&out, GetTransform());
|
|
return out;
|
|
}
|
|
|
|
const M3D_BoundingBox& GetAABB() const noexcept { return aabb; }
|
|
|
|
void SetPosition(M3D_F3& _pos) noexcept { pos = _pos; }
|
|
void SetPosition(float _x, float _y, float _z) noexcept { pos = M3D_F3(_x, _y, _z); }
|
|
void SetRotation(M3D_F3& _rot) noexcept { rot = _rot; }
|
|
void SetRotation(float _x, float _y, float _z) noexcept { rot = M3D_F3(_x, _y, _z); }
|
|
void SetScale(M3D_F3& _scale) noexcept { scale = _scale; }
|
|
void SetScale(float _s) noexcept { scale = M3D_F3(_s, _s, _s); }
|
|
void SetScale(float _x, float _y, float _z) noexcept { scale = M3D_F3(_x, _y, _z); }
|
|
|
|
protected:
|
|
WorldObject() = default;
|
|
|
|
M3D_BoundingBox aabb;
|
|
|
|
M3D_F3 scale = M3D_F3(1.0f, 1.0f, 1.0f);
|
|
M3D_F3 rot = M3D_F3(0.0f, 0.0f, 0.0f);
|
|
M3D_F3 pos = M3D_F3(0.0f, 0.0f, 0.0f);
|
|
|
|
};
|
|
|
|
template<class D>
|
|
class WorldObjectAbstract : virtual public WorldObject {
|
|
public:
|
|
virtual ~WorldObjectAbstract() = 0;
|
|
|
|
const Mesh& GetObjectMesh() const noexcept override { return mMesh; }
|
|
const size_t GetObjectVerticesCount() const noexcept override { return mMesh.GetVerticesCount(); }
|
|
|
|
void LoadMeshFromObjFile(std::string file);
|
|
void UpdateAABBFromMesh() noexcept {
|
|
M3D_BoundingBox::CreateFromPoints(aabb, GetObjectVerticesCount(), reinterpret_cast<const M3D_F3*>(GetObjectMesh().vertices.data()), sizeof(Vertex));
|
|
}
|
|
|
|
protected:
|
|
inline static Mesh mMesh;
|
|
|
|
};
|
|
|
|
#include "WorldObject.tpp" |