From e5603c51119d0022fb055c42a248057b62400377 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Tue, 1 Aug 2023 18:50:04 -0400 Subject: [PATCH] Added sprite mesh --- Nuake/src/Rendering/SceneRenderer.cpp | 13 +++++++----- .../src/Scene/Components/SpriteComponent.cpp | 21 +++++++++++++++++-- Nuake/src/Scene/Components/SpriteComponent.h | 3 ++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 05f0b606..17468d53 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -258,27 +258,30 @@ namespace Nuake { auto [transform, sprite, visibility] = spriteView.get(e); - if (!visibility.Visible) + if (!visibility.Visible || !sprite.SpriteMesh) continue; - auto finalQuadTransform = transform.GetGlobalTransform(); + auto& finalQuadTransform = transform.GetGlobalTransform(); if (sprite.Billboard) { - Matrix4 finalMatrix; finalQuadTransform = glm::inverse(mView); if (sprite.LockYRotation) { + // This locks the pitch rotation on the billboard, useful for trees, lamps, etc. finalQuadTransform[1] = Vector4(0, 1, 0, 0); finalQuadTransform[2] = Vector4(finalQuadTransform[2][0], 0, finalQuadTransform[2][2], 0); finalQuadTransform = finalQuadTransform; - //finalQuadTransform[1] = Vector4(0, 1, 0, 1); } + // Translation finalQuadTransform[3] = Vector4(transform.GetGlobalPosition(), 1.0f); + + // Scale + finalQuadTransform = glm::scale(finalQuadTransform, transform.GetGlobalScale()); } - Renderer::SubmitMesh(Renderer::QuadMesh, finalQuadTransform, (uint32_t)e); + Renderer::SubmitMesh(sprite.SpriteMesh, finalQuadTransform, (uint32_t)e); } Renderer::Flush(gBufferShader, false); } diff --git a/Nuake/src/Scene/Components/SpriteComponent.cpp b/Nuake/src/Scene/Components/SpriteComponent.cpp index 414d99d3..db0fdad0 100644 --- a/Nuake/src/Scene/Components/SpriteComponent.cpp +++ b/Nuake/src/Scene/Components/SpriteComponent.cpp @@ -1,6 +1,9 @@ #include "SpriteComponent.h" +#include "src/Core/FileSystem.h" #include "src/Rendering/Textures/TextureManager.h" +#include "src/Rendering/Textures/MaterialManager.h" +#include "src/Rendering/Vertex.h" namespace Nuake { @@ -14,8 +17,22 @@ namespace Nuake bool SpriteComponent::LoadSprite() { - const auto texture = TextureManager::Get()->GetTexture(SpritePath); - Sprite = texture; + std::vector quadVertices = + { + { Vector3(-1.0f, -1.0f, 0.0f), Vector2(0, 0), Vector3(0, 0, -1) }, + { Vector3(1.0f, 1.0f, 0.0f), Vector2(1.0f, 1.0f), Vector3(0, 0, -1) }, + { Vector3(-1.0f, 1.0f, 0.0f), Vector2(0.0f, 1.0f), Vector3(0, 0, -1) }, + { Vector3(1.0f, -1.0f, 0.0f), Vector2(1.0f, 0.0f), Vector3(0, 0, -1) }, + { Vector3(-1.0f, -1.0f, 0.0f), Vector2(0.0f, 0.0f), Vector3(0, 0, -1) }, + { Vector3(1.0f, 1.0f, 0.0f), Vector2(1.0f, 1.0f), Vector3(0, 0, -1) } + }; + + SpriteMesh = CreateRef(); + SpriteMesh->AddSurface(quadVertices, { 0, 1, 2, 3, 4, 5 }); + + auto& material = MaterialManager::Get()->GetMaterial(FileSystem::Root + SpritePath); + SpriteMesh->SetMaterial(material); + return true; } diff --git a/Nuake/src/Scene/Components/SpriteComponent.h b/Nuake/src/Scene/Components/SpriteComponent.h index 97761f76..465abd3e 100644 --- a/Nuake/src/Scene/Components/SpriteComponent.h +++ b/Nuake/src/Scene/Components/SpriteComponent.h @@ -2,6 +2,7 @@ #include "src/Core/Core.h" #include "src/Resource/Serializable.h" #include "src/Rendering/Textures/Texture.h" +#include "src/Rendering/Mesh/Mesh.h" namespace Nuake { @@ -11,7 +12,7 @@ namespace Nuake bool Billboard; bool LockYRotation; std::string SpritePath; - Ref Sprite; + Ref SpriteMesh; SpriteComponent();