chore: move materialIndex to XModelObject

This commit is contained in:
Jan 2024-04-02 18:47:54 +02:00
parent 1bc1c12244
commit 0a65c93aa5
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
7 changed files with 36 additions and 32 deletions

View File

@ -9,6 +9,7 @@
struct XModelObject struct XModelObject
{ {
std::string name; std::string name;
int materialIndex;
}; };
struct XModelBone struct XModelBone
@ -52,7 +53,6 @@ struct XModelFace
{ {
int vertexIndex[3]; int vertexIndex[3];
int objectIndex; int objectIndex;
int materialIndex;
}; };
struct XModelMaterial struct XModelMaterial

View File

@ -312,14 +312,16 @@ namespace
} }
} }
void AddXModelObjects(AbstractXModelWriter& writer, const XModel* model, const unsigned lod) void AddXModelObjects(AbstractXModelWriter& writer, const XModel* model, const unsigned lod, const DistinctMapper<Material*>& materialMapper)
{ {
const auto surfCount = model->lodInfo[lod].numsurfs; const auto surfCount = model->lodInfo[lod].numsurfs;
const auto baseSurfaceIndex = model->lodInfo[lod].surfIndex;
for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++) for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++)
{ {
XModelObject object; XModelObject object;
object.name = "surf" + std::to_string(surfIndex); object.name = "surf" + std::to_string(surfIndex);
object.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddObject(std::move(object)); writer.AddObject(std::move(object));
} }
@ -506,11 +508,10 @@ namespace
} }
} }
void AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModel* model, const unsigned lod) void AddXModelFaces(AbstractXModelWriter& writer, const XModel* model, const unsigned lod)
{ {
const auto* surfs = &model->surfs[model->lodInfo[lod].surfIndex]; const auto* surfs = &model->surfs[model->lodInfo[lod].surfIndex];
const auto surfCount = model->lodInfo[lod].numsurfs; const auto surfCount = model->lodInfo[lod].numsurfs;
const auto baseSurfIndex = model->lodInfo[lod].surfIndex;
for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++) for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++)
{ {
@ -524,7 +525,6 @@ namespace
face.vertexIndex[1] = tri[1] + surface.baseVertIndex; face.vertexIndex[1] = tri[1] + surface.baseVertIndex;
face.vertexIndex[2] = tri[2] + surface.baseVertIndex; face.vertexIndex[2] = tri[2] + surface.baseVertIndex;
face.objectIndex = static_cast<int>(surfIndex); face.objectIndex = static_cast<int>(surfIndex);
face.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfIndex));
writer.AddFace(face); writer.AddFace(face);
} }
} }
@ -538,10 +538,10 @@ namespace
AddXModelBones(context, writer, model); AddXModelBones(context, writer, model);
AddXModelMaterials(writer, materialMapper, model); AddXModelMaterials(writer, materialMapper, model);
AddXModelObjects(writer, model, lod); AddXModelObjects(writer, model, lod, materialMapper);
AddXModelVertices(writer, model, lod); AddXModelVertices(writer, model, lod);
AddXModelVertexBoneWeights(writer, model, lod, boneWeightCollection); AddXModelVertexBoneWeights(writer, model, lod, boneWeightCollection);
AddXModelFaces(writer, materialMapper, model, lod); AddXModelFaces(writer, model, lod);
} }
void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod) void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod)

View File

@ -318,12 +318,16 @@ namespace
} }
} }
void AddXModelObjects(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs) void AddXModelObjects(AbstractXModelWriter& writer,
const XModelSurfs* modelSurfs,
const DistinctMapper<Material*>& materialMapper,
const int baseSurfaceIndex)
{ {
for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++) for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++)
{ {
XModelObject object; XModelObject object;
object.name = "surf" + std::to_string(surfIndex); object.name = "surf" + std::to_string(surfIndex);
object.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddObject(std::move(object)); writer.AddObject(std::move(object));
} }
@ -501,8 +505,7 @@ namespace
} }
} }
void void AddXModelFaces(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs)
AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModelSurfs* modelSurfs, const int baseSurfaceIndex)
{ {
for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++) for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++)
{ {
@ -516,7 +519,6 @@ namespace
face.vertexIndex[1] = tri[1] + surface.baseVertIndex; face.vertexIndex[1] = tri[1] + surface.baseVertIndex;
face.vertexIndex[2] = tri[2] + surface.baseVertIndex; face.vertexIndex[2] = tri[2] + surface.baseVertIndex;
face.objectIndex = static_cast<int>(surfIndex); face.objectIndex = static_cast<int>(surfIndex);
face.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddFace(face); writer.AddFace(face);
} }
} }
@ -532,10 +534,10 @@ namespace
AddXModelBones(context, writer, model); AddXModelBones(context, writer, model);
AddXModelMaterials(writer, materialMapper, model); AddXModelMaterials(writer, materialMapper, model);
AddXModelObjects(writer, modelSurfs); AddXModelObjects(writer, modelSurfs, materialMapper, model->lodInfo[lod].surfIndex);
AddXModelVertices(writer, modelSurfs); AddXModelVertices(writer, modelSurfs);
AddXModelVertexBoneWeights(writer, modelSurfs, boneWeightCollection); AddXModelVertexBoneWeights(writer, modelSurfs, boneWeightCollection);
AddXModelFaces(writer, materialMapper, modelSurfs, model->lodInfo[lod].surfIndex); AddXModelFaces(writer, modelSurfs);
} }
void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod) void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod)

View File

@ -317,12 +317,16 @@ namespace
} }
} }
void AddXModelObjects(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs) void AddXModelObjects(AbstractXModelWriter& writer,
const XModelSurfs* modelSurfs,
const DistinctMapper<Material*>& materialMapper,
const int baseSurfaceIndex)
{ {
for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++) for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++)
{ {
XModelObject object; XModelObject object;
object.name = "surf" + std::to_string(surfIndex); object.name = "surf" + std::to_string(surfIndex);
object.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddObject(std::move(object)); writer.AddObject(std::move(object));
} }
@ -500,8 +504,7 @@ namespace
} }
} }
void void AddXModelFaces(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs)
AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModelSurfs* modelSurfs, const int baseSurfaceIndex)
{ {
for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++) for (auto surfIndex = 0u; surfIndex < modelSurfs->numsurfs; surfIndex++)
{ {
@ -515,7 +518,6 @@ namespace
face.vertexIndex[1] = tri[1] + surface.baseVertIndex; face.vertexIndex[1] = tri[1] + surface.baseVertIndex;
face.vertexIndex[2] = tri[2] + surface.baseVertIndex; face.vertexIndex[2] = tri[2] + surface.baseVertIndex;
face.objectIndex = static_cast<int>(surfIndex); face.objectIndex = static_cast<int>(surfIndex);
face.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddFace(face); writer.AddFace(face);
} }
} }
@ -531,10 +533,10 @@ namespace
AddXModelBones(context, writer, model); AddXModelBones(context, writer, model);
AddXModelMaterials(writer, materialMapper, model); AddXModelMaterials(writer, materialMapper, model);
AddXModelObjects(writer, modelSurfs); AddXModelObjects(writer, modelSurfs, materialMapper, model->lodInfo[lod].surfIndex);
AddXModelVertices(writer, modelSurfs); AddXModelVertices(writer, modelSurfs);
AddXModelVertexBoneWeights(writer, modelSurfs, boneWeightCollection); AddXModelVertexBoneWeights(writer, modelSurfs, boneWeightCollection);
AddXModelFaces(writer, materialMapper, modelSurfs, model->lodInfo[lod].surfIndex); AddXModelFaces(writer, modelSurfs);
} }
void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod) void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod)

View File

@ -312,14 +312,16 @@ namespace
} }
} }
void AddXModelObjects(AbstractXModelWriter& writer, const XModel* model, const unsigned lod) void AddXModelObjects(AbstractXModelWriter& writer, const XModel* model, const unsigned lod, const DistinctMapper<Material*>& materialMapper)
{ {
const auto surfCount = model->lodInfo[lod].numsurfs; const auto surfCount = model->lodInfo[lod].numsurfs;
const auto baseSurfaceIndex = model->lodInfo[lod].surfIndex;
for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++) for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++)
{ {
XModelObject object; XModelObject object;
object.name = "surf" + std::to_string(surfIndex); object.name = "surf" + std::to_string(surfIndex);
object.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddObject(std::move(object)); writer.AddObject(std::move(object));
} }
@ -506,11 +508,10 @@ namespace
} }
} }
void AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModel* model, const unsigned lod) void AddXModelFaces(AbstractXModelWriter& writer, const XModel* model, const unsigned lod)
{ {
const auto* surfs = &model->surfs[model->lodInfo[lod].surfIndex]; const auto* surfs = &model->surfs[model->lodInfo[lod].surfIndex];
const auto surfCount = model->lodInfo[lod].numsurfs; const auto surfCount = model->lodInfo[lod].numsurfs;
const auto baseSurfIndex = model->lodInfo[lod].surfIndex;
for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++) for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++)
{ {
@ -524,7 +525,6 @@ namespace
face.vertexIndex[1] = tri[1] + surface.baseVertIndex; face.vertexIndex[1] = tri[1] + surface.baseVertIndex;
face.vertexIndex[2] = tri[2] + surface.baseVertIndex; face.vertexIndex[2] = tri[2] + surface.baseVertIndex;
face.objectIndex = static_cast<int>(surfIndex); face.objectIndex = static_cast<int>(surfIndex);
face.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfIndex));
writer.AddFace(face); writer.AddFace(face);
} }
} }
@ -538,10 +538,10 @@ namespace
AddXModelBones(context, writer, model); AddXModelBones(context, writer, model);
AddXModelMaterials(writer, materialMapper, model); AddXModelMaterials(writer, materialMapper, model);
AddXModelObjects(writer, model, lod); AddXModelObjects(writer, model, lod, materialMapper);
AddXModelVertices(writer, model, lod); AddXModelVertices(writer, model, lod);
AddXModelVertexBoneWeights(writer, model, lod, boneWeightCollection); AddXModelVertexBoneWeights(writer, model, lod, boneWeightCollection);
AddXModelFaces(writer, materialMapper, model, lod); AddXModelFaces(writer, model, lod);
} }
void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod) void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod)

View File

@ -324,14 +324,16 @@ namespace
} }
} }
void AddXModelObjects(AbstractXModelWriter& writer, const XModel* model, const unsigned lod) void AddXModelObjects(AbstractXModelWriter& writer, const XModel* model, const unsigned lod, const DistinctMapper<Material*>& materialMapper)
{ {
const auto surfCount = model->lodInfo[lod].numsurfs; const auto surfCount = model->lodInfo[lod].numsurfs;
const auto baseSurfaceIndex = model->lodInfo[lod].surfIndex;
for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++) for (auto surfIndex = 0u; surfIndex < surfCount; surfIndex++)
{ {
XModelObject object; XModelObject object;
object.name = "surf" + std::to_string(surfIndex); object.name = "surf" + std::to_string(surfIndex);
object.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfaceIndex));
writer.AddObject(std::move(object)); writer.AddObject(std::move(object));
} }
@ -527,11 +529,10 @@ namespace
} }
} }
void AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModel* model, const unsigned lod) void AddXModelFaces(AbstractXModelWriter& writer, const XModel* model, const unsigned lod)
{ {
const auto* surfs = &model->surfs[model->lodInfo[lod].surfIndex]; const auto* surfs = &model->surfs[model->lodInfo[lod].surfIndex];
const auto surfCount = model->lodInfo[lod].numsurfs; const auto surfCount = model->lodInfo[lod].numsurfs;
const auto baseSurfIndex = model->lodInfo[lod].surfIndex;
if (!surfs) if (!surfs)
return; return;
@ -548,7 +549,6 @@ namespace
face.vertexIndex[1] = tri[1] + surface.baseVertIndex; face.vertexIndex[1] = tri[1] + surface.baseVertIndex;
face.vertexIndex[2] = tri[2] + surface.baseVertIndex; face.vertexIndex[2] = tri[2] + surface.baseVertIndex;
face.objectIndex = static_cast<int>(surfIndex); face.objectIndex = static_cast<int>(surfIndex);
face.materialIndex = static_cast<int>(materialMapper.GetDistinctPositionByInputPosition(surfIndex + baseSurfIndex));
writer.AddFace(face); writer.AddFace(face);
} }
} }
@ -562,10 +562,10 @@ namespace
AddXModelBones(context, writer, model); AddXModelBones(context, writer, model);
AddXModelMaterials(writer, materialMapper, model); AddXModelMaterials(writer, materialMapper, model);
AddXModelObjects(writer, model, lod); AddXModelObjects(writer, model, lod, materialMapper);
AddXModelVertices(writer, model, lod); AddXModelVertices(writer, model, lod);
AddXModelVertexBoneWeights(writer, model, lod, boneWeightCollection); AddXModelVertexBoneWeights(writer, model, lod, boneWeightCollection);
AddXModelFaces(writer, materialMapper, model, lod); AddXModelFaces(writer, model, lod);
} }
void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod) void DumpXModelExportLod(const AssetDumpingContext& context, const XAssetInfo<XModel>* asset, const unsigned lod)

View File

@ -140,7 +140,7 @@ class XModelExportWriter6 final : public XModelExportWriterBase
const XModelVertex& v1 = m_vertices[face.vertexIndex[1]]; const XModelVertex& v1 = m_vertices[face.vertexIndex[1]];
const XModelVertex& v2 = m_vertices[face.vertexIndex[2]]; const XModelVertex& v2 = m_vertices[face.vertexIndex[2]];
stream << "TRI " << face.objectIndex << " " << face.materialIndex << " 0 0\n"; stream << "TRI " << face.objectIndex << " " << m_objects[face.objectIndex].materialIndex << " 0 0\n";
WriteFaceVertex(stream, distinctPositions[0], v0); WriteFaceVertex(stream, distinctPositions[0], v0);
WriteFaceVertex(stream, distinctPositions[1], v1); WriteFaceVertex(stream, distinctPositions[1], v1);
WriteFaceVertex(stream, distinctPositions[2], v2); WriteFaceVertex(stream, distinctPositions[2], v2);