어제 GameApp을 만들어서 게임엔진의 제일 기초를 다져보는 시간을 가져봤는데,
분리해낸 D2DRenderer에서 브러쉬를 이용해 그림을 그리면서,
거기에 비트맵도 출력하는것이 렌더러의 볼륨감이 커지는 일인 것 같아 비트맵을 관리하는 클래스를 따로 생성해주기로 했다.
아 이미지가 좀 많이 하찮아진거 같지만 기분탓인가보다 하고 넘어가면 된다.
크게 리소스매니저로 개념을 잡긴했지만 세부적으로 리소스 중에서도 이미지, 애니메이션만 일단 다룰 예정이라, 클래스 이름을 이미지매니저로 명명했다.
랜더러에서 따로 빼낸 비트맵을 다루는 클래스의 생성자로 비트맵의 정보가 이미지매니저에 로드되는 형태로 만들었다.
로드한 이미지를 불러내기 위해 unordered_map<> 을 사용했다.
void D2DRenderer::BitmapDraw(const std::wstring& filePath,int posx, int posy,int width,int height)
{
ImageManager* mgr = ImageManager::GetInstance();
D2D1_RECT_F SIZE = { posx,posy,posx + width,posy + height };
m_RenderTarget->DrawBitmap(mgr->GetBitmap(filePath)->Get(), SIZE);
}
GetBitmap이 호출하는 것은 AddBitmap으로 미리 저장해둔 이미지를 map에서 부르고, 그 이미지정보를 저장한 ID2D1Bitmap* 을 Get()하여 그리기를 완료한다.
D2DBitmap* ImageManager::GetBitmap(const std::wstring& filePath)
{
auto iter = m_BitmapMap.find(filePath);
if (iter == m_BitmapMap.end())return nullptr;
return iter->second;
}
그리고 이제 젤중요한 써먹기...는!
#include "../Engine/framework.h"
#include "../Engine/D2DRenderer.h"
#include "../Engine/ImageManager.h"
//#include "../Engine/framework.h"
#include "DemoApp.h"
void DemoApp::Initialize(HINSTANCE _hInstance)
{
__super::Initialize(_hInstance);
ImageManager::GetInstance()->AddBitmap(L"../Image/duck.png");
}
void DemoApp::Run()
{
__super::Run();
}
void DemoApp::Update()
{
__super::Update();
}
void DemoApp::Render()
{
D2DRenderer::GetInstance()->BeginDraw();
D2DRenderer::GetInstance()->BitmapDraw(L"../Image/duck.png",200,300,300,300);
D2DRenderer::GetInstance()->EndDraw();
}
void DemoApp::Uninitialize()
{
__super::Uninitialize();
}
요로코롬 하면 된다.
짜잔~ 완저니 귀여움~ 정성들여서 뒤가 투명인 이미지를 쓰면 이렇게나 이뿌다.
배경색은 화면 초기화할때 랜더타겟->Clear(D2D1::ColorF(D2D1::ColorF::LavenderBlush)) 이거 한거다.
'D2D와 게임엔진' 카테고리의 다른 글
[D2D 게임만들기 2] - 라이브러리 (수정필요) (0) | 2025.03.27 |
---|---|
[D2D 게임만들기 1] WinAPI 알아보기 (0) | 2025.03.26 |
엔진공부 2일차 ( Static Library 만들기 ... feat. 윈도우 생성오류) (0) | 2024.08.07 |
Direct2D 기본 사용법 3 (이미지 출력) (1) | 2024.08.05 |
Direct2D 기본 사용법 2 (텍스트 출력) (0) | 2024.08.05 |