1245 lines
36 KiB
C++
1245 lines
36 KiB
C++
#include "stdafx.h"
|
|
#include "ModelImporter.h"
|
|
|
|
#include <fstream>
|
|
#include <algorithm>
|
|
|
|
using namespace std;
|
|
using namespace wiGraphicsTypes;
|
|
using namespace wiSceneSystem;
|
|
using namespace wiECS;
|
|
|
|
|
|
//Mesh* LoadMeshFromBinaryFile(const std::string& newName, const std::string& fname, const std::map<std::string, Material*>& materialColl, const unordered_set<Armature*>& armatures)
|
|
//{
|
|
// Mesh* mesh = new Mesh(newName);
|
|
//
|
|
// BYTE* buffer;
|
|
// size_t fileSize;
|
|
// if (wiHelper::readByteData(fname, &buffer, fileSize)) {
|
|
//
|
|
// int offset = 0;
|
|
//
|
|
// int VERSION;
|
|
// memcpy(&VERSION, buffer, sizeof(int));
|
|
// offset += sizeof(int);
|
|
//
|
|
// if (VERSION >= 1001) {
|
|
// int doubleside;
|
|
// memcpy(&doubleside, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// if (doubleside) {
|
|
// mesh->doubleSided = true;
|
|
// }
|
|
// }
|
|
//
|
|
// int billboard;
|
|
// memcpy(&billboard, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// if (billboard) {
|
|
// char axis;
|
|
// memcpy(&axis, buffer + offset, 1);
|
|
// offset += 1;
|
|
//
|
|
// if (toupper(axis) == 'Y')
|
|
// mesh->billboardAxis = XMFLOAT3(0, 1, 0);
|
|
// else if (toupper(axis) == 'X')
|
|
// mesh->billboardAxis = XMFLOAT3(1, 0, 0);
|
|
// else if (toupper(axis) == 'Z')
|
|
// mesh->billboardAxis = XMFLOAT3(0, 0, 1);
|
|
// else
|
|
// mesh->billboardAxis = XMFLOAT3(0, 0, 0);
|
|
// mesh->isBillboarded = true;
|
|
// }
|
|
//
|
|
// int parented; //parentnamelength
|
|
// memcpy(&parented, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// if (parented) {
|
|
// char* pName = new char[parented + 1]();
|
|
// memcpy(pName, buffer + offset, parented);
|
|
// offset += parented;
|
|
// mesh->parent = pName;
|
|
// delete[] pName;
|
|
//
|
|
// stringstream identified_parent("");
|
|
// identified_parent << mesh->parent;
|
|
// for (Armature* a : armatures) {
|
|
// if (!a->name.compare(identified_parent.str())) {
|
|
// mesh->armatureName = identified_parent.str();
|
|
// mesh->armature = a;
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// int materialCount;
|
|
// memcpy(&materialCount, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// for (int i = 0; i<materialCount; ++i) {
|
|
// int matNameLen;
|
|
// memcpy(&matNameLen, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// char* matName = new char[matNameLen + 1]();
|
|
// memcpy(matName, buffer + offset, matNameLen);
|
|
// offset += matNameLen;
|
|
//
|
|
// stringstream identified_matname("");
|
|
// identified_matname << matName;
|
|
// auto& iter = materialColl.find(identified_matname.str());
|
|
// if (iter != materialColl.end()) {
|
|
// mesh->subsets.push_back(MeshSubset());
|
|
// mesh->subsets.back().material = iter->second;
|
|
// //materials.push_back(iter->second);
|
|
// }
|
|
//
|
|
// mesh->materialNames.push_back(identified_matname.str());
|
|
// delete[] matName;
|
|
// }
|
|
// int rendermesh, vertexCount;
|
|
// memcpy(&rendermesh, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// memcpy(&vertexCount, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
//
|
|
// mesh->vertices_FULL.resize(vertexCount);
|
|
//
|
|
// for (int i = 0; i<vertexCount; ++i) {
|
|
// float v[8];
|
|
// memcpy(v, buffer + offset, sizeof(float) * 8);
|
|
// offset += sizeof(float) * 8;
|
|
// mesh->vertices_FULL[i].pos.x = v[0];
|
|
// mesh->vertices_FULL[i].pos.y = v[1];
|
|
// mesh->vertices_FULL[i].pos.z = v[2];
|
|
// mesh->vertices_FULL[i].pos.w = 0;
|
|
// if (!mesh->isBillboarded) {
|
|
// mesh->vertices_FULL[i].nor.x = v[3];
|
|
// mesh->vertices_FULL[i].nor.y = v[4];
|
|
// mesh->vertices_FULL[i].nor.z = v[5];
|
|
// }
|
|
// else {
|
|
// mesh->vertices_FULL[i].nor.x = mesh->billboardAxis.x;
|
|
// mesh->vertices_FULL[i].nor.y = mesh->billboardAxis.y;
|
|
// mesh->vertices_FULL[i].nor.z = mesh->billboardAxis.z;
|
|
// }
|
|
// mesh->vertices_FULL[i].tex.x = v[6];
|
|
// mesh->vertices_FULL[i].tex.y = v[7];
|
|
// int matIndex;
|
|
// memcpy(&matIndex, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// mesh->vertices_FULL[i].tex.z = (float)matIndex;
|
|
//
|
|
// int weightCount = 0;
|
|
// memcpy(&weightCount, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// for (int j = 0; j<weightCount; ++j) {
|
|
//
|
|
// int weightNameLen = 0;
|
|
// memcpy(&weightNameLen, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// char* weightName = new char[weightNameLen + 1](); //bone name
|
|
// memcpy(weightName, buffer + offset, weightNameLen);
|
|
// offset += weightNameLen;
|
|
// float weightValue = 0;
|
|
// memcpy(&weightValue, buffer + offset, sizeof(float));
|
|
// offset += sizeof(float);
|
|
//
|
|
//#pragma region BONE INDEX SETUP
|
|
// string nameB = weightName;
|
|
// if (mesh->armature) {
|
|
// bool gotBone = false;
|
|
// int BONEINDEX = 0;
|
|
// int b = 0;
|
|
// while (!gotBone && b<(int)mesh->armature->boneCollection.size()) {
|
|
// if (!mesh->armature->boneCollection[b]->name.compare(nameB)) {
|
|
// gotBone = true;
|
|
// BONEINDEX = b; //GOT INDEX OF BONE OF THE WEIGHT IN THE PARENT ARMATURE
|
|
// }
|
|
// b++;
|
|
// }
|
|
// if (gotBone) { //ONLY PROCEED IF CORRESPONDING BONE WAS FOUND
|
|
// if (!mesh->vertices_FULL[i].wei.x) {
|
|
// mesh->vertices_FULL[i].wei.x = weightValue;
|
|
// mesh->vertices_FULL[i].ind.x = (float)BONEINDEX;
|
|
// }
|
|
// else if (!mesh->vertices_FULL[i].wei.y) {
|
|
// mesh->vertices_FULL[i].wei.y = weightValue;
|
|
// mesh->vertices_FULL[i].ind.y = (float)BONEINDEX;
|
|
// }
|
|
// else if (!mesh->vertices_FULL[i].wei.z) {
|
|
// mesh->vertices_FULL[i].wei.z = weightValue;
|
|
// mesh->vertices_FULL[i].ind.z = (float)BONEINDEX;
|
|
// }
|
|
// else if (!mesh->vertices_FULL[i].wei.w) {
|
|
// mesh->vertices_FULL[i].wei.w = weightValue;
|
|
// mesh->vertices_FULL[i].ind.w = (float)BONEINDEX;
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// //(+RIBBONTRAIL SETUP)(+VERTEXGROUP SETUP)
|
|
//
|
|
// if (nameB.find("trailbase") != string::npos)
|
|
// mesh->trailInfo.base = i;
|
|
// else if (nameB.find("trailtip") != string::npos)
|
|
// mesh->trailInfo.tip = i;
|
|
//
|
|
// bool windAffection = false;
|
|
// if (nameB.find("wind") != string::npos)
|
|
// windAffection = true;
|
|
// bool gotvg = false;
|
|
// for (unsigned int v = 0; v<mesh->vertexGroups.size(); ++v)
|
|
// if (!nameB.compare(mesh->vertexGroups[v].name)) {
|
|
// gotvg = true;
|
|
// mesh->vertexGroups[v].addVertex(VertexRef(i, weightValue));
|
|
// if (windAffection)
|
|
// mesh->vertices_FULL[i].pos.w = weightValue;
|
|
// }
|
|
// if (!gotvg) {
|
|
// mesh->vertexGroups.push_back(VertexGroup(nameB));
|
|
// mesh->vertexGroups.back().addVertex(VertexRef(i, weightValue));
|
|
// if (windAffection)
|
|
// mesh->vertices_FULL[i].pos.w = weightValue;
|
|
// }
|
|
//#pragma endregion
|
|
//
|
|
// delete[] weightName;
|
|
//
|
|
//
|
|
// }
|
|
//
|
|
// }
|
|
//
|
|
// if (rendermesh) {
|
|
// int indexCount;
|
|
// memcpy(&indexCount, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// unsigned int* indexArray = new unsigned int[indexCount];
|
|
// memcpy(indexArray, buffer + offset, sizeof(unsigned int)*indexCount);
|
|
// offset += sizeof(unsigned int)*indexCount;
|
|
// mesh->indices.reserve(indexCount);
|
|
// for (int i = 0; i<indexCount; ++i) {
|
|
// mesh->indices.push_back(indexArray[i]);
|
|
// }
|
|
// delete[] indexArray;
|
|
//
|
|
// int softBody;
|
|
// memcpy(&softBody, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// if (softBody) {
|
|
// int softCount[2]; //ind,vert
|
|
// memcpy(softCount, buffer + offset, sizeof(int) * 2);
|
|
// offset += sizeof(int) * 2;
|
|
// unsigned int* softind = new unsigned int[softCount[0]];
|
|
// memcpy(softind, buffer + offset, sizeof(unsigned int)*softCount[0]);
|
|
// offset += sizeof(unsigned int)*softCount[0];
|
|
// float* softvert = new float[softCount[1]];
|
|
// memcpy(softvert, buffer + offset, sizeof(float)*softCount[1]);
|
|
// offset += sizeof(float)*softCount[1];
|
|
//
|
|
// mesh->physicsindices.reserve(softCount[0]);
|
|
// mesh->physicsverts.reserve(softCount[1] / 3);
|
|
// for (int i = 0; i<softCount[0]; ++i) {
|
|
// mesh->physicsindices.push_back(softind[i]);
|
|
// }
|
|
// for (int i = 0; i<softCount[1]; i += 3) {
|
|
// mesh->physicsverts.push_back(XMFLOAT3(softvert[i], softvert[i + 1], softvert[i + 2]));
|
|
// }
|
|
//
|
|
// delete[] softind;
|
|
// delete[] softvert;
|
|
// }
|
|
// else {
|
|
//
|
|
// }
|
|
// }
|
|
// else {
|
|
//
|
|
// }
|
|
//
|
|
// memcpy(mesh->aabb.corners, buffer + offset, sizeof(mesh->aabb.corners));
|
|
// offset += sizeof(mesh->aabb.corners);
|
|
//
|
|
// int isSoftbody;
|
|
// memcpy(&isSoftbody, buffer + offset, sizeof(int));
|
|
// offset += sizeof(int);
|
|
// if (isSoftbody) {
|
|
// float prop[2]; //mass,friction
|
|
// memcpy(prop, buffer + offset, sizeof(float) * 2);
|
|
// offset += sizeof(float) * 2;
|
|
// mesh->softBody = true;
|
|
// mesh->mass = prop[0];
|
|
// mesh->friction = prop[1];
|
|
// int vglenghts[3]; //goal,mass,soft
|
|
// memcpy(vglenghts, buffer + offset, sizeof(int) * 3);
|
|
// offset += sizeof(int) * 3;
|
|
//
|
|
// char* vgg = new char[vglenghts[0] + 1]();
|
|
// char* vgm = new char[vglenghts[1] + 1]();
|
|
// char* vgs = new char[vglenghts[2] + 1]();
|
|
//
|
|
// memcpy(vgg, buffer + offset, vglenghts[0]);
|
|
// offset += vglenghts[0];
|
|
// memcpy(vgm, buffer + offset, vglenghts[1]);
|
|
// offset += vglenghts[1];
|
|
// memcpy(vgs, buffer + offset, vglenghts[2]);
|
|
// offset += vglenghts[2];
|
|
//
|
|
// for (unsigned int v = 0; v<mesh->vertexGroups.size(); ++v) {
|
|
// if (!strcmp(vgm, mesh->vertexGroups[v].name.c_str()))
|
|
// mesh->massVG = v;
|
|
// if (!strcmp(vgg, mesh->vertexGroups[v].name.c_str()))
|
|
// mesh->goalVG = v;
|
|
// if (!strcmp(vgs, mesh->vertexGroups[v].name.c_str()))
|
|
// mesh->softVG = v;
|
|
// }
|
|
//
|
|
// delete[]vgg;
|
|
// delete[]vgm;
|
|
// delete[]vgs;
|
|
// }
|
|
//
|
|
// delete[] buffer;
|
|
//
|
|
// mesh->renderable = rendermesh == 0 ? false : true;
|
|
// }
|
|
//
|
|
// return mesh;
|
|
//}
|
|
//
|
|
//void LoadWiArmatures(const std::string& directory, const std::string& name, unordered_set<Armature*>& armatures)
|
|
//{
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file)
|
|
// {
|
|
// Armature* armature = nullptr;
|
|
// while (!file.eof())
|
|
// {
|
|
// float trans[] = { 0,0,0,0 };
|
|
// string line = "";
|
|
// file >> line;
|
|
// if (line[0] == '/' && line.substr(2, 8) == "ARMATURE")
|
|
// {
|
|
// armature = new Armature(line.substr(11, strlen(line.c_str()) - 11));
|
|
// armatures.insert(armature);
|
|
// }
|
|
// else
|
|
// {
|
|
// switch (line[0])
|
|
// {
|
|
// case 'r':
|
|
// file >> trans[0] >> trans[1] >> trans[2] >> trans[3];
|
|
// armature->rotation_rest = XMFLOAT4(trans[0], trans[1], trans[2], trans[3]);
|
|
// break;
|
|
// case 's':
|
|
// file >> trans[0] >> trans[1] >> trans[2];
|
|
// armature->scale_rest = XMFLOAT3(trans[0], trans[1], trans[2]);
|
|
// break;
|
|
// case 't':
|
|
// file >> trans[0] >> trans[1] >> trans[2];
|
|
// armature->translation_rest = XMFLOAT3(trans[0], trans[1], trans[2]);
|
|
// //{
|
|
// // XMMATRIX world = XMMatrixScalingFromVector(XMLoadFloat3(&armature->scale))*XMMatrixRotationQuaternion(XMLoadFloat4(&armature->rotation))*XMMatrixTranslationFromVector(XMLoadFloat3(&armature->translation));
|
|
// // XMStoreFloat4x4(&armature->world_rest, world);
|
|
// //}
|
|
// break;
|
|
// case 'b':
|
|
// {
|
|
// string boneName;
|
|
// file >> boneName;
|
|
// armature->boneCollection.push_back(new Bone(boneName));
|
|
// }
|
|
// break;
|
|
// case 'p':
|
|
// file >> armature->boneCollection.back()->parentName;
|
|
// break;
|
|
// case 'l':
|
|
// {
|
|
// float x = 0, y = 0, z = 0, w = 0;
|
|
// file >> x >> y >> z >> w;
|
|
// XMVECTOR quaternion = XMVectorSet(x, y, z, w);
|
|
// file >> x >> y >> z;
|
|
// XMVECTOR translation = XMVectorSet(x, y, z, 0);
|
|
//
|
|
// XMMATRIX frame;
|
|
// frame = XMMatrixRotationQuaternion(quaternion) * XMMatrixTranslationFromVector(translation);
|
|
//
|
|
// XMStoreFloat3(&armature->boneCollection.back()->translation_rest, translation);
|
|
// XMStoreFloat4(&armature->boneCollection.back()->rotation_rest, quaternion);
|
|
// XMStoreFloat4x4(&armature->boneCollection.back()->world_rest, frame);
|
|
// //XMStoreFloat4x4(&armature->boneCollection.back()->restInv,XMMatrixInverse(0,frame));
|
|
//
|
|
// }
|
|
// break;
|
|
// case 'c':
|
|
// armature->boneCollection.back()->connected = true;
|
|
// break;
|
|
// case 'h':
|
|
// file >> armature->boneCollection.back()->length;
|
|
// break;
|
|
// default: break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//
|
|
//
|
|
//
|
|
// //CREATE FAMILY
|
|
// for (Armature* armature : armatures)
|
|
// {
|
|
// armature->UpdateTransform();
|
|
// armature->CreateFamily();
|
|
// }
|
|
//
|
|
//}
|
|
//void LoadWiMaterialLibrary(const std::string& directory, const std::string& name, const std::string& texturesDir, std::map<std::string, Material*>& materials)
|
|
//{
|
|
// int materialI = (int)(materials.size() - 1);
|
|
//
|
|
// Material* currentMat = NULL;
|
|
//
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file) {
|
|
// while (!file.eof()) {
|
|
// string line = "";
|
|
// file >> line;
|
|
// if (line[0] == '/' && !strcmp(line.substr(2, 8).c_str(), "MATERIAL")) {
|
|
// if (currentMat)
|
|
// {
|
|
// currentMat->ConvertToPhysicallyBasedMaterial();
|
|
// materials.insert(pair<string, Material*>(currentMat->name, currentMat));
|
|
// }
|
|
//
|
|
// currentMat = new Material(line.substr(11, strlen(line.c_str()) - 11));
|
|
// materialI++;
|
|
// }
|
|
// else {
|
|
// switch (line[0]) {
|
|
// case 'd':
|
|
// file >> currentMat->diffuseColor.x;
|
|
// file >> currentMat->diffuseColor.y;
|
|
// file >> currentMat->diffuseColor.z;
|
|
// break;
|
|
// case 'X':
|
|
// currentMat->cast_shadow = false;
|
|
// break;
|
|
// case 'r':
|
|
// {
|
|
// string resourceName = "";
|
|
// file >> resourceName;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << resourceName.c_str();
|
|
// currentMat->surfaceMapName = ss.str();
|
|
// currentMat->surfaceMap = (Texture2D*)wiResourceManager::GetGlobal()->add(ss.str());
|
|
// }
|
|
// break;
|
|
// case 'n':
|
|
// {
|
|
// string resourceName = "";
|
|
// file >> resourceName;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << resourceName.c_str();
|
|
// currentMat->normalMapName = ss.str();
|
|
// currentMat->normalMap = (Texture2D*)wiResourceManager::GetGlobal()->add(ss.str());
|
|
// }
|
|
// break;
|
|
// case 't':
|
|
// {
|
|
// string resourceName = "";
|
|
// file >> resourceName;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << resourceName.c_str();
|
|
// currentMat->textureName = ss.str();
|
|
// currentMat->texture = (Texture2D*)wiResourceManager::GetGlobal()->add(ss.str());
|
|
// }
|
|
// file >> currentMat->premultipliedTexture;
|
|
// break;
|
|
// case 'D':
|
|
// {
|
|
// string resourceName = "";
|
|
// file >> resourceName;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << resourceName.c_str();
|
|
// currentMat->displacementMapName = ss.str();
|
|
// currentMat->displacementMap = (Texture2D*)wiResourceManager::GetGlobal()->add(ss.str());
|
|
// }
|
|
// break;
|
|
// case 'S':
|
|
// {
|
|
// string resourceName = "";
|
|
// file >> resourceName;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << resourceName.c_str();
|
|
// currentMat->specularMapName = ss.str();
|
|
// currentMat->specularMap = (Texture2D*)wiResourceManager::GetGlobal()->add(ss.str());
|
|
// }
|
|
// break;
|
|
// case 'a':
|
|
// file >> currentMat->alpha;
|
|
// break;
|
|
// case 'h':
|
|
// currentMat->shadeless = true;
|
|
// break;
|
|
// case 'R':
|
|
// file >> currentMat->refractionIndex;
|
|
// break;
|
|
// case 'e':
|
|
// file >> currentMat->enviroReflection;
|
|
// break;
|
|
// case 's':
|
|
// file >> currentMat->specular.x;
|
|
// file >> currentMat->specular.y;
|
|
// file >> currentMat->specular.z;
|
|
// file >> currentMat->specular.w;
|
|
// break;
|
|
// case 'p':
|
|
// file >> currentMat->specular_power;
|
|
// break;
|
|
// case 'k':
|
|
// currentMat->isSky = true;
|
|
// break;
|
|
// case 'm':
|
|
// file >> currentMat->movingTex.x;
|
|
// file >> currentMat->movingTex.y;
|
|
// file >> currentMat->movingTex.z;
|
|
// currentMat->framesToWaitForTexCoordOffset = currentMat->movingTex.z;
|
|
// break;
|
|
// case 'w':
|
|
// currentMat->water = true;
|
|
// break;
|
|
// case 'u':
|
|
// currentMat->subsurfaceScattering = true;
|
|
// break;
|
|
// case 'b':
|
|
// {
|
|
// string blend;
|
|
// file >> blend;
|
|
// if (!blend.compare("ADD"))
|
|
// currentMat->blendFlag = BLENDMODE_ADDITIVE;
|
|
// }
|
|
// break;
|
|
// case 'i':
|
|
// {
|
|
// file >> currentMat->emissive;
|
|
// }
|
|
// break;
|
|
// default:break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//
|
|
// if (currentMat)
|
|
// {
|
|
// currentMat->ConvertToPhysicallyBasedMaterial();
|
|
// materials.insert(pair<string, Material*>(currentMat->name, currentMat));
|
|
// }
|
|
//
|
|
//}
|
|
//void LoadWiObjects(const std::string& directory, const std::string& name, unordered_set<Object*>& objects
|
|
// , unordered_set<Armature*>& armatures
|
|
// , std::map<std::string, Mesh*>& meshes, const std::map<std::string, Material*>& materials)
|
|
//{
|
|
//
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file)
|
|
// {
|
|
// Object* object = nullptr;
|
|
// while (!file.eof())
|
|
// {
|
|
// float trans[] = { 0,0,0,0 };
|
|
// string line = "";
|
|
// file >> line;
|
|
// if (line[0] == '/' && !strcmp(line.substr(2, 6).c_str(), "OBJECT"))
|
|
// {
|
|
// object = new Object(line.substr(9, strlen(line.c_str()) - 9));
|
|
// objects.insert(object);
|
|
// }
|
|
// else
|
|
// {
|
|
// switch (line[0])
|
|
// {
|
|
// case 'm':
|
|
// {
|
|
// string meshName = "";
|
|
// file >> meshName;
|
|
// object->meshName = meshName;
|
|
// auto& iter = meshes.find(meshName);
|
|
//
|
|
// if (line[1] == 'b')
|
|
// {
|
|
// //binary load mesh in place if not present
|
|
// if (iter == meshes.end())
|
|
// {
|
|
// stringstream meshFileName("");
|
|
// meshFileName << directory << meshName << ".wimesh";
|
|
// Mesh* mesh = LoadMeshFromBinaryFile(meshName, meshFileName.str(), materials, armatures);
|
|
// object->mesh = mesh;
|
|
// meshes.insert(pair<string, Mesh*>(meshName, mesh));
|
|
// }
|
|
// else
|
|
// {
|
|
// object->mesh = iter->second;
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// if (iter != meshes.end())
|
|
// {
|
|
// object->mesh = iter->second;
|
|
// }
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 'p':
|
|
// {
|
|
// file >> object->parentName;
|
|
// }
|
|
// break;
|
|
// case 'b':
|
|
// {
|
|
// file >> object->boneParent;
|
|
// }
|
|
// break;
|
|
// case 'I':
|
|
// {
|
|
// XMFLOAT3 s, t;
|
|
// XMFLOAT4 r;
|
|
// file >> t.x >> t.y >> t.z >> r.x >> r.y >> r.z >> r.w >> s.x >> s.y >> s.z;
|
|
// XMStoreFloat4x4(&object->parent_inv_rest
|
|
// , XMMatrixScalingFromVector(XMLoadFloat3(&s)) *
|
|
// XMMatrixRotationQuaternion(XMLoadFloat4(&r)) *
|
|
// XMMatrixTranslationFromVector(XMLoadFloat3(&t))
|
|
// );
|
|
// }
|
|
// break;
|
|
// case 'r':
|
|
// file >> trans[0] >> trans[1] >> trans[2] >> trans[3];
|
|
// object->Rotate(XMFLOAT4(trans[0], trans[1], trans[2], trans[3]));
|
|
// break;
|
|
// case 's':
|
|
// file >> trans[0] >> trans[1] >> trans[2];
|
|
// object->Scale(XMFLOAT3(trans[0], trans[1], trans[2]));
|
|
// break;
|
|
// case 't':
|
|
// file >> trans[0] >> trans[1] >> trans[2];
|
|
// object->Translate(XMFLOAT3(trans[0], trans[1], trans[2]));
|
|
// break;
|
|
// case 'E':
|
|
// {
|
|
// string systemName, materialName;
|
|
// bool visibleEmitter;
|
|
// float size, randfac, norfac;
|
|
// float count, life, randlife;
|
|
// float scaleX, scaleY, rot;
|
|
// file >> systemName >> visibleEmitter >> materialName >> size >> randfac >> norfac >> count >> life >> randlife;
|
|
// file >> scaleX >> scaleY >> rot;
|
|
//
|
|
// if (object->mesh)
|
|
// {
|
|
// object->eParticleSystems.push_back(
|
|
// new wiEmittedParticle(systemName, materialName, object, size, randfac, norfac, count, life, randlife, scaleX, scaleY, rot)
|
|
// );
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 'H':
|
|
// {
|
|
// string name, mat, densityG, lenG;
|
|
// float len;
|
|
// int count;
|
|
// file >> name >> mat >> len >> count >> densityG >> lenG;
|
|
//
|
|
// object->hParticleSystems.push_back(new wiHairParticle(name, len, count, mat, object, densityG, lenG));
|
|
// }
|
|
// break;
|
|
// case 'P':
|
|
// object->rigidBody = true;
|
|
// file >> object->collisionShape >> object->mass >>
|
|
// object->friction >> object->restitution >> object->damping >> object->physicsType >>
|
|
// object->kinematic;
|
|
// break;
|
|
// case 'T':
|
|
// file >> object->transparency;
|
|
// break;
|
|
// default: break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//
|
|
//}
|
|
//void LoadWiMeshes(const std::string& directory, const std::string& name, std::map<std::string, Mesh*>& meshes,
|
|
// const unordered_set<Armature*>& armatures, const std::map<std::string, Material*>& materials)
|
|
//{
|
|
// int meshI = (int)(meshes.size() - 1);
|
|
// Mesh* currentMesh = NULL;
|
|
//
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file) {
|
|
// while (!file.eof())
|
|
// {
|
|
// float trans[] = { 0,0,0,0 };
|
|
// string line = "";
|
|
// file >> line;
|
|
// if (line[0] == '/' && !line.substr(2, 4).compare("MESH")) {
|
|
// currentMesh = new Mesh(line.substr(7, strlen(line.c_str()) - 7));
|
|
// meshes.insert(pair<string, Mesh*>(currentMesh->name, currentMesh));
|
|
// meshI++;
|
|
// }
|
|
// else
|
|
// {
|
|
// switch (line[0])
|
|
// {
|
|
// case 'p':
|
|
// {
|
|
// file >> currentMesh->parent;
|
|
// for (auto& a : armatures)
|
|
// {
|
|
// if (!a->name.compare(currentMesh->parent))
|
|
// {
|
|
// currentMesh->armature = a;
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 'v':
|
|
// currentMesh->vertices_FULL.push_back(Mesh::Vertex_FULL());
|
|
// file >> currentMesh->vertices_FULL.back().pos.x;
|
|
// file >> currentMesh->vertices_FULL.back().pos.y;
|
|
// file >> currentMesh->vertices_FULL.back().pos.z;
|
|
// break;
|
|
// case 'n':
|
|
// if (currentMesh->isBillboarded) {
|
|
// currentMesh->vertices_FULL.back().nor.x = currentMesh->billboardAxis.x;
|
|
// currentMesh->vertices_FULL.back().nor.y = currentMesh->billboardAxis.y;
|
|
// currentMesh->vertices_FULL.back().nor.z = currentMesh->billboardAxis.z;
|
|
// }
|
|
// else {
|
|
// file >> currentMesh->vertices_FULL.back().nor.x;
|
|
// file >> currentMesh->vertices_FULL.back().nor.y;
|
|
// file >> currentMesh->vertices_FULL.back().nor.z;
|
|
// }
|
|
// break;
|
|
// case 'u':
|
|
// file >> currentMesh->vertices_FULL.back().tex.x;
|
|
// file >> currentMesh->vertices_FULL.back().tex.y;
|
|
// break;
|
|
// case 'w':
|
|
// {
|
|
// string nameB;
|
|
// float weight = 0;
|
|
// int BONEINDEX = 0;
|
|
// file >> nameB >> weight;
|
|
// bool gotBone = false;
|
|
// if (currentMesh->armature != nullptr) {
|
|
// int j = 0;
|
|
// for (auto& b : currentMesh->armature->boneCollection)
|
|
// {
|
|
// if (!b->name.compare(nameB))
|
|
// {
|
|
// BONEINDEX = j;
|
|
// break;
|
|
// }
|
|
// j++;
|
|
// }
|
|
// }
|
|
// if (gotBone)
|
|
// {
|
|
// //ONLY PROCEED IF CORRESPONDING BONE WAS FOUND
|
|
// if (!currentMesh->vertices_FULL.back().wei.x) {
|
|
// currentMesh->vertices_FULL.back().wei.x = weight;
|
|
// currentMesh->vertices_FULL.back().ind.x = (float)BONEINDEX;
|
|
// }
|
|
// else if (!currentMesh->vertices_FULL.back().wei.y) {
|
|
// currentMesh->vertices_FULL.back().wei.y = weight;
|
|
// currentMesh->vertices_FULL.back().ind.y = (float)BONEINDEX;
|
|
// }
|
|
// else if (!currentMesh->vertices_FULL.back().wei.z) {
|
|
// currentMesh->vertices_FULL.back().wei.z = weight;
|
|
// currentMesh->vertices_FULL.back().ind.z = (float)BONEINDEX;
|
|
// }
|
|
// else if (!currentMesh->vertices_FULL.back().wei.w) {
|
|
// currentMesh->vertices_FULL.back().wei.w = weight;
|
|
// currentMesh->vertices_FULL.back().ind.w = (float)BONEINDEX;
|
|
// }
|
|
// }
|
|
//
|
|
// //(+RIBBONTRAIL SETUP)(+VERTEXGROUP SETUP)
|
|
//
|
|
// if (nameB.find("trailbase") != string::npos)
|
|
// currentMesh->trailInfo.base = (int)(currentMesh->vertices_FULL.size() - 1);
|
|
// else if (nameB.find("trailtip") != string::npos)
|
|
// currentMesh->trailInfo.tip = (int)(currentMesh->vertices_FULL.size() - 1);
|
|
//
|
|
// bool windAffection = false;
|
|
// if (nameB.find("wind") != string::npos)
|
|
// windAffection = true;
|
|
// bool gotvg = false;
|
|
// for (unsigned int v = 0; v<currentMesh->vertexGroups.size(); ++v)
|
|
// if (!nameB.compare(currentMesh->vertexGroups[v].name)) {
|
|
// gotvg = true;
|
|
// currentMesh->vertexGroups[v].addVertex(VertexRef((int)(currentMesh->vertices_FULL.size() - 1), weight));
|
|
// if (windAffection)
|
|
// currentMesh->vertices_FULL.back().pos.w = weight;
|
|
// }
|
|
// if (!gotvg) {
|
|
// currentMesh->vertexGroups.push_back(VertexGroup(nameB));
|
|
// currentMesh->vertexGroups.back().addVertex(VertexRef((int)(currentMesh->vertices_FULL.size() - 1), weight));
|
|
// if (windAffection)
|
|
// currentMesh->vertices_FULL.back().pos.w = weight;
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 'i':
|
|
// {
|
|
// int count;
|
|
// file >> count;
|
|
// for (int i = 0; i<count; i++) {
|
|
// int index;
|
|
// file >> index;
|
|
// currentMesh->indices.push_back(index);
|
|
// }
|
|
// break;
|
|
// }
|
|
// case 'V':
|
|
// {
|
|
// XMFLOAT3 pos;
|
|
// file >> pos.x >> pos.y >> pos.z;
|
|
// currentMesh->physicsverts.push_back(pos);
|
|
// }
|
|
// break;
|
|
// case 'I':
|
|
// {
|
|
// int count;
|
|
// file >> count;
|
|
// for (int i = 0; i<count; i++) {
|
|
// int index;
|
|
// file >> index;
|
|
// currentMesh->physicsindices.push_back(index);
|
|
// }
|
|
// break;
|
|
// }
|
|
// case 'm':
|
|
// {
|
|
// string mName = "";
|
|
// file >> mName;
|
|
// currentMesh->materialNames.push_back(mName);
|
|
// auto& iter = materials.find(mName);
|
|
// if (iter != materials.end()) {
|
|
// currentMesh->subsets.push_back(MeshSubset());
|
|
// currentMesh->renderable = true;
|
|
// currentMesh->subsets.back().material = (iter->second);
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 'a':
|
|
// file >> currentMesh->vertices_FULL.back().tex.z;
|
|
// break;
|
|
// case 'B':
|
|
// for (int corner = 0; corner<8; ++corner) {
|
|
// file >> currentMesh->aabb.corners[corner].x;
|
|
// file >> currentMesh->aabb.corners[corner].y;
|
|
// file >> currentMesh->aabb.corners[corner].z;
|
|
// }
|
|
// break;
|
|
// case 'b':
|
|
// {
|
|
// currentMesh->isBillboarded = true;
|
|
// string read = "";
|
|
// file >> read;
|
|
// transform(read.begin(), read.end(), read.begin(), toupper);
|
|
// if (read.find(toupper('y')) != string::npos) currentMesh->billboardAxis = XMFLOAT3(0, 1, 0);
|
|
// else if (read.find(toupper('x')) != string::npos) currentMesh->billboardAxis = XMFLOAT3(1, 0, 0);
|
|
// else if (read.find(toupper('z')) != string::npos) currentMesh->billboardAxis = XMFLOAT3(0, 0, 1);
|
|
// else currentMesh->billboardAxis = XMFLOAT3(0, 0, 0);
|
|
// }
|
|
// break;
|
|
// case 'S':
|
|
// {
|
|
// currentMesh->softBody = true;
|
|
// string mvgi = "", gvgi = "", svgi = "";
|
|
// file >> currentMesh->mass >> currentMesh->friction >> gvgi >> mvgi >> svgi;
|
|
// for (unsigned int v = 0; v<currentMesh->vertexGroups.size(); ++v) {
|
|
// if (!strcmp(mvgi.c_str(), currentMesh->vertexGroups[v].name.c_str()))
|
|
// currentMesh->massVG = v;
|
|
// if (!strcmp(gvgi.c_str(), currentMesh->vertexGroups[v].name.c_str()))
|
|
// currentMesh->goalVG = v;
|
|
// if (!strcmp(svgi.c_str(), currentMesh->vertexGroups[v].name.c_str()))
|
|
// currentMesh->softVG = v;
|
|
// }
|
|
// }
|
|
// break;
|
|
// default: break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//
|
|
// if (currentMesh)
|
|
// meshes.insert(pair<string, Mesh*>(currentMesh->name, currentMesh));
|
|
//
|
|
//}
|
|
//void LoadWiActions(const std::string& directory, const std::string& name, unordered_set<Armature*>& armatures)
|
|
//{
|
|
// Armature* armatureI = nullptr;
|
|
// Bone* boneI = nullptr;
|
|
// int firstFrame = INT_MAX;
|
|
//
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file) {
|
|
// while (!file.eof()) {
|
|
// string line = "";
|
|
// file >> line;
|
|
// if (line[0] == '/' && !strcmp(line.substr(2, 8).c_str(), "ARMATURE")) {
|
|
// string armaturename = line.substr(11, strlen(line.c_str()) - 11);
|
|
// for (auto& a : armatures)
|
|
// {
|
|
// if (!a->name.compare(armaturename)) {
|
|
// armatureI = a;
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
// else {
|
|
// switch (line[0]) {
|
|
// case 'C':
|
|
// armatureI->actions.push_back(Action());
|
|
// file >> armatureI->actions.back().name;
|
|
// break;
|
|
// case 'A':
|
|
// file >> armatureI->actions.back().frameCount;
|
|
// break;
|
|
// case 'b':
|
|
// {
|
|
// string boneName;
|
|
// file >> boneName;
|
|
// boneI = armatureI->GetBone(boneName);
|
|
// if (boneI != nullptr)
|
|
// {
|
|
// boneI->actionFrames.resize(armatureI->actions.size());
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 'r':
|
|
// {
|
|
// int f = 0;
|
|
// float x = 0, y = 0, z = 0, w = 0;
|
|
// file >> f >> x >> y >> z >> w;
|
|
// if (boneI != nullptr)
|
|
// {
|
|
// boneI->actionFrames.back().keyframesRot.push_back(KeyFrame(f, x, y, z, w));
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 't':
|
|
// {
|
|
// int f = 0;
|
|
// float x = 0, y = 0, z = 0;
|
|
// file >> f >> x >> y >> z;
|
|
// if (boneI != nullptr)
|
|
// {
|
|
// boneI->actionFrames.back().keyframesPos.push_back(KeyFrame(f, x, y, z, 0));
|
|
// }
|
|
// }
|
|
// break;
|
|
// case 's':
|
|
// {
|
|
// int f = 0;
|
|
// float x = 0, y = 0, z = 0;
|
|
// file >> f >> x >> y >> z;
|
|
// if (boneI != nullptr)
|
|
// {
|
|
// boneI->actionFrames.back().keyframesSca.push_back(KeyFrame(f, x, y, z, 0));
|
|
// }
|
|
// }
|
|
// break;
|
|
// default: break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//}
|
|
//void LoadWiLights(const std::string& directory, const std::string& name, unordered_set<Light*>& lights)
|
|
//{
|
|
//
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file)
|
|
// {
|
|
// Light* light = nullptr;
|
|
// while (!file.eof())
|
|
// {
|
|
// string line = "";
|
|
// file >> line;
|
|
// switch (line[0])
|
|
// {
|
|
// case 'P':
|
|
// {
|
|
// light = new Light();
|
|
// lights.insert(light);
|
|
// light->SetType(Light::POINT);
|
|
// file >> light->name >> light->shadow;
|
|
// }
|
|
// break;
|
|
// case 'D':
|
|
// {
|
|
// light = new Light();
|
|
// lights.insert(light);
|
|
// light->SetType(Light::DIRECTIONAL);
|
|
// file >> light->name;
|
|
// light->shadow = true;
|
|
// }
|
|
// break;
|
|
// case 'S':
|
|
// {
|
|
// light = new Light();
|
|
// lights.insert(light);
|
|
// light->SetType(Light::SPOT);
|
|
// file >> light->name;
|
|
// file >> light->shadow >> light->enerDis.z;
|
|
// }
|
|
// break;
|
|
// case 'p':
|
|
// {
|
|
// file >> light->parentName;
|
|
// }
|
|
// break;
|
|
// case 'b':
|
|
// {
|
|
// file >> light->boneParent;
|
|
// }
|
|
// break;
|
|
// case 'I':
|
|
// {
|
|
// XMFLOAT3 s, t;
|
|
// XMFLOAT4 r;
|
|
// file >> t.x >> t.y >> t.z >> r.x >> r.y >> r.z >> r.w >> s.x >> s.y >> s.z;
|
|
// XMStoreFloat4x4(&light->parent_inv_rest
|
|
// , XMMatrixScalingFromVector(XMLoadFloat3(&s)) *
|
|
// XMMatrixRotationQuaternion(XMLoadFloat4(&r)) *
|
|
// XMMatrixTranslationFromVector(XMLoadFloat3(&t))
|
|
// );
|
|
// }
|
|
// break;
|
|
// case 't':
|
|
// {
|
|
// float x, y, z;
|
|
// file >> x >> y >> z;
|
|
// light->Translate(XMFLOAT3(x, y, z));
|
|
// break;
|
|
// }
|
|
// case 'r':
|
|
// {
|
|
// float x, y, z, w;
|
|
// file >> x >> y >> z >> w;
|
|
// light->Rotate(XMFLOAT4(x, y, z, w));
|
|
// break;
|
|
// }
|
|
// case 'c':
|
|
// {
|
|
// float r, g, b;
|
|
// file >> r >> g >> b;
|
|
// light->color = XMFLOAT4(r, g, b, 0);
|
|
// break;
|
|
// }
|
|
// case 'e':
|
|
// file >> light->enerDis.x;
|
|
// break;
|
|
// case 'd':
|
|
// file >> light->enerDis.y;
|
|
// break;
|
|
// case 'n':
|
|
// light->noHalo = true;
|
|
// break;
|
|
// case 'l':
|
|
// {
|
|
// string t = "";
|
|
// file >> t;
|
|
// stringstream rim("");
|
|
// rim << directory << "rims/" << t;
|
|
// Texture2D* tex = nullptr;
|
|
// if ((tex = (Texture2D*)wiResourceManager::GetGlobal()->add(rim.str())) != nullptr) {
|
|
// light->lensFlareRimTextures.push_back(tex);
|
|
// light->lensFlareNames.push_back(rim.str());
|
|
// }
|
|
// }
|
|
// break;
|
|
// default: break;
|
|
// }
|
|
// }
|
|
//
|
|
// }
|
|
// file.close();
|
|
//}
|
|
//void LoadWiCameras(const std::string&directory, const std::string& name, std::list<Camera*>& cameras
|
|
// , const unordered_set<Armature*>& armatures)
|
|
//{
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file)
|
|
// {
|
|
// string voidStr("");
|
|
// file >> voidStr;
|
|
// while (!file.eof()) {
|
|
// string line = "";
|
|
// file >> line;
|
|
// switch (line[0]) {
|
|
//
|
|
// case 'c':
|
|
// {
|
|
// XMFLOAT3 trans;
|
|
// XMFLOAT4 rot;
|
|
// string name(""), parentA(""), parentB("");
|
|
// file >> name >> parentA >> parentB >> trans.x >> trans.y >> trans.z >> rot.x >> rot.y >> rot.z >> rot.w;
|
|
//
|
|
// cameras.push_back(new Camera(
|
|
// trans, rot
|
|
// , name)
|
|
// );
|
|
//
|
|
// for (auto& a : armatures)
|
|
// {
|
|
// Bone* b = a->GetBone(parentB);
|
|
// if (b != nullptr)
|
|
// {
|
|
// cameras.back()->attachTo(b);
|
|
// }
|
|
// }
|
|
//
|
|
// }
|
|
// break;
|
|
// case 'I':
|
|
// {
|
|
// XMFLOAT3 s, t;
|
|
// XMFLOAT4 r;
|
|
// file >> t.x >> t.y >> t.z >> r.x >> r.y >> r.z >> r.w >> s.x >> s.y >> s.z;
|
|
// XMStoreFloat4x4(&cameras.back()->parent_inv_rest
|
|
// , XMMatrixScalingFromVector(XMLoadFloat3(&s)) *
|
|
// XMMatrixRotationQuaternion(XMLoadFloat4(&r)) *
|
|
// XMMatrixTranslationFromVector(XMLoadFloat3(&t))
|
|
// );
|
|
// }
|
|
// break;
|
|
// default:break;
|
|
// }
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//}
|
|
//void LoadWiDecals(const std::string&directory, const std::string& name, const std::string& texturesDir, unordered_set<Decal*>& decals)
|
|
//{
|
|
// stringstream filename("");
|
|
// filename << directory << name;
|
|
//
|
|
// ifstream file(filename.str().c_str());
|
|
// if (file)
|
|
// {
|
|
// Decal* decal = nullptr;
|
|
// string voidStr = "";
|
|
// file >> voidStr;
|
|
// while (!file.eof())
|
|
// {
|
|
// string line = "";
|
|
// file >> line;
|
|
// switch (line[0])
|
|
// {
|
|
// case 'd':
|
|
// {
|
|
// string name;
|
|
// XMFLOAT3 loc, scale;
|
|
// XMFLOAT4 rot;
|
|
// file >> name >> scale.x >> scale.y >> scale.z >> loc.x >> loc.y >> loc.z >> rot.x >> rot.y >> rot.z >> rot.w;
|
|
// decal = new Decal(loc, scale, rot);
|
|
// decal->name = name;
|
|
// decals.insert(decal);
|
|
// }
|
|
// break;
|
|
// case 't':
|
|
// {
|
|
// string tex = "";
|
|
// file >> tex;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << tex;
|
|
// decal->addTexture(ss.str());
|
|
// }
|
|
// break;
|
|
// case 'n':
|
|
// {
|
|
// string tex = "";
|
|
// file >> tex;
|
|
// stringstream ss("");
|
|
// ss << directory << texturesDir << tex;
|
|
// decal->addNormal(ss.str());
|
|
// }
|
|
// break;
|
|
// default:break;
|
|
// };
|
|
// }
|
|
// }
|
|
// file.close();
|
|
//}
|
|
|
|
Entity ImportModel_WIO(const std::string& fileName)
|
|
{
|
|
string directory, name;
|
|
wiHelper::SplitPath(fileName, directory, name);
|
|
string extension = wiHelper::toUpper(wiHelper::GetExtensionFromFileName(name));
|
|
wiHelper::RemoveExtensionFromFileName(name);
|
|
|
|
return INVALID_ENTITY;
|
|
|
|
//Model* model = new Model;
|
|
//model->name = name;
|
|
|
|
//stringstream armatureFilePath(""), materialLibFilePath(""), meshesFilePath(""), objectsFilePath("")
|
|
// , actionsFilePath(""), lightsFilePath(""), decalsFilePath(""), camerasFilePath("");
|
|
|
|
//armatureFilePath << name << ".wia";
|
|
//materialLibFilePath << name << ".wim";
|
|
//meshesFilePath << name << ".wi";
|
|
//objectsFilePath << name << ".wio";
|
|
//actionsFilePath << name << ".wiact";
|
|
//lightsFilePath << name << ".wil";
|
|
//decalsFilePath << name << ".wid";
|
|
//camerasFilePath << name << ".wic";
|
|
|
|
//LoadWiArmatures(directory, armatureFilePath.str(), model->armatures);
|
|
//LoadWiMaterialLibrary(directory, materialLibFilePath.str(), "textures/", model->materials);
|
|
//LoadWiMeshes(directory, meshesFilePath.str(), model->meshes, model->armatures, model->materials);
|
|
//LoadWiObjects(directory, objectsFilePath.str(), model->objects, model->armatures, model->meshes, model->materials);
|
|
//LoadWiActions(directory, actionsFilePath.str(), model->armatures);
|
|
//LoadWiLights(directory, lightsFilePath.str(), model->lights);
|
|
//LoadWiDecals(directory, decalsFilePath.str(), "textures/", model->decals);
|
|
//LoadWiCameras(directory, camerasFilePath.str(), model->cameras, model->armatures);
|
|
|
|
//model->FinishLoading();
|
|
|
|
//return model;
|
|
}
|