74 lines
1.9 KiB
C++
74 lines
1.9 KiB
C++
#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> 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<Texture> 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);
|
||
}
|
||
}
|