#include "Sprite.h" #include "EngineCore/Game.h" #include "Text.h" #include "EngineFrame/Render/RenderManager.h" void Sprite::GenerateRenderMatrix() const { Matrix3x2 RenderBuffer = Matrix3x2::Translation(glm::vec2(m_texture->getPos().x, m_texture->getPos().y)) * GetTransformMatrix(); // 构造OpenGl渲染矩阵 render_matrix_ = glm::mat4(1.0f); // 填充旋转+缩放分量(2D 变换核心,对应 4x4 矩阵左上 2x2 区域) render_matrix_[0][0] = RenderBuffer[0]; // _11 → x轴缩放+旋转 render_matrix_[0][1] = RenderBuffer[1]; // _12 → 影响y轴方向的旋转分量 render_matrix_[1][0] = RenderBuffer[2]; // _21 → 影响x轴方向的旋转分量 render_matrix_[1][1] = RenderBuffer[3]; // _22 → y轴缩放+旋转 // 填充平移分量(对应 4x4 矩阵最后一行前两列,z轴平移为0) render_matrix_[3][0] = RenderBuffer[4]; // _31 → x方向平移(世界坐标) render_matrix_[3][1] = RenderBuffer[5]; // _32 → y方向平移(世界坐标) } void Sprite::Init() { SetSize(m_texture->getSize()); } void Sprite::SetTexture(RefPtr texture) { m_texture = texture; Init(); } Sprite::Sprite(std::string imgPath, int Index) { this->imgPath = imgPath; this->Index = Index; m_texture = new Texture(); m_texture->Init(imgPath, Index); Init(); } Sprite::Sprite(std::string PngPath) { m_texture = new Texture(); m_texture->Init(PngPath); Init(); } Sprite::~Sprite() { } RefPtr Sprite::GetTexture() { return m_texture; } void Sprite::OnRender() { if (!m_texture || !IsVisible()) return; RenderManager *renderer = Game::GetInstance().GetRenderer(); if (this->_BlendMode != NONE) { renderer->SetBlendMode(this->_BlendMode); } renderer->DrawTexture(m_texture); if (this->_BlendMode != NONE) { renderer->SetBlendMode(NONE); } }