U E D R , A S I H C RSS

2d In Direct3d/Chapter2

Creating a Device

์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ ํ•  ์ผ์€
  • IDirect3dDevice8 ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
  • Viewport๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Viewport๋ฅผ ํด๋ฆฌ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ํ™”๋ฉด์„ Presentํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋‹ค๋ฅธ(์ž˜๋ชป๋œ) Present ํŒŒ๋ผ๋ฉ”ํ„ฐ๋“ค์„ ๋ฆฌ์…‹ํ•˜๋Š” ๋ฐฉ๋ฒ•

IDirect3DDevice ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

์ด ๊ฐ์ฒด๋Š” IDirect3D ๊ฐ์ฒด์™€๋Š” ๋‹ฌ๋ฆฌ ์‹ค์งˆ์ ์ผ ์ผ์„ ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. IDirect3D ๊ฐ์ฒด๋Š” ์ด๊ฒƒ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค.
~cpp 
HRESULT IDirect3D8::CreateDevice(
	UINT Adapter, // ์–ด๋Œ‘ํ„ฐ์˜ ๋ฒˆํ˜ธ, D3DADAPTER_DEFAULT๋ฅผ ์‚ฌ์šฉ
	D3DDEVTYPE DeviceType, //๋””๋ฐ”์ด์Šค์˜ ํƒ€์ž„, D3DDEVTYPE_HAL์„ ์‚ฌ์šฉ
	HWND hFocusWindow, // ํ˜„์žฌ ์ฐฝ์˜ HWND๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
	DWORD BehaviorFlag,
	D3DPRESENT_PARAMETERS* pPresentationParameters,
	IDirect3DDevice8** ppReturnedDeviceInterface
);
 
  • ๊ฒฐ๊ณผ๋Š” ์—ญ์‹œ ์„ฑ๊ณตํ•˜๋ฉด D3D_OK๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • BehaviorFlag์—๋Š” ๋ฒ„ํ…์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋„ฃ์–ด์ค€๋‹ค. D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, D3DCREATE_SOFTWARE_VERTEXPROCESSING์ค‘ ํ•œ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (์‚ฌ์‹ค์€ ๋” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ๋‹ค.) ๋Œ€๊ฐœ ๋งˆ์ง€๋ง‰ SOFTWARE๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • pPresentationParameters๋Š” D3DPRESENT_PARAMERTERS์˜ ํฌ์ธํ„ฐํ˜•์ด๋‹ค. ์ €๊ฒƒ์€ Device์˜ ํ˜•ํƒœ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์กฐ์ฒด์ด๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ธ์ž๋กœ๋Š” ์ƒ์„ฑ๋  ๋””๋ฐ”์ด์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
  • ๋‹ค ์‚ฌ์šฉํ•œ ์ดํ›„๋Š” ๊ผญ!! Release()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์„ ํ•ด์ œ์‹œํ‚จ๋‹ค.

  • == Viewport์˜ ์„ธํŒ… =
    ๋ทฐํฌํŠธ๋Š” ์‹ค์ œ์ ์œผ๋กœ ๋ Œ๋”๋ง์„ ํ•˜๋Š” ์ง€์—ญ์ด๋‹ค. ๋ทฐํฌํŠธ๊ฐ€ ์—†์ด๋Š” ๋””๋ฐ”์ด์Šค๋Š” ์–ด๋””์— ๋ Œ๋”๋ง์„ ํ• ์ง€ ๋ชจ๋ฅธ๋‹ค.
    ~cpp 
    HRESULT IDirect3DDevice8::SetViewport(
    	CONST D3DVIEWPORT8* pViewport
    );
     
  • ๊ฒฐ๊ณผ๋Š” ์„ฑ๊ณตํ•˜๋ฉด D3D_OK๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • D3DVIEWPORT8 ๊ฐ์ฒด๋Š” ๋ฉค๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    ~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์˜ ํด๋ฆฌ์–ด

    ๋ฐฑ๋ฒ„ํผ๋ฅผ ์‹น ์ง€์šฐ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณด์ž
    ~cpp 
    HRESULT IDirect3DDevice::Clear(
    	DWROD count,
    	CONST D3DRECT* pRects,
    	DWORD Flags,
    	D3DCOLOR Color,
    	float Z,
    	DWORD Stencil
    );
     
  • ์„ฑ๊ณตํ•˜๋ฉด D3D_OK๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.
  • ์•ž์ชฝ์˜ ๋‘ ๋ณ€์ˆ˜๋Š” ํ•จ๊ป˜ ์›€์ง์ธ๋‹ค. count์—๋Š” 0์„ ๋„ฃ์œผ๋ฉด ๋˜๊ณ  pRect๋Š” NULL์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. count๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด pRect์—๋Š” count์˜ ๊ฐœ์ˆ˜๋งŒํผ D3DRECT์˜ ๋ฐฐ์—ด์ด ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ Rect๋ถ€๋ถ„๋งŒ ํด๋ฆฌ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • D3DCLEAR_STENCIL, D3DCLEAR_TARGET, D3DCLEAR_ZBUFFER ์„ธ๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ณดํ†ต D3DCLEAR_TARGET๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋„ค๋ฒˆ์งธ์ธ์ž์—๋Š” ์ƒ‰์„ ์ง€์ •ํ•œ๋‹ค.
  • Z์™€ Stencil์€ 12์žฅ์—์„œ.. ( ๊ทธ๋ƒฅ 0์„ ๋„ฃ์ž ์ง€๊ธˆ์€..)

  • Present The Scene

    ๋ฐฑ๋ฒ„ํผ์— ๊ทธ๋ฆผ์ด ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ํด๋ฆฌ์–ด ํ•œ ๊ฒฝ์šฐ์—” ๊ทธ๊ฒƒ์„ ์•ž์œผ๋กœ ๋Œ๊ณ ๋‚˜์™€์•ผ ํ•œ๋‹ค. ๊ทธ๊ฒƒ์„ ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ Presentํ•จ์ˆ˜์ด๋‹ค.
    ~cpp 
    HRESULT IDirect3DDevice8::Present(
    	CONST RECT* pSourceRect,
    	CONST RECT* pDestRect,
    	HWND hDestWindowOverride,
    	CONST RGNDATA* pDirtyRegion
    )
     
  • ๊ฒฐ๊ณผ๊ฐ’์€ D3D_OK, ์‹คํŒจํ–ˆ์„๊ฒฝ์šฐ์—” D3D_INVALIDCALL์ด๋‚˜ D3D_DEVICELOST๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.
  • ๋„ค ์ธ์ž ๋ชจ๋‘ NULL์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. (ํ”„๋ ˆ์  ํŠธ๋Š” ํ•œ ํ™”๋ฉด๋‹จ์œ„๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)

  • Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2021-02-07 05:22:14
    Processing time 0.0057 sec