1 ID3DXSprite 란? #
d3d 내에서 2D를 표현하기 위한 인터페이스2 ID3DXSprite 의 사용법 #
Begin | 스프라이트를 드로잉(Drawing) 할 수 있도록(듯이) 장치를 준비한다. | |
Draw | 스크린 공간에 단순한 스프라이트를 드로잉(Drawing) 한다. | |
DrawTransform | 지정한 행렬에 의해 변환 한 스프라이트를 드로잉(Drawing)하기 위한 구조를 제공한다. | |
End | ID3DXSprite::Begin 가 불려 간 시점의 장치 스테이트를 복원한다. | |
GetDevice | 스프라이트 개체에 관련지을 수 있는 Direct3D 장치를 얻어온다. | |
OnLostDevice | 비디오 메모리 리소스에의 참조를 모두 릴리즈 해, 모든 스테이트 블록을 삭제한다. | |
OnResetDevice | 장치가 리셋 된 후에 호출할 필요가 있다.| |
위의 표는 다이렉트X 헬프에 있는 내용이다. 사용법을 간단히 말하면 IDirect3DDevice9::BeginScene 과 IDirect3DDevice9::EndScene 사이에 ID3DXSprite::Begin 과 ID3DXSprite::End 를 호출하고 그 사이에 그리면 된다.
IDirect3DDevice9::BeginScene
ID3DXSprite::Begin<< 여기다가 그리는걸 호출 >>>
ID3DXSprite::End
IDirect3DDevice9::EndScene
코드가 대충 이런 형태가 된다. 그릴때는 Draw 메소드를 호출해서 사용하는데
HRESULT Draw(LPDIRECT3DTEXTURE9 pSrcTexture,
CONST RECT *pSrcRect,
CONST D3DXVECTOR2 *pScaling,
CONST D3DXVECTOR2 *pRotationCenter,
FLOAT Rotation,
CONST D3DVECTOR2 *pTranslation,
D3DCOLOR Color
);
드로우 함수의 인자들 설명을 하자면
- 첫번째 인자는 스프라이트에 사용할 텍스쳐이다. 스프라이트는 2D 게임프로그래밍을 해본사람이라면 느낌일 팍 올테니…
- 두번째 RECT 구조체의 인자는 덱스쳐중에 어느 부분을 사용할것이가를 의미한다.
- 세번째 D3DXVECTOR2 는 스케일링 인자라고하는데 x, y가 각각 가로 세로로 얼마나 늘려서 아니면 줄여서 사용할 것인지를 나타낸다. 뭐 기본값은 1.0f , 1.0f 다. 두배로 늘릴려면 2.0f, 2.0f 로 쓸수 있다. 음 RECT로 한픽셀 범위만 잡은뒤 가로 세로로 늘려서 원하는 길이의 선분을 얻을수도 있다. 뭐 대충 그런식…
- 네번째 D3DXVECTOR2 는 회전중심이라고 하는데 아직 사용해보지는 않아서 모르겠지만 다섯번째 인자로 회전을 할때 어디를 중심으로 할것인가를 나타낸다. 기본값은 0.0f, 0.0f 이다.
- 다섯번째 FLOAT 는 회전값인데.. 1.0f 를 넣어주니 90도가 회전했다. 음 정확한건 모르겠다.
- 여섯번째 D3DCOLOR 은 값에 의해 컬러 채널과 알파 채널이 곱셈된다 라고 써있다.. 그냥 0xFFFFFFFF 를 넣어주면 원래 이미지 그래도 찍힌다. 흐음 마스킹값을 넣어주는 건가?
그리고 당연한 소리같지만 스프라이트 역시 순서에 따러 덥힌다. 즉 스프라이트를 찍고 오브젝트를 렌더링 하면 오브젝트에 가려 스프라이트가 안보일수고 있다는 것이다. 스프라이트도 D3D에서는 프리미티브로 처리할줄 알았는데… 조금 다른가보다.
위의 이미지에서 우측상단에 그려진 격자모양의 미니맵이 스프라이트를 이용해서 구현되었다.