Added MeshInfos demo Added MD5Mesh/MD5Anim loader support Added Node class Fixed ResourceParams not being exported Added support for skeletal animation (Animation/Mesh/Joint/SkeletalMesh/Skeleton) Meshes are now only stored with VertexStruct_XYZ_Normal_UV_Tangent type Moved Sequence declaration to Sequence.hpp -Animation: Renamed Create to Create[Keyframe|Skeletal] -AxisAlignedBox: Added Contains method Added GetCorner method Added GetCube method Added Transform method -Cube/Rect: Added GetPosition method Added GetSize method (Almost) Fixed ExtendTo method Fixed GetCenter method -File: Added GetDirectory static function Added GetPath method Renamed GetDirectoryPath method to GetDirectory -Math module: Fixed constructor/methods taking a non-const array GetNormal/Normalize methods now takes an optionnal integer pointer (returning length) Made all classes default constructor trivial Inverse, MakeIdentity, MakeZero, Normalize, Set methods now returns reference to object -Matrix4: Modified methods to avoid copies Removed COW (Too much overhead) Removed Concatenate[Affine] static function -Mesh: Renamed Create to Create[Keyframe|Skeletal|Static] Renamed Skin to Material -MeshParams: No longer takes declaration argument Renamed loadAnimations to animated Storage default to BufferStorage_Hardware if supported and BufferStorage_Software otherwise -OpenGL: Added glGetBooleanv function Added glIsEnabled function -Quaternion: Added ComputeW method Added Conjugate method -Renderer: Added IsEnabled static function Fixed GetLineWidth function not being static Removed SetVertexDeclaration -RenderWindow: Made CopyTo[Image|Texture] method constant -Resource Fixed RemoveResourceListener crash -ResourceLoader: Loaders are now used in a LIFO context -Stream: Renamed GetLine method to ReadLine -String: Fixed Simplified -Utility module Added configuration define for strict resource parsing -VertexBuffer Now takes a VertexDeclaration pointer -VertexDeclaration No longer throw an error when getting a non-existing element Former-commit-id: f7358c1231d6af48b799d2f24f077a001e16785b
112 lines
3.4 KiB
C++
112 lines
3.4 KiB
C++
// Copyright (C) 2012 Jérôme Leclercq
|
|
// This file is part of the "Nazara Engine - Utility module"
|
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
|
|
|
#pragma once
|
|
|
|
#ifndef NAZARA_MESH_HPP
|
|
#define NAZARA_MESH_HPP
|
|
|
|
#include <Nazara/Prerequesites.hpp>
|
|
#include <Nazara/Core/InputStream.hpp>
|
|
#include <Nazara/Core/Resource.hpp>
|
|
#include <Nazara/Core/ResourceListener.hpp>
|
|
#include <Nazara/Core/ResourceLoader.hpp>
|
|
#include <Nazara/Core/String.hpp>
|
|
#include <Nazara/Utility/Animation.hpp>
|
|
#include <Nazara/Utility/AxisAlignedBox.hpp>
|
|
#include <Nazara/Utility/Skeleton.hpp>
|
|
#include <Nazara/Utility/SubMesh.hpp>
|
|
#include <Nazara/Utility/VertexStruct.hpp>
|
|
|
|
class NzVertexDeclaration;
|
|
|
|
struct NAZARA_API NzMeshParams
|
|
{
|
|
NzMeshParams(); // Vérifie que le storage indiqué un peu plus bas est supporté
|
|
|
|
NzAnimationParams animation;
|
|
nzBufferStorage storage = nzBufferStorage_Hardware;
|
|
bool animated = true;
|
|
|
|
bool IsValid() const;
|
|
};
|
|
|
|
class NzMesh;
|
|
|
|
typedef NzVertexStruct_XYZ_Normal_UV_Tangent NzMeshVertex;
|
|
|
|
using NzMeshLoader = NzResourceLoader<NzMesh, NzMeshParams>;
|
|
|
|
struct NzMeshImpl;
|
|
|
|
class NAZARA_API NzMesh : public NzResource, NzResourceListener
|
|
{
|
|
friend NzMeshLoader;
|
|
|
|
public:
|
|
NzMesh() = default;
|
|
~NzMesh();
|
|
|
|
bool AddMaterial(const NzString& matPath, unsigned int* matIndex = nullptr);
|
|
bool AddSubMesh(NzSubMesh* subMesh);
|
|
bool AddSubMesh(const NzString& identifier, NzSubMesh* subMesh);
|
|
|
|
void Animate(unsigned int frameA, unsigned int frameB, float interpolation);
|
|
|
|
bool CreateKeyframe();
|
|
bool CreateSkeletal(unsigned int jointCount);
|
|
bool CreateStatic();
|
|
void Destroy();
|
|
|
|
const NzAxisAlignedBox& GetAABB() const;
|
|
const NzAnimation* GetAnimation() const;
|
|
nzAnimationType GetAnimationType() const;
|
|
unsigned int GetFrameCount() const;
|
|
unsigned int GetJointCount() const;
|
|
NzString GetMaterial(unsigned int index) const;
|
|
unsigned int GetMaterialCount() const;
|
|
NzSkeleton* GetSkeleton();
|
|
const NzSkeleton* GetSkeleton() const;
|
|
NzSubMesh* GetSubMesh(const NzString& identifier);
|
|
NzSubMesh* GetSubMesh(unsigned int index);
|
|
const NzSubMesh* GetSubMesh(const NzString& identifier) const;
|
|
const NzSubMesh* GetSubMesh(unsigned int index) const;
|
|
unsigned int GetSubMeshCount() const;
|
|
int GetSubMeshIndex(const NzString& identifier) const;
|
|
unsigned int GetVertexCount() const;
|
|
|
|
bool HasAnimation() const;
|
|
bool HasMaterial(unsigned int index) const;
|
|
bool HasSubMesh(const NzString& identifier) const;
|
|
bool HasSubMesh(unsigned int index = 0) const;
|
|
|
|
void InvalidateAABB() const;
|
|
|
|
bool IsAnimable() const;
|
|
bool IsValid() const;
|
|
|
|
bool LoadFromFile(const NzString& filePath, const NzMeshParams& params = NzMeshParams());
|
|
bool LoadFromMemory(const void* data, std::size_t size, const NzMeshParams& params = NzMeshParams());
|
|
bool LoadFromStream(NzInputStream& stream, const NzMeshParams& params = NzMeshParams());
|
|
|
|
void RemoveMaterial(unsigned int index);
|
|
void RemoveSubMesh(const NzString& identifier);
|
|
void RemoveSubMesh(unsigned int index);
|
|
|
|
bool SetAnimation(const NzAnimation* animation);
|
|
void Skin(const NzSkeleton* skeleton);
|
|
|
|
static const NzVertexDeclaration* GetDeclaration();
|
|
|
|
private:
|
|
void OnResourceCreated(const NzResource* resource, int index) override;
|
|
void OnResourceReleased(const NzResource* resource, int index) override;
|
|
|
|
NzMeshImpl* m_impl = nullptr;
|
|
|
|
static NzMeshLoader::LoaderList s_loaders;
|
|
};
|
|
|
|
#endif // NAZARA_MESH_HPP
|