Merge remote-tracking branch 'origin/Importer' into Animations

# Conflicts:
#	include/Engine/Rendering/Skeleton.h
#	src/Engine/Rendering/RawModelCustom.cpp
#	src/Engine/Rendering/Skeleton.cpp
This commit is contained in:
viktorljung
2016-02-04 11:32:44 +01:00
11 changed files with 295 additions and 144 deletions
+3 -2
View File
@@ -16,8 +16,9 @@ public:
~Model();
const std::vector<RawModel::MaterialGroup>& MaterialGroups() const { return m_RawModel->MaterialGroups; }
const glm::mat4& Matrix() const { return m_RawModel->m_Matrix; }
const std::vector<RawModel::Vertex>& Vertices() const { return m_RawModel->m_Vertices; }
const RawModel::Vertex* Vertices() const { return m_RawModel->Vertices(); }
unsigned int NumberOfVertices() const { return m_RawModel->NumVertices(); }
bool isSkined() const { return m_RawModel->isSkined; }
GLuint VAO;
GLuint ElementBuffer;
RawModel* m_RawModel;
+32 -11
View File
@@ -33,17 +33,20 @@ protected:
public:
~RawModelCustom();
struct Vertex
{
glm::vec3 Position;
glm::vec3 Normal;
glm::vec3 Tangent;
glm::vec3 BiNormal;
glm::vec2 TextureCoords;
struct Vertex
{
glm::vec3 Position;
glm::vec3 Normal;
glm::vec3 Tangent;
glm::vec3 BiNormal;
glm::vec2 TextureCoords;
};
struct SkinedVertex : public Vertex {
glm::vec4 BoneIndices;
glm::vec4 BoneWeights;
};
struct MaterialGroup
{
float SpecularExponent;
@@ -64,15 +67,33 @@ public:
std::shared_ptr<::Texture> IncandescenceMap;
};
std::vector<MaterialGroup> MaterialGroups;
const Vertex* Vertices() const {
if (isSkined) {
return m_SkinedVertices.data();
} else {
return m_Vertices.data();
}
};
unsigned int NumVertices() const {
if (isSkined) {
return m_SkinedVertices.size();
} else {
return m_Vertices.size();
}
};
std::vector<MaterialGroup> MaterialGroups;
bool isSkined;
std::vector<Vertex> m_Vertices;
std::vector<unsigned int> m_Indices;
Skeleton* m_Skeleton = nullptr;
glm::mat4 m_Matrix;
private:
std::vector<Vertex> m_Vertices;
std::vector<SkinedVertex> m_SkinedVertices;
void ReadMeshFile(std::string filePath);
void ReadMeshFileHeader(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
@@ -89,7 +110,7 @@ private:
void ReadAnimationJoint(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
void ReadAnimationClips(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int numberOfClips);
void ReadAnimationClipSingle(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int clipIndex);
void ReadAnimationKeyFrame(unsigned int &offset, char* fileData, unsigned int& fileByteSize, Skeleton::Animation& animation);
void ReadAnimationKeyFrame(unsigned int &offset, char* fileData, unsigned int& fileByteSize, std::vector<Skeleton::Animation::Keyframe>& animation);
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
};
+9 -11
View File
@@ -54,24 +54,22 @@ public:
{
struct BoneProperty
{
int ID;
glm::vec3 Position;
glm::quat Rotation;
glm::vec3 Scale = glm::vec3(1);
};
int Index = 0;
double Time = 0.0;
std::map<int, Keyframe::BoneProperty> BoneProperties;
int Index = 0;
double Time = 0.0;
BoneProperty BoneProperties;
//Keyframe::BoneProperty boneProperty;
};
std::string Name;
double Duration;
// unsigned int KeyFrameAmount;
std::vector<Keyframe> Keyframes;
//std::map<int, std::list<Keyframe>> BoneKeyFrames;
std::string Name;
double Duration;
std::map<int, std::vector<Keyframe>> JointAnimations;
};
Skeleton() { }