72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
|
#pragma once
|
||
|
#include <fstream>
|
||
|
#include <vector>
|
||
|
#include <QMatrix4x4>
|
||
|
|
||
|
//TODO: shouldn't be here
|
||
|
enum ModelTyp {
|
||
|
null,
|
||
|
dynamicMesh,
|
||
|
cloth,
|
||
|
bone,
|
||
|
staticMesh,
|
||
|
shadowMesh = 6
|
||
|
};
|
||
|
|
||
|
struct BoundingBox {
|
||
|
float quaternion[4];
|
||
|
float center[3];
|
||
|
float extents[3];
|
||
|
};
|
||
|
|
||
|
struct Segment {
|
||
|
std::uint32_t textureIndex = 0;
|
||
|
float* vertex = nullptr;
|
||
|
float* uv = nullptr;
|
||
|
std::vector<std::vector<std::uint32_t>> polyIndices; // indices into vertex array
|
||
|
};
|
||
|
|
||
|
struct Model {
|
||
|
std::string name = "";
|
||
|
std::string parent = "";
|
||
|
ModelTyp type = null; //TODO: should be removed
|
||
|
std::int32_t renderFlags = -1; //TODO: should be removed
|
||
|
QMatrix4x4 m4x4Translation;
|
||
|
std::vector<Segment*> segmList;
|
||
|
};
|
||
|
|
||
|
class FileInterface
|
||
|
{
|
||
|
public:
|
||
|
FileInterface(const char* path)
|
||
|
: m_vModels(new std::vector<Model*>)
|
||
|
{
|
||
|
//open file
|
||
|
m_fsMesh.open(path, std::ios::in | std::ios::binary);
|
||
|
|
||
|
if (!m_fsMesh.is_open())
|
||
|
throw std::invalid_argument(std::string("file not found: ") += path);
|
||
|
};
|
||
|
|
||
|
virtual ~FileInterface()
|
||
|
{
|
||
|
// close file
|
||
|
m_fsMesh.close();
|
||
|
|
||
|
//clean up
|
||
|
m_vTextureNames.clear();
|
||
|
};
|
||
|
|
||
|
protected:
|
||
|
std::vector<Model*>* m_vModels;
|
||
|
std::fstream m_fsMesh;
|
||
|
std::vector<std::string> m_vTextureNames;
|
||
|
BoundingBox m_sceneBbox;
|
||
|
|
||
|
virtual void import() = 0;
|
||
|
|
||
|
public:
|
||
|
virtual std::vector<Model*>* getModels() const { return m_vModels; };
|
||
|
virtual std::vector<std::string> getTextureNames() const { return m_vTextureNames; };
|
||
|
virtual BoundingBox getBoundingBox() const { return m_sceneBbox; };
|
||
|
};
|