Creating a Device ¶
์ด๋ฒ ์ฑํฐ์์ ํ ์ผ์
- IDirect3dDevice8 ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
- Viewport๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Viewport๋ฅผ ํด๋ฆฌ์ดํ๋ ๋ฐฉ๋ฒ
- ํ๋ฉด์ Presentํ๋ ๋ฐฉ๋ฒ
- ๋ค๋ฅธ(์๋ชป๋) Present ํ๋ผ๋ฉํฐ๋ค์ ๋ฆฌ์
ํ๋ ๋ฐฉ๋ฒ
IDirect3DDevice ๊ฐ์ฒด๋ฅผ ์์ฑ ¶
์ด ๊ฐ์ฒด๋ IDirect3D ๊ฐ์ฒด์๋ ๋ฌ๋ฆฌ ์ค์ง์ ์ผ ์ผ์ ํ๋ ๊ฐ์ฒด์ด๋ค. ์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค. IDirect3D ๊ฐ์ฒด๋ ์ด๊ฒ์ ์์ฑํ๊ธฐ ์ํด ์กด์ฌํ๋ค๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋ค.
๊ฒฐ๊ณผ๋ ์ญ์ ์ฑ๊ณตํ๋ฉด D3D_OK๋ฅผ ๋ฆฌํดํ๋ค.
BehaviorFlag์๋ ๋ฒํ
์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฃ์ด์ค๋ค. D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, D3DCREATE_SOFTWARE_VERTEXPROCESSING์ค ํ๊ฐ์ง๋ฅผ ์ฌ์ฉํ๋ค. (์ฌ์ค์ ๋ ๋ง์ ์ต์
์ด ์๋ค.) ๋๊ฐ ๋ง์ง๋ง SOFTWARE๋ฅผ ์ฌ์ฉํ๋ค.
pPresentationParameters๋ D3DPRESENT_PARAMERTERS์ ํฌ์ธํฐํ์ด๋ค. ์ ๊ฒ์ Device์ ํํ๋ฅผ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ์ฒด์ด๋ค.
๋ง์ง๋ง ์ธ์๋ก๋ ์์ฑ๋ ๋๋ฐ์ด์ค์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ค๋ค.
๋ค ์ฌ์ฉํ ์ดํ๋ ๊ผญ!! Release()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ํด์ ์ํจ๋ค.
== Viewport์ ์ธํ =
๋ทฐํฌํธ๋ ์ค์ ์ ์ผ๋ก ๋ ๋๋ง์ ํ๋ ์ง์ญ์ด๋ค. ๋ทฐํฌํธ๊ฐ ์์ด๋ ๋๋ฐ์ด์ค๋ ์ด๋์ ๋ ๋๋ง์ ํ ์ง ๋ชจ๋ฅธ๋ค.
๊ฒฐ๊ณผ๋ ์ฑ๊ณตํ๋ฉด D3D_OK๋ฅผ ๋ฆฌํดํ๋ค.
D3DVIEWPORT8 ๊ฐ์ฒด๋ ๋ฉค๋ฒ๋ ๋ค์๊ณผ ๊ฐ๋ค.
~cpp HRESULT IDirect3D8::CreateDevice( UINT Adapter, // ์ด๋ํฐ์ ๋ฒํธ, D3DADAPTER_DEFAULT๋ฅผ ์ฌ์ฉ D3DDEVTYPE DeviceType, //๋๋ฐ์ด์ค์ ํ์, D3DDEVTYPE_HAL์ ์ฌ์ฉ HWND hFocusWindow, // ํ์ฌ ์ฐฝ์ HWND๋ฅผ ๋ฃ์ด์ค๋ค. DWORD BehaviorFlag, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DDevice8** ppReturnedDeviceInterface );
== Viewport์ ์ธํ =
๋ทฐํฌํธ๋ ์ค์ ์ ์ผ๋ก ๋ ๋๋ง์ ํ๋ ์ง์ญ์ด๋ค. ๋ทฐํฌํธ๊ฐ ์์ด๋ ๋๋ฐ์ด์ค๋ ์ด๋์ ๋ ๋๋ง์ ํ ์ง ๋ชจ๋ฅธ๋ค.
~cpp HRESULT IDirect3DDevice8::SetViewport( CONST D3DVIEWPORT8* pViewport );
~cpp X = 0: ์ขํ๊ณ์ ์ผ์ชฝ Y = 0: ์ขํ๊ฒ์ ์ค๋ฅธ์ชฝ ํฝ์ Width = 800: (๋๊ฐ ํ๋ฉด์)๋์ด Height = 600: (๋๊ฐ ํ๋ฉด์) ๋์ด MinZ = 0.0f : Z์ ์ต์๊ฐ. ๋๊ฐ 0.0f MaxZ = 1.0f : Z์ ์ต๋๊ฐ, ๋๊ฐ 1.0f
Direct3D์์ ์ฌ์ฉํ๋ ์์ ¶
Direct3D์์ ์ฌ์ฉํ๋ ์์์ D3DCOLOR ์ด๋ค. (3D์์๋ COLORREF์๋ค.) ์ ๊ฒ์ ์ ์ํ๋ ๋งคํฌ๋ก์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ๊ฐ์ง๊ฐ ์๋ค.
~cpp RGB(r, g, b); // ๋ณดํต ์ฌ์ฉํ๋ ์์ ๋งคํฌ๋ก D3DCOLOR_ARGB(a, r, g, b); // ๋งจ ์์ ์ํ๊ฐ์ด ๋ค์ด๊ฐ๋ค. D3DCOLOR_RGBA(r, g, b, a); // ๋งจ ๋ค์ ์ํ๊ฐ์ด ๋ค์ด๊ฐ๋ค. D3DCOLOR_XRGB(r, g, b); // ๋ณดํต ์ฌ์ฉํ๋ ๋งคํฌ๋ก์ ์ฌ์ฉ๋ฒ์ด ๊ฐ๋ค. ์ด๋ a ๊ฐ์ 0์ด ์๋ 255(์ต๋๊ฐ)์ด ๋ค์ด๊ฐ๋ค.
Viewport์ ํด๋ฆฌ์ด ¶
๋ฐฑ๋ฒํผ๋ฅผ ์น ์ง์ฐ๋ ํจ์๋ฅผ ๋ณด์
์ฑ๊ณตํ๋ฉด D3D_OK๊ฐ ๋ฆฌํด๋๋ค.
์์ชฝ์ ๋ ๋ณ์๋ ํจ๊ป ์์ง์ธ๋ค. count์๋ 0์ ๋ฃ์ผ๋ฉด ๋๊ณ pRect๋ NULL์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. count๊ฐ 0์ด ์๋๋ผ๋ฉด pRect์๋ count์ ๊ฐ์๋งํผ D3DRECT์ ๋ฐฐ์ด์ด ๋ค์ด๊ฐ๋ค. ๊ทธ Rect๋ถ๋ถ๋ง ํด๋ฆฌ์ดํ ์ ์๋ค.
D3DCLEAR_STENCIL, D3DCLEAR_TARGET, D3DCLEAR_ZBUFFER ์ธ๊ฐ๊ฐ ์๋๋ฐ, ๋ณดํต D3DCLEAR_TARGET๋ฅผ ์ฌ์ฉํ๋ค.
๋ค๋ฒ์งธ์ธ์์๋ ์์ ์ง์ ํ๋ค.
Z์ Stencil์ 12์ฅ์์.. ( ๊ทธ๋ฅ 0์ ๋ฃ์ ์ง๊ธ์..)
~cpp HRESULT IDirect3DDevice::Clear( DWROD count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil );
Present The Scene ¶
๋ฐฑ๋ฒํผ์ ๊ทธ๋ฆผ์ด ๋ค์ด์ค๊ฑฐ๋ ํด๋ฆฌ์ด ํ ๊ฒฝ์ฐ์ ๊ทธ๊ฒ์ ์์ผ๋ก ๋๊ณ ๋์์ผ ํ๋ค. ๊ทธ๊ฒ์ ํ๋ ํจ์๊ฐ Presentํจ์์ด๋ค.
๊ฒฐ๊ณผ๊ฐ์ D3D_OK, ์คํจํ์๊ฒฝ์ฐ์ D3D_INVALIDCALL์ด๋ D3D_DEVICELOST๊ฐ ๋ฆฌํด๋๋ค.
๋ค ์ธ์ ๋ชจ๋ NULL์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. (ํ๋ ์ ํธ๋ ํ ํ๋ฉด๋จ์๋ก ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค.)
~cpp HRESULT IDirect3DDevice8::Present( CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion )