From f16c897522b6418c399b5699f8378a25c2e5de4f Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Sun, 21 Nov 2021 14:57:57 +0500 Subject: Added normals to faces --- src/RendererSectionData.cpp | 4 ++++ src/RendererSectionData.hpp | 19 ++++++++++--------- src/RendererWorld.cpp | 3 ++- 3 files changed, 16 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/RendererSectionData.cpp b/src/RendererSectionData.cpp index 2588fd6..0ac901e 100644 --- a/src/RendererSectionData.cpp +++ b/src/RendererSectionData.cpp @@ -26,11 +26,13 @@ glm::vec2 TransformTextureCoord(glm::vec4 TextureAtlasCoords, glm::vec2 UvCoords void AddFacesByBlockModel(RendererSectionData &data, const BlockFaces &model, const glm::mat4 &transform, bool visibility[FaceDirection::none], BlockLightness light, BlockLightness skyLight) { for (const auto &face : model.faces) { + glm::vec3 normal = {}; glm::vec2 lightness; lightness.x = _max(light.face[0], light.face[1], light.face[2], light.face[3], light.face[4], light.face[5]); lightness.y = _max(skyLight.face[0], skyLight.face[1], skyLight.face[2], skyLight.face[3], skyLight.face[4], skyLight.face[5]); if (face.visibility != FaceDirection::none) { FaceDirection direction = face.visibility; + normal = FaceDirectionVector[direction].glm(); Vector directionVec = model.faceDirectionVector[direction]; FaceDirection faceDirection = FaceDirection::none; for (int i = 0; i < FaceDirection::none; i++) { @@ -56,6 +58,8 @@ void AddFacesByBlockModel(RendererSectionData &data, const BlockFaces &model, co vertexData.positions[2] = transformed * glm::vec4(1, 0, 1, 1); vertexData.positions[3] = transformed * glm::vec4(1, 0, 0, 1); + vertexData.normal = normal; + vertexData.uvs[0] = TransformTextureCoord(face.texture, glm::vec2(0, 0), face.frames); vertexData.uvs[1] = TransformTextureCoord(face.texture, glm::vec2(1, 0), face.frames); vertexData.uvs[2] = TransformTextureCoord(face.texture, glm::vec2(1, 1), face.frames); diff --git a/src/RendererSectionData.hpp b/src/RendererSectionData.hpp index edd2992..0a80560 100644 --- a/src/RendererSectionData.hpp +++ b/src/RendererSectionData.hpp @@ -31,20 +31,21 @@ struct SectionsData { }; struct VertexData { - glm::vec3 positions[4]; - glm::vec2 uvs[4]; - float uvLayers; - float animations; - glm::vec3 colors; - glm::vec2 lights; - uint8_t padding[20]; + glm::vec3 positions[4]; + glm::vec3 normal; + glm::vec2 uvs[4]; + float uvLayers; + float animations; + glm::vec3 colors; + glm::vec2 lights; + uint8_t padding[8]; }; struct RendererSectionData { - std::vector vertices; + std::vector vertices; size_t hash = 0; Vector sectionPos; - bool forced = false; + bool forced = false; }; RendererSectionData ParseSection(const SectionsData §ions); \ No newline at end of file diff --git a/src/RendererWorld.cpp b/src/RendererWorld.cpp index 561578f..9055729 100644 --- a/src/RendererWorld.cpp +++ b/src/RendererWorld.cpp @@ -449,12 +449,13 @@ void RendererWorld::PrepareRender(std::shared_ptr target) { sectionsPLC->SetPrimitive(Gal::Primitive::TriangleFan); sectionsBufferBinding = sectionsPLC->BindVertexBuffer({ {"position", Gal::Type::Vec3, 4, 1}, + {"normal", Gal::Type::Vec3, 1, 1}, {"uv", Gal::Type::Vec2, 4, 1}, {"uvLayer", Gal::Type::Float, 1, 1}, {"animation", Gal::Type::Float, 1, 1}, {"color", Gal::Type::Vec3, 1, 1}, {"light", Gal::Type::Vec2, 1, 1}, - {"", Gal::Type::Uint8, 20, 1} + {"", Gal::Type::Uint8, 8, 1} }); sectionsPipeline = gal->BuildPipeline(sectionsPLC); sectionsPipeline->SetShaderParameter("MinLightLevel", 0.2f); -- cgit v1.2.3