Importing custom mesh without material.
This commit is contained in:
@@ -2,16 +2,12 @@
|
||||
|
||||
RawModel::RawModel(std::string fileName)
|
||||
{
|
||||
boost::endian::big_int16_buf_t* test;
|
||||
int16_t tal;
|
||||
test = &(boost::endian::big_int16_buf_t)tal;
|
||||
|
||||
char* fileData;
|
||||
std::ifstream in(fileName.c_str(), std::ios_base::binary | std::ios_base::ate);
|
||||
|
||||
if (!in.is_open())
|
||||
LOG_ERROR("Failed to load custom binary model \"%s\"", fileName.c_str());
|
||||
|
||||
if (!in.is_open()) {
|
||||
throw Resource::FailedLoadingException("Open file failed");
|
||||
}
|
||||
unsigned int fileByteSize = in.tellg();
|
||||
in.seekg(0, std::ios_base::beg);
|
||||
|
||||
@@ -20,42 +16,64 @@ RawModel::RawModel(std::string fileName)
|
||||
in.close();
|
||||
|
||||
unsigned int offset = 0;
|
||||
ReadMeshFileHeader(offset, fileData, fileByteSize);
|
||||
ReadMesh(offset, fileData, fileByteSize);
|
||||
|
||||
if (fileByteSize > 0) {
|
||||
ReadMeshFileHeader(offset, fileData, fileByteSize);
|
||||
ReadMesh(offset, fileData, fileByteSize);
|
||||
}
|
||||
delete fileData;
|
||||
MaterialGroup mat;
|
||||
mat.StartIndex = 0;
|
||||
mat.EndIndex = m_Indices.size() - 1;
|
||||
MaterialGroups.push_back(mat);
|
||||
}
|
||||
|
||||
bool RawModel::ReadMeshFileHeader(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
void RawModel::ReadMeshFileHeader(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
{
|
||||
#ifdef BOOST_LITTLE_ENDIAN
|
||||
m_Vertices.resize(*fileData);
|
||||
unsigned int test;
|
||||
test = *(unsigned int*)fileData;
|
||||
unsigned int* test2;
|
||||
test2 = (unsigned int*)fileData;
|
||||
|
||||
m_Vertices.resize(test);
|
||||
offset += sizeof(unsigned int);
|
||||
m_Indices.resize(*(fileData + offset));
|
||||
test = *(unsigned int*)(fileData + offset);
|
||||
m_Indices.resize(*(unsigned int*)(fileData + offset));
|
||||
offset += sizeof(unsigned int);
|
||||
#else
|
||||
#endif
|
||||
}
|
||||
|
||||
bool RawModel::ReadMesh(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
void RawModel::ReadMesh(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
{
|
||||
ReadVertices(offset, fileData, fileByteSize);
|
||||
ReadIndices(offset, fileData, fileByteSize);
|
||||
}
|
||||
|
||||
bool RawModel::ReadVertices(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
void RawModel::ReadVertices(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
{
|
||||
#ifdef BOOST_LITTLE_ENDIAN
|
||||
memcpy(&m_Vertices[0], fileData, m_Vertices.size() * sizeof(Vertex));
|
||||
if (offset + m_Vertices.size() * sizeof(Vertex) > fileByteSize) {
|
||||
throw Resource::FailedLoadingException("Reading vertices failed");
|
||||
}
|
||||
unsigned int i = sizeof(Vertex);
|
||||
unsigned int ii = sizeof(unsigned int);
|
||||
memcpy(&m_Vertices[0], fileData + offset, m_Vertices.size() * sizeof(Vertex));
|
||||
offset += m_Vertices.size() * sizeof(Vertex);
|
||||
#else
|
||||
#endif
|
||||
}
|
||||
|
||||
bool RawModel::ReadIndices(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
void RawModel::ReadIndices(unsigned int& offset, char* fileData, unsigned int& fileByteSize)
|
||||
{
|
||||
#ifdef BOOST_LITTLE_ENDIAN
|
||||
memcpy(&m_Indices[0], fileData, m_Indices.size() * sizeof(unsigned int));
|
||||
if (offset + m_Indices.size() * sizeof(unsigned int) > fileByteSize) {
|
||||
throw Resource::FailedLoadingException("Reading indices failed");
|
||||
}
|
||||
|
||||
memcpy(&m_Indices[0], fileData + offset, m_Indices.size() * sizeof(unsigned int));
|
||||
offset += m_Indices.size() * sizeof(unsigned int);
|
||||
|
||||
#else
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user