From bb9b3963d21826a2f2ab17eb5eb446514b946e9b Mon Sep 17 00:00:00 2001 From: XProger Date: Fri, 21 Oct 2016 02:48:52 +0300 Subject: [PATCH] #12 fix normals --- bin/OpenLara.exe | Bin 91136 -> 91136 bytes src/mesh.h | 28 ++++++++++++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/bin/OpenLara.exe b/bin/OpenLara.exe index e32bf616965c2be77c64aa95bb538a189d01d503..7444d5cfb101ebdcf131828794ea99a3bdc762e3 100644 GIT binary patch delta 8667 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 delta 8589 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 VevXzla2x>nwOr}=E*nMk{%=u~x$6J` diff --git a/src/mesh.h b/src/mesh.h index 9d3add9..53028ad 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -198,7 +198,7 @@ struct MeshBuilder { TR::Room::Data::Vertex &v = d.vertices[f.vertices[k]]; uint8 a = 255 - (v.lighting >> 5); - vertices[vCount].coord = { v.vertex.x, v.vertex.y, v.vertex.z }; + vertices[vCount].coord = { v.vertex.x, v.vertex.y, v.vertex.z, 0 }; vertices[vCount].color = { a, a, a, 255 }; vertices[vCount].normal = { 0, 0, 0, 1 }; vCount++; @@ -215,7 +215,7 @@ struct MeshBuilder { auto &v = d.vertices[f.vertices[k]]; uint8 a = 255 - (v.lighting >> 5); - vertices[vCount].coord = { v.vertex.x, v.vertex.y, v.vertex.z }; + vertices[vCount].coord = { v.vertex.x, v.vertex.y, v.vertex.z, 0 }; vertices[vCount].color = { a, a, a, 255 }; vertices[vCount].normal = { 0, 0, 0, 1 }; vCount++; @@ -272,11 +272,14 @@ struct MeshBuilder { for (int k = 0; k < 4; k++) { auto &v = mVertices[f.vertices[k]]; - vertices[vCount].coord = { v.x, v.y, v.z }; + vertices[vCount].coord = { v.x, v.y, v.z, 0 }; if (nCount > 0) { TR::Vertex &n = normals[f.vertices[k]]; - vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + if (n.x | n.y | n.z) + vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + else + vertices[vCount].normal = vertices[vCount].coord; vertices[vCount].color = { 255, 255, 255, 255 }; } else { uint8 a = 255 - (lights[f.vertices[k]] >> 5); @@ -297,11 +300,14 @@ struct MeshBuilder { for (int k = 0; k < 3; k++) { auto &v = mVertices[f.vertices[k]]; - vertices[vCount].coord = { v.x, v.y, v.z }; + vertices[vCount].coord = { v.x, v.y, v.z, 0 }; if (nCount > 0) { TR::Vertex &n = normals[f.vertices[k]]; - vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + if (n.x | n.y | n.z) + vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + else + vertices[vCount].normal = vertices[vCount].coord; vertices[vCount].color = { 255, 255, 255, 255 }; } else { uint8 a = 255 - (lights[f.vertices[k]] >> 5); @@ -327,7 +333,10 @@ struct MeshBuilder { if (nCount > 0) { TR::Vertex &n = normals[f.vertices[k]]; - vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + if (n.x | n.y | n.z) + vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + else + vertices[vCount].normal = vertices[vCount].coord; vertices[vCount].color = { c.r, c.g, c.b, 255 }; } else { uint8 a = 255 - (lights[f.vertices[k]] >> 5); @@ -353,7 +362,10 @@ struct MeshBuilder { if (nCount > 0) { TR::Vertex &n = normals[f.vertices[k]]; - vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + if (n.x | n.y | n.z) + vertices[vCount].normal = { n.x, n.y, n.z, 0 }; + else + vertices[vCount].normal = vertices[vCount].coord; vertices[vCount].color = { c.r, c.g, c.b, 255 }; } else { uint8 a = 255 - (lights[f.vertices[k]] >> 5);