Small cleanup
parent
6447304531
commit
3168bf4350
|
@ -4685,29 +4685,17 @@ void CEngine::AddBaseObjTriangles(int baseObjRank, const std::vector<Gfx::ModelT
|
|||
vertices[1] = triangle.p2;
|
||||
vertices[2] = triangle.p3;
|
||||
|
||||
Material material;
|
||||
Material material = triangle.material;
|
||||
material.albedoTexture = "objects/" + material.albedoTexture;
|
||||
|
||||
std::string tex1Name;
|
||||
if (!triangle.tex1Name.empty())
|
||||
material.albedoTexture = "objects/" + triangle.tex1Name;
|
||||
|
||||
std::string tex2Name;
|
||||
if (triangle.variableTex2)
|
||||
if (material.variableDetail)
|
||||
material.detailTexture = GetSecondTexture();
|
||||
else
|
||||
material.detailTexture = triangle.tex2Name;
|
||||
|
||||
material.alphaMode = triangle.alphaMode;
|
||||
material.alphaThreshold = triangle.alphaThreshold;
|
||||
material.cullFace = triangle.doubleSided ? CullFace::NONE : CullFace::BACK;
|
||||
material.tag = triangle.tag;
|
||||
|
||||
EngineBaseObjDataTier& data = AddLevel(p1, EngineTriangleType::TRIANGLES, material);
|
||||
|
||||
data.vertices.insert(data.vertices.end(), vertices.begin(), vertices.end());
|
||||
|
||||
data.updateStaticBuffer = true;
|
||||
m_updateStaticBuffers = true;
|
||||
|
||||
for (size_t i = 0; i < vertices.size(); i++)
|
||||
{
|
||||
|
@ -4723,6 +4711,8 @@ void CEngine::AddBaseObjTriangles(int baseObjRank, const std::vector<Gfx::ModelT
|
|||
|
||||
p1.totalTriangles += vertices.size() / 3;
|
||||
}
|
||||
|
||||
m_updateStaticBuffers = true;
|
||||
}
|
||||
|
||||
void CEngine::UpdateObjectShadowSpotNormal(int objRank)
|
||||
|
|
|
@ -86,9 +86,6 @@ bool COldModelManager::LoadModel(const std::string& fileName, bool mirrored, int
|
|||
if (mirrored)
|
||||
Mirror(modelInfo.triangles);
|
||||
|
||||
//if (variant != 0)
|
||||
// ChangeVariant(modelInfo.triangles, variant);
|
||||
|
||||
FileInfo fileInfo(fileName, mirrored, variant);
|
||||
m_models[fileInfo] = modelInfo;
|
||||
|
||||
|
@ -194,24 +191,4 @@ void COldModelManager::Mirror(std::vector<ModelTriangle>& triangles)
|
|||
}
|
||||
}
|
||||
|
||||
void COldModelManager::ChangeVariant(std::vector<ModelTriangle>& triangles, int variant)
|
||||
{
|
||||
for (int i = 0; i < static_cast<int>( triangles.size() ); i++)
|
||||
{
|
||||
if (triangles[i].tex1Name == "base1.png" ||
|
||||
triangles[i].tex1Name == "convert.png" ||
|
||||
triangles[i].tex1Name == "derrick.png" ||
|
||||
triangles[i].tex1Name == "factory.png" ||
|
||||
triangles[i].tex1Name == "lemt.png" ||
|
||||
triangles[i].tex1Name == "roller.png" ||
|
||||
triangles[i].tex1Name == "rollert.png" ||
|
||||
triangles[i].tex1Name == "search.png" ||
|
||||
triangles[i].tex1Name == "drawer.png" ||
|
||||
triangles[i].tex1Name == "subm.png" )
|
||||
{
|
||||
//triangles[i].tex1Name += StrUtils::ToString<int>(variant);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -83,8 +83,6 @@ public:
|
|||
protected:
|
||||
//! Mirrors the model along the Z axis
|
||||
void Mirror(std::vector<ModelTriangle>& triangles);
|
||||
//! Changes variant
|
||||
void ChangeVariant(std::vector<ModelTriangle>& triangles, int variant);
|
||||
|
||||
private:
|
||||
struct ModelInfo
|
||||
|
|
|
@ -203,9 +203,9 @@ void ModelInput::ReadBinaryModelV1AndV2(CModel &model, std::istream &stream)
|
|||
triangle.p1 = t.p1;
|
||||
triangle.p2 = t.p2;
|
||||
triangle.p3 = t.p3;
|
||||
triangle.tex1Name = t.tex1Name;
|
||||
triangle.tex2Name = t.tex2Name;
|
||||
triangle.variableTex2 = t.variableTex2;
|
||||
triangle.material.albedoTexture = t.tex1Name;
|
||||
triangle.material.detailTexture = t.tex2Name;
|
||||
triangle.material.variableDetail = t.variableTex2;
|
||||
ConvertFromOldRenderState(triangle, t.state);
|
||||
|
||||
mesh.AddTriangle(triangle);
|
||||
|
@ -300,9 +300,9 @@ void ModelInput::ReadTextModelV1AndV2(CModel &model, std::istream &stream)
|
|||
triangle.p1 = t.p1;
|
||||
triangle.p2 = t.p2;
|
||||
triangle.p3 = t.p3;
|
||||
triangle.tex1Name = t.tex1Name;
|
||||
triangle.tex2Name = t.tex2Name;
|
||||
triangle.variableTex2 = t.variableTex2;
|
||||
triangle.material.albedoTexture = t.tex1Name;
|
||||
triangle.material.detailTexture = t.tex2Name;
|
||||
triangle.material.variableDetail = t.variableTex2;
|
||||
ConvertFromOldRenderState(triangle, t.state);
|
||||
|
||||
mesh.AddTriangle(triangle);
|
||||
|
@ -393,16 +393,17 @@ CModelMesh ModelInput::ReadTextMesh(std::istream& stream)
|
|||
t.p2.color = color;
|
||||
t.p3.color = color;
|
||||
|
||||
t.tex1Name = ReadLineString(stream, "tex1");
|
||||
t.tex2Name = ReadLineString(stream, "tex2");
|
||||
t.variableTex2 = ReadLineString(stream, "var_tex2") == std::string("Y");
|
||||
t.material.albedoTexture = ReadLineString(stream, "tex1");
|
||||
t.material.detailTexture = ReadLineString(stream, "tex2");
|
||||
t.material.variableDetail = ReadLineString(stream, "var_tex2") == std::string("Y");
|
||||
|
||||
t.alphaMode = ParseTransparentMode(ReadLineString(stream, "trans_mode"));
|
||||
t.tag = ParseSpecialMark(ReadLineString(stream, "mark"));
|
||||
t.doubleSided = ReadLineString(stream, "dbl_side") == std::string("Y");
|
||||
t.material.alphaMode = ParseTransparentMode(ReadLineString(stream, "trans_mode"));
|
||||
t.material.tag = ParseSpecialMark(ReadLineString(stream, "mark"));
|
||||
bool doubleSided = ReadLineString(stream, "dbl_side") == std::string("Y");
|
||||
t.material.cullFace = doubleSided ? CullFace::NONE : CullFace::BACK;
|
||||
|
||||
if (t.alphaMode != AlphaMode::OPAQUE)
|
||||
t.alphaThreshold = 0.5f;
|
||||
if (t.material.alphaMode != AlphaMode::OPAQUE)
|
||||
t.material.alphaThreshold = 0.5f;
|
||||
|
||||
mesh.AddTriangle(t);
|
||||
}
|
||||
|
@ -602,13 +603,13 @@ std::vector<ModelTriangle> ModelInput::ReadOldModelV3(std::istream &stream, int
|
|||
ConvertOldTex1Name(triangle, t.texName);
|
||||
|
||||
ConvertFromOldRenderState(triangle, t.state);
|
||||
triangle.variableTex2 = t.texNum2 == 1;
|
||||
triangle.material.variableDetail = t.texNum2 == 1;
|
||||
|
||||
if (!triangle.variableTex2 && t.texNum2 != 0)
|
||||
if (!triangle.material.variableDetail && t.texNum2 != 0)
|
||||
{
|
||||
char tex2Name[20] = { 0 };
|
||||
std::sprintf(tex2Name, "dirty%.2d.png", t.texNum2);
|
||||
triangle.tex2Name = tex2Name;
|
||||
triangle.material.detailTexture = tex2Name;
|
||||
}
|
||||
|
||||
triangles.push_back(triangle);
|
||||
|
@ -633,31 +634,32 @@ ModelLODLevel ModelInput::MinMaxToLodLevel(float min, float max)
|
|||
|
||||
void ModelInput::ConvertOldTex1Name(ModelTriangle& triangle, const char* tex1Name)
|
||||
{
|
||||
triangle.tex1Name = tex1Name;
|
||||
boost::replace_all(triangle.tex1Name, "bmp", "png");
|
||||
boost::replace_all(triangle.tex1Name, "tga", "png");
|
||||
triangle.material.albedoTexture = tex1Name;
|
||||
boost::replace_all(triangle.material.albedoTexture, "bmp", "png");
|
||||
boost::replace_all(triangle.material.albedoTexture, "tga", "png");
|
||||
}
|
||||
|
||||
void ModelInput::ConvertFromOldRenderState(ModelTriangle& triangle, int state)
|
||||
{
|
||||
if (triangle.tex1Name == "plant.png" || (state & static_cast<int>(ModelRenderState::Alpha)) != 0)
|
||||
if (triangle.material.albedoTexture == "plant.png" || (state & static_cast<int>(ModelRenderState::Alpha)) != 0)
|
||||
{
|
||||
triangle.alphaMode = AlphaMode::MASK;
|
||||
triangle.alphaThreshold = 0.5f;
|
||||
triangle.material.alphaMode = AlphaMode::MASK;
|
||||
triangle.material.alphaThreshold = 0.5f;
|
||||
}
|
||||
else
|
||||
triangle.alphaMode = AlphaMode::OPAQUE;
|
||||
triangle.material.alphaMode = AlphaMode::OPAQUE;
|
||||
|
||||
if ((state & static_cast<int>(ModelRenderState::Part1)) != 0)
|
||||
triangle.tag = "tracker_right";
|
||||
triangle.material.tag = "tracker_right";
|
||||
else if ((state & static_cast<int>(ModelRenderState::Part2)) != 0)
|
||||
triangle.tag = "tracker_left";
|
||||
triangle.material.tag = "tracker_left";
|
||||
else if ((state & static_cast<int>(ModelRenderState::Part3)) != 0)
|
||||
triangle.tag = "energy";
|
||||
triangle.material.tag = "energy";
|
||||
else
|
||||
triangle.tag = "";
|
||||
triangle.material.tag = "";
|
||||
|
||||
triangle.doubleSided = (state & static_cast<int>(ModelRenderState::TwoFace)) != 0;
|
||||
bool doubleSided = (state & static_cast<int>(ModelRenderState::TwoFace)) != 0;
|
||||
triangle.material.cullFace = doubleSided ? CullFace::NONE : CullFace::BACK;
|
||||
}
|
||||
|
||||
Vertex3D ModelInput::ReadBinaryVertex(std::istream& stream)
|
||||
|
|
|
@ -19,15 +19,12 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "graphics/core/color.h"
|
||||
#include "graphics/core/transparency.h"
|
||||
#include "graphics/core/material.h"
|
||||
#include "graphics/core/vertex.h"
|
||||
|
||||
namespace Gfx
|
||||
{
|
||||
|
||||
enum class AlphaMode : unsigned char;
|
||||
|
||||
/**
|
||||
* \struct ModelTriangle
|
||||
* \brief A single triangle in mesh as saved in model file
|
||||
|
@ -40,19 +37,8 @@ struct ModelTriangle
|
|||
Vertex3D p2;
|
||||
//! 3rd vertex
|
||||
Vertex3D p3;
|
||||
//! Name of 1st texture
|
||||
std::string tex1Name;
|
||||
//! Name of 2nd texture
|
||||
std::string tex2Name;
|
||||
//! If true, 2nd texture will be taken from current engine setting
|
||||
bool variableTex2 = false;
|
||||
//! Whether to render as double-sided surface
|
||||
bool doubleSided = false;
|
||||
//! How to deal with texture transparency
|
||||
AlphaMode alphaMode = {};
|
||||
float alphaThreshold = 0.5f;
|
||||
//! Special marking
|
||||
std::string tag = "";
|
||||
//! Material
|
||||
Material material;
|
||||
};
|
||||
|
||||
} // namespace Gfx
|
||||
|
|
|
@ -188,10 +188,10 @@ void DumpInfo(const CModel& model)
|
|||
bboxMax.y = Math::Max(t.p1.position.y, t.p2.position.y, t.p3.position.y, bboxMax.y);
|
||||
bboxMax.z = Math::Max(t.p1.position.z, t.p2.position.z, t.p3.position.z, bboxMax.z);
|
||||
|
||||
texs1[t.tex1Name] += 1;
|
||||
if (! t.tex2Name.empty())
|
||||
texs2[t.tex2Name] += 1;
|
||||
if (t.variableTex2)
|
||||
texs1[t.material.albedoTexture] += 1;
|
||||
if (! t.material.detailTexture.empty())
|
||||
texs2[t.material.detailTexture] += 1;
|
||||
if (t.material.variableDetail)
|
||||
variableTexs2 += 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue