Added sprite mesh

This commit is contained in:
Antoine Pilote
2023-08-01 18:50:04 -04:00
parent b69d71d0eb
commit e5603c5111
3 changed files with 29 additions and 8 deletions

View File

@@ -258,27 +258,30 @@ namespace Nuake
{
auto [transform, sprite, visibility] = spriteView.get<TransformComponent, SpriteComponent, VisibilityComponent>(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);
}

View File

@@ -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<Vertex> 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<Mesh>();
SpriteMesh->AddSurface(quadVertices, { 0, 1, 2, 3, 4, 5 });
auto& material = MaterialManager::Get()->GetMaterial(FileSystem::Root + SpritePath);
SpriteMesh->SetMaterial(material);
return true;
}

View File

@@ -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<Texture> Sprite;
Ref<Mesh> SpriteMesh;
SpriteComponent();