63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
#ifndef WC3RE_OBJDECODER_HH__
|
|
#define WC3RE_OBJDECODER_HH__
|
|
|
|
#include <string>
|
|
#include <cstdint>
|
|
#include <vector>
|
|
#include <array>
|
|
|
|
#include "IffFile.hh"
|
|
|
|
class ObjDecoder {
|
|
public:
|
|
ObjDecoder(uint8_t const* base, size_t length);
|
|
|
|
using Vertex = std::array<int32_t, 3>;
|
|
using Vertices = std::vector<Vertex>;
|
|
using TexCoord = std::array<uint16_t, 2>;
|
|
|
|
struct Triangle {
|
|
uint16_t id;
|
|
uint16_t tex;
|
|
std::array<uint16_t, 3> vertIdx;
|
|
std::array<TexCoord, 3> texCoords;
|
|
};
|
|
using Triangles = std::vector<Triangle>;
|
|
|
|
struct Quad {
|
|
uint16_t id;
|
|
uint16_t tex;
|
|
std::array<uint16_t, 4> vertIdx;
|
|
std::array<TexCoord, 4> texCoords;
|
|
};
|
|
using Quads = std::vector<Quad>;
|
|
|
|
Vertices const& getVertices() const {
|
|
return vertices_;
|
|
}
|
|
|
|
Triangles const& getTriangles() const {
|
|
return triangles_;
|
|
}
|
|
|
|
Quads const& getQuads() const {
|
|
return quads_;
|
|
}
|
|
private:
|
|
IffFile iff_;
|
|
std::string name_;
|
|
|
|
void parseOBJT_(IffFile::Form const& form);
|
|
void parseAPPR_(IffFile::Form const& form);
|
|
void parsePOLY_(IffFile::Form const& form);
|
|
void parseTRIS_(IffFile::Form const& form);
|
|
void parseQUAD_(IffFile::Form const& form);
|
|
void parseTXMS_(IffFile::Form const& form);
|
|
|
|
Vertices vertices_;
|
|
Triangles triangles_;
|
|
Quads quads_;
|
|
};
|
|
|
|
#endif
|