게임엔진/크로스플랫폼 : HazelEngine
230512 자체 엔진 개발 : DrawRotated Quad
mrawesome
2023. 5. 31. 23:15
https://github.com/ohbumjun/GameEngineTutorial/commit/df6a2040d19c31bca017df9971f0ee6b272cb56e
사각형을 그릴 때 rotation 도 적용하고자 한다.
이를 위해서는 각 사각형의 transform 관련 uniform variable 을 계산할 때
rotation 도 반영해서 계산해주면 된다.
void Renderer2D::DrawRotatedQuad(const glm::vec3& pos, const glm::vec2& size, float rotation, const glm::vec4& color)
{
HZ_PROFILE_FUNCTION();
// 혹시나 문제 생기면, 여기에 Shader 한번 더 bind
s_Data.TextureShader->SetFloat4("u_Color", color);
s_Data.TextureShader->SetFloat("m_TilingFactor", 1.0f);
// Bind Default White Texture
s_Data.WhiteTexture->Bind();
// x,y 축 기준으로만 scale 을 조정할 것이다.
glm::mat4 scale = glm::scale(glm::mat4(1.f), { size.x, size.y, 1.0f });
glm::mat4 transform = glm::translate(glm::mat4(1.0f), pos)
// 2D renderer 이므로 z 축 회전을 적용한다.
* glm::rotate(glm::mat4(1.f), rotation, {0.f, 0.f, 1.f})
* scale;
s_Data.TextureShader->SetMat4("u_Transform", transform);
// actual draw call
s_Data.QuadVertexArray->Bind();
RenderCommand::DrawIndexed(s_Data.QuadVertexArray);
}
위와 같이 transform 이라는 matrix 를 계산할 때
rotation 행렬도 같이 중간에 곱해줌으로써 사각형을 원하는 만큼 회전시켜서
그려낼 수 있게 되는 것이다.