From e468592233fbcc6ab8d7892cc0d7afa05dbbee39 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=B4me=20Chilliet?= Date: Sun, 8 Jan 2017 15:11:26 +0100 Subject: [PATCH] Fixes #74 Shadow glitch (was using decal.vertex instead of model.vertex) --- Source/Graphic/Decal.cpp | 54 +++++++++++++++++++-------------------- Source/Graphic/Models.cpp | 20 +++++++-------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/Source/Graphic/Decal.cpp b/Source/Graphic/Decal.cpp index cb1ee99..335a4bc 100644 --- a/Source/Graphic/Decal.cpp +++ b/Source/Graphic/Decal.cpp @@ -105,100 +105,100 @@ Decal::Decal(XYZ _position, decal_type _type, float _opacity, float _rotation, f { float placex, placez; if (which == 0) { - placex = vertex[model.Triangles[i].vertex[0]].x; - placez = vertex[model.Triangles[i].vertex[0]].z; + placex = model.vertex[model.Triangles[i].vertex[0]].x; + placez = model.vertex[model.Triangles[i].vertex[0]].z; texcoords[0][0] = (placex - position.x) / (size) / 2 + .5; texcoords[0][1] = (placez - position.z) / (size) / 2 + .5; vertex[0].x = placex; vertex[0].z = placez; - vertex[0].y = vertex[model.Triangles[i].vertex[0]].y; + vertex[0].y = model.vertex[model.Triangles[i].vertex[0]].y; - placex = vertex[model.Triangles[i].vertex[1]].x; - placez = vertex[model.Triangles[i].vertex[1]].z; + placex = model.vertex[model.Triangles[i].vertex[1]].x; + placez = model.vertex[model.Triangles[i].vertex[1]].z; texcoords[1][0] = (placex - position.x) / (size) / 2 + .5; texcoords[1][1] = (placez - position.z) / (size) / 2 + .5; vertex[1].x = placex; vertex[1].z = placez; - vertex[1].y = vertex[model.Triangles[i].vertex[1]].y; + vertex[1].y = model.vertex[model.Triangles[i].vertex[1]].y; - placex = vertex[model.Triangles[i].vertex[2]].x; - placez = vertex[model.Triangles[i].vertex[2]].z; + placex = model.vertex[model.Triangles[i].vertex[2]].x; + placez = model.vertex[model.Triangles[i].vertex[2]].z; texcoords[2][0] = (placex - position.x) / (size) / 2 + .5; texcoords[2][1] = (placez - position.z) / (size) / 2 + .5; vertex[2].x = placex; vertex[2].z = placez; - vertex[2].y = vertex[model.Triangles[i].vertex[2]].y; + vertex[2].y = model.vertex[model.Triangles[i].vertex[2]].y; } else if (which == 1) { - placex = vertex[model.Triangles[i].vertex[0]].y; - placez = vertex[model.Triangles[i].vertex[0]].z; + placex = model.vertex[model.Triangles[i].vertex[0]].y; + placez = model.vertex[model.Triangles[i].vertex[0]].z; texcoords[0][0] = (placex - position.y) / (size) / 2 + .5; texcoords[0][1] = (placez - position.z) / (size) / 2 + .5; - vertex[0].x = vertex[model.Triangles[i].vertex[0]].x; + vertex[0].x = model.vertex[model.Triangles[i].vertex[0]].x; vertex[0].z = placez; vertex[0].y = placex; - placex = vertex[model.Triangles[i].vertex[1]].y; - placez = vertex[model.Triangles[i].vertex[1]].z; + placex = model.vertex[model.Triangles[i].vertex[1]].y; + placez = model.vertex[model.Triangles[i].vertex[1]].z; texcoords[1][0] = (placex - position.y) / (size) / 2 + .5; texcoords[1][1] = (placez - position.z) / (size) / 2 + .5; - vertex[1].x = vertex[model.Triangles[i].vertex[1]].x; + vertex[1].x = model.vertex[model.Triangles[i].vertex[1]].x; vertex[1].z = placez; vertex[1].y = placex; - placex = vertex[model.Triangles[i].vertex[2]].y; - placez = vertex[model.Triangles[i].vertex[2]].z; + placex = model.vertex[model.Triangles[i].vertex[2]].y; + placez = model.vertex[model.Triangles[i].vertex[2]].z; texcoords[2][0] = (placex - position.y) / (size) / 2 + .5; texcoords[2][1] = (placez - position.z) / (size) / 2 + .5; - vertex[2].x = vertex[model.Triangles[i].vertex[2]].x; + vertex[2].x = model.vertex[model.Triangles[i].vertex[2]].x; vertex[2].z = placez; vertex[2].y = placex; } else { - placex = vertex[model.Triangles[i].vertex[0]].x; - placez = vertex[model.Triangles[i].vertex[0]].y; + placex = model.vertex[model.Triangles[i].vertex[0]].x; + placez = model.vertex[model.Triangles[i].vertex[0]].y; texcoords[0][0] = (placex - position.x) / (size) / 2 + .5; texcoords[0][1] = (placez - position.y) / (size) / 2 + .5; vertex[0].x = placex; - vertex[0].z = vertex[model.Triangles[i].vertex[0]].z; + vertex[0].z = model.vertex[model.Triangles[i].vertex[0]].z; vertex[0].y = placez; - placex = vertex[model.Triangles[i].vertex[1]].x; - placez = vertex[model.Triangles[i].vertex[1]].y; + placex = model.vertex[model.Triangles[i].vertex[1]].x; + placez = model.vertex[model.Triangles[i].vertex[1]].y; texcoords[1][0] = (placex - position.x) / (size) / 2 + .5; texcoords[1][1] = (placez - position.y) / (size) / 2 + .5; vertex[1].x = placex; - vertex[1].z = vertex[model.Triangles[i].vertex[1]].z; + vertex[1].z = model.vertex[model.Triangles[i].vertex[1]].z; vertex[1].y = placez; - placex = vertex[model.Triangles[i].vertex[2]].x; - placez = vertex[model.Triangles[i].vertex[2]].y; + placex = model.vertex[model.Triangles[i].vertex[2]].x; + placez = model.vertex[model.Triangles[i].vertex[2]].y; texcoords[2][0] = (placex - position.x) / (size) / 2 + .5; texcoords[2][1] = (placez - position.y) / (size) / 2 + .5; vertex[2].x = placex; - vertex[2].z = vertex[model.Triangles[i].vertex[2]].z; + vertex[2].z = model.vertex[model.Triangles[i].vertex[2]].z; vertex[2].y = placez; } } diff --git a/Source/Graphic/Models.cpp b/Source/Graphic/Models.cpp index c58e691..0edde87 100644 --- a/Source/Graphic/Models.cpp +++ b/Source/Graphic/Models.cpp @@ -537,7 +537,6 @@ bool Model::loaddecal(const std::string& filename) LOG(std::string("Loading decal...") + Folders::getResourcePath(filename)); type = decalstype; - decals.clear(); color = 0; tfile = Folders::openMandatoryFile( Folders::getResourcePath(filename), "rb" ); @@ -909,14 +908,13 @@ void Model::drawdifftex(Texture texture) void Model::drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture) { if (decalstoggle) { - if (type != decalstype) + if (type != decalstype) { return; - static int lasttype; - static bool blend; + } - blend = 1; + bool blend = true; + int lasttype = -1; - lasttype = -1; glEnable(GL_BLEND); glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); @@ -1029,7 +1027,7 @@ void Model::MakeDecal(decal_type atype, XYZ *where, float *size, float *opacity, if (Triangles[i].facenormal.y < -.1 && (vertex[Triangles[i].vertex[0]].y < where->y || vertex[Triangles[i].vertex[1]].y < where->y || vertex[Triangles[i].vertex[2]].y < where->y)) { distance = abs(((Triangles[i].facenormal.x * where->x) + (Triangles[i].facenormal.y * where->y) + (Triangles[i].facenormal.z * where->z) - ((Triangles[i].facenormal.x * vertex[Triangles[i].vertex[0]].x) + (Triangles[i].facenormal.y * vertex[Triangles[i].vertex[0]].y) + (Triangles[i].facenormal.z * vertex[Triangles[i].vertex[0]].z))) / Triangles[i].facenormal.y); - if (*opacity - distance / 10 > 0) { + if ((*opacity - distance / 10) > 0) { Decal decal(*where, atype, *opacity - distance / 10, *rotation, *size, *this, i, 0); if (!(decal.texcoords[0][0] < 0 && decal.texcoords[1][0] < 0 && decal.texcoords[2][0] < 0)) @@ -1070,7 +1068,7 @@ void Model::MakeDecal(decal_type atype, XYZ where, float size, float opacity, fl for (unsigned int i = 0; i < Triangles.size(); i++) { distance = abs(((Triangles[i].facenormal.x * where.x) + (Triangles[i].facenormal.y * where.y) + (Triangles[i].facenormal.z * where.z) - ((Triangles[i].facenormal.x * vertex[Triangles[i].vertex[0]].x) + (Triangles[i].facenormal.y * vertex[Triangles[i].vertex[0]].y) + (Triangles[i].facenormal.z * vertex[Triangles[i].vertex[0]].z)))); if (distance < .02 && abs(Triangles[i].facenormal.y) > abs(Triangles[i].facenormal.x) && abs(Triangles[i].facenormal.y) > abs(Triangles[i].facenormal.z)) { - if (opacity - distance / 10 > 0) { + if ((opacity - distance / 10) > 0) { Decal decal(where, atype, opacity - distance / 10, rotation, size, *this, i, 0); if (!(decal.texcoords[0][0] < 0 && decal.texcoords[1][0] < 0 && decal.texcoords[2][0] < 0)) @@ -1093,7 +1091,7 @@ void Model::MakeDecal(decal_type atype, XYZ where, float size, float opacity, fl } } } else if (distance < .02 && abs(Triangles[i].facenormal.x) > abs(Triangles[i].facenormal.y) && abs(Triangles[i].facenormal.x) > abs(Triangles[i].facenormal.z)) { - if (opacity - distance / 10 > 0) { + if ((opacity - distance / 10) > 0) { Decal decal(where, atype, opacity - distance / 10, rotation, size, *this, i, 1); if (!(decal.texcoords[0][0] < 0 && decal.texcoords[1][0] < 0 && decal.texcoords[2][0] < 0)) @@ -1116,7 +1114,7 @@ void Model::MakeDecal(decal_type atype, XYZ where, float size, float opacity, fl } } } else if (distance < .02 && abs(Triangles[i].facenormal.z) > abs(Triangles[i].facenormal.y) && abs(Triangles[i].facenormal.z) > abs(Triangles[i].facenormal.x)) { - if (opacity - distance / 10 > 0) { + if ((opacity - distance / 10) > 0) { Decal decal(where, atype, opacity - distance / 10, rotation, size, *this, i, 2); if (!(decal.texcoords[0][0] < 0 && decal.texcoords[1][0] < 0 && decal.texcoords[2][0] < 0)) @@ -1174,6 +1172,8 @@ void Model::deallocate() if (vArray) free(vArray); vArray = 0; + + decals.clear(); } Model::Model() -- 2.39.2