게임엔진/크로스플랫폼 : HazelEngine

230512 자체 엔진 개발 : DrawRotated Quad

mrawesome 2023. 5. 31. 23:15

https://github.com/ohbumjun/GameEngineTutorial/commit/df6a2040d19c31bca017df9971f0ee6b272cb56e

 

feat(Enginne) Draw Rotated Quad · ohbumjun/GameEngineTutorial@df6a204

Show file tree Showing 5 changed files with 86 additions and 7 deletions.

github.com

 

사각형을 그릴 때 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 행렬도 같이 중간에 곱해줌으로써 사각형을 원하는 만큼 회전시켜서

그려낼 수 있게 되는 것이다.