0512

2025년 5월 12일

카테고리: 게임엔진


9512.gif

(이 또한, 영상을 나중에 찍은 거여서 판넬이 구현되어 있다.

위 gif의 핵심은 판넬이 아니라, 크기가 변할 때 각 모드별로 텍스쳐가 어떻게 그려지는지 이다.)


GUI 열거형 목록에

TextureRectScaleMode 를 추가하고,

TextureRect 클래스에다가 이를 적용해보았다.

기본적으로 Fill, Keep, Retain 이렇게 3개가 있다.

Fill 은 텍스쳐의 크기를 무시하고, TR 의 크기에 맞추어 꽉 채워 렌더링한다.

Keep은 텍스쳐의 종횡비를 유지하여 TR 크기 안에 쏙 들어가도록 렌더링한다.

Retain은 텍스쳐의 원본 크기를 유지하여, TR 을 벗어나는 건 클리핑해서 그린다.

이때, Retain 모드일 경우

h / v 정렬이 필요하다 생각해서

다음 기능들을 추가했다.

public:
    virtual void set_scale_mode(const TextureRectScaleMode& mode) { m_scale_mode = mode; }
public:
    // ScaleMode에 따라서 실질적으로 그려진 rect반환
    Rect get_actual_rect() const;
public:
    virtual void set_texture(const bcknd::ITexture2D* tex) { m_texture = tex; }
    virtual void set_modulate(const Color4f& value) { m_modulate = value; }
    virtual void set_retain_mode_h_align(const HAlign& align) { m_retain_mode_h_align = align; }
    virtual void set_retain_mode_v_align(const VAlign& align) { m_retain_mode_v_align = align; }
    virtual void set_y_flipped(const bool& value) { m_y_flipped = value; }

set_retain_mode_h_align / set_retain_mode_v_align 으로 리테인 모드 정렬하고,

get_actual_rect 로 '실질적으로' 그려진 rect를 알 수 있다.