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.0150 sec