E D R , A S I H C RSS

Direct Draw


1. ๊ฐœ๊ด€

DirectX 8.1์„ ์ด์šฉํ•œ DirectDraw๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž.

11๊ธฐ ์ด์„ ํ˜ธ ์ž…๋‹ˆ๋‹ค.

๊ทนํžˆ ๊ฐœ์ธ์ ์ธ ๋ฌธ์„œ๊ฐ€ ๋ ๊ฒƒ ๊ฐ™๋„ค์š”.

DeleteMe ๋‚˜๋„ ๊ปด์ค˜~~~ - ์ธ์ˆ˜

2. DirectX 8.1 SDK

๊นŒ๋Š”๋ฐ ์–ด๋ ค์›€์ด ์กฐ๊ธˆ ์žˆ์—ˆ๋‹ค. ์„ค์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—.

Visual C++ -> Tools -> Options -> Directories์—์„œ

Include Files ์—๋Š” C:\DXSDK\INCLUDE๋ฅผ

Library Files ์—๋Š” C:\DXSDK\LIB๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Project Setting -> Link -> Object/Library modules์—๋Š”
ddraw.lib์™€ dxguid.lib๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์†Œ์ŠคํŒŒ์ผ์˜ ์•ž๋ถ€๋ถ„์—
#include <ddraw.h>
๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

3. DirectDraw์˜ ๊ณผ์ •(?)

์†Œ์Šค๋ฅผ ์ณ๋ณด๋ฉด์„œ ๋А๋‚€ ์ ์ด๋‹ค

DirectDraw๊ฐ์ฒด์˜ ์ƒ์„ฑ -> ํ‘œ๋ฉด์˜ ์ƒ์„ฑ(Front, Back, OffScreen) -> ๊ทธ๋ฆฌ๊ณ .. ํ‘œ๋ฉด ๋’ค์ง‘๊ธฐ..

์ค‘๊ฐ„์ค‘๊ฐ„ ๋” ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

4. Source

4.1. ์ดˆ๊ธฐํ™”

4.1.1. DirectDraw๊ฐ์ฒด์˜ ์ƒ์„ฑ

~cpp 
HRESULT hr
LPDIRECTDRAW7 lpDD;
hr = DirectDrawCreateEx(NULL, (void **)&lpDD, IID_IDirectDraw7, NULL); // DirectDraw๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
if(hr != DD_OK) return 0;
hr = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN); // ํ™”๋ฉด์˜ ๋ ˆ๋ฒจ์„ ์„ค์ •
if(hr != DD_OK) return 0;
hr = lpDD->SetDisplayMode(640, 480, 8, 0, 0);
if(hr != DD_OK) return 0;
  1. SetCooperativeLevel์˜ ์ธ์ž.
    • DDSCL_ALLOWMODEX : ModeX๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค๋Š”๋ฐ. ์•Œ์ˆ˜ ์—†๋‹ค.(์˜ˆ์ „์— ์“ฐ๋˜ ํ™”๋ฉด ๋ชจ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.)
    • DDSCL_ALLOWREBOOT : Ctrl+Alt+Del์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ
    • DDSCL_EXCLUSIVE : ๋…์  ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ, DDSCL_FULLSCREEN ๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.
    • DDSCL_FULLSCREEN : ํ’€์Šคํฌ๋ฆฐ ๋ชจ๋“œ
    • DDSCL_NORMAL : ๋ณดํ†ต์˜ ์œˆ๋„์šฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜
    • DDSCL_NOWINDOWCHANGES : ์ตœ์†Œํ™”/์ตœ๋Œ€ํ™”๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. SetDisplayMode์˜ ์ธ์ž.
    • 640 : ๊ฐ€๋กœํ•ด์ƒ๋„
    • 480 : ์„ธ๋กœํ•ด์ƒ๋„
    • 8 : ์ƒ‰์ƒ (bit์ˆ˜, 8์€ 256์ปฌ๋Ÿฌ, 16์€ High์ปฌ๋Ÿฌ)
    • 0 : Refresh Rate, 0์€ ๋””๋ฐ”์ด์Šค ๊ธฐ๋ณธ๊ฐ’ (๋Œ€๊ฐœ 0์œผ๋กœ ๋†“๋Š”๋‹ค.)
    • 0 : ์•ˆ์จ์š”

4.1.2. DirectDraw Front ํ‘œ๋ฉด์˜ ์ƒ์„ฑ

~cpp 
LPDIRECTDRAWSURFACE7 lpDDSFront;
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd); // ํฌ๊ธฐ๋ฅผ ์ €์žฅ
ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT; // ๊ตฌ์กฐ์ฒด์™€ backbuffercount๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅ
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX; // 1์ฐจํ‘œ๋ฉด, ํ”Œ๋ฆฝ๊ฐ€๋Šฅ
ddsd.dwBackBufferCount = 1; // 2์ฐจํ‘œ๋ฉด์˜ ๊ฐœ์ˆ˜
hr = lpDD ->CreateSurface(&ddsd, &lpDDSFront, NULL); // ์ƒ์„ฑ!
if(hr != DD_OK) return 0;
  • ddsd์˜ ๋ณ€์ˆ˜๋“ค
    • dwSize : ddsd์˜ ํฌ๊ธฐ๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
    • dwFlags : ddsd์˜ ์„ฑ๊ฒฉ์— ๋Œ€ํ•ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
    • ddsCaps.dwCaps : ๋” ์ž์„ธํ•œ.. ์„ฑ๊ฒฉ..
    • ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ๋ณ€์ˆ˜๋“ค. : dwFlag์—์„œ ๊ฒฐ์ •ํ•ด์ค€ ์„ฑ๊ฒฉ๋“ค์˜ ๋ณ€์ˆ˜๋ฅผ ์ •ํ•ด์ค๋‹ˆ๋‹ค.

4.1.3. DirectDraw Back ํ‘œ๋ฉด์˜ ์ƒ์„ฑ

~cpp 
LPDIRECTDRAWSURFACE7 lpDDSBack;
DDSCAPS2 ddscaps;
ZeroMemory(&ddscaps, sizeof(ddscaps)); // ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ฐ€ํ™”
ddscaps.dwCaps = DDSCAPS_BACKBUFFER; // 2์ฐจํ‘œ๋ฉด
hr = lpDDSFront->GetAttachedSurface(&ddscaps, &lpDDSBack); // 1์ฐจํ‘œ๋ฉด๊ณผ ์ ‘ํ•ฉ(๊ฐ™์€ ์†์„ฑ์˜ ํ‘œ๋ฉด์„ ์ƒ์„ฑ)
if(hr != DD_OK) return 0;
lpDDSBack->AddRef();

4.1.4. DirectDraw OffScreen์˜ ์ƒ์„ฑ

~cpp 
LPDIRECTDRAWSURFACE7 lpDDSOff;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; // ๋†’์ด์™€ ๋„“์ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; // ์˜คํ”„์Šคํฌ๋ฆฐ์ž„์„ ํ‘œ์‹œ
ddsd.dwHeight = 16; // ๋†’์ด
ddsd.dwWidth = 16; // ๋„“์ด
hr = lpDD->CreateSurface(&ddsd, &lpDDSOff, NULL); // ํ‘œ๋ฉด ์ƒ์„ฑ!
if(hr != DD_OK) return 0;

4.2. BMP Resource๋ฅผ ํ™”๋ฉด์— ๋ฟŒ๋ ค๋ณด์ž!

์ผ๋‹จ HBITMAPํ˜•์˜ ๋น„ํŠธ๋งต์„ ์–ป์–ด์™€์•ผํ•œ๋‹ค.
~cpp 
HBITMAP hb;
hb = (HBITMAP) LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP), IMAGE_BITMAP, cxDesire, cyDesire, LR_CREATEDIBSECTION);
  1. ํ•ธ๋“ค์„ ์–ป์–ด์˜จ๋‹ค.
  2. ๋ฆฌ์†Œ์Šค์˜ ID๋ฅผ ํ˜•์— ๋งž๊ฒŒ ๊ณ ์ณ์ค€๋‹ค.
  3. BITMAP์€ IMAGE_BITMAP์„.
  4. ๊ฐ€๋กœ์˜ ๋„“์ด
  5. ์„ธ๋กœ์˜ ๋„“์ด
  6. ใ…ก.ใ…ก?
์ด๊ฑธ๋กœ BITMAPํ˜•์„ ์–ป๋Š”๋‹ค.
~cpp 
BITMAP bmp;
GetObject(hb, sizeof(bmp), &bmp);
bmp.bmWidth ์™€ bmp.bmHeight๋กœ ๋น„ํŠธ๋งต์˜ ํฌ๊ธฐ๋ฅผ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
~cpp 
LPDIRECTDRAWSURFACE7 lpDDS = NULL;
DDSURFACEDESC2 ddsd;
ddsd.dwSize = sizeof(ddsd);
lpDDS->GetSurfaceDesc(&ddsd);
HDC hDC;
HDC hImageDC;
lpDDS->GetDC(&hDC);
hDCImage = CreateCompatibleDC(NULL);
SelectObject(hImageDC, hBMP);
StreachBlt(~~);
lpDDS->ReleaseDC(hDC);
DeleteDC(hImageDC);
์ด๋Ÿฐ ๊ตฌ์กฐ์ด๋‹ค. imagedc์— ๋จผ์ € ๊ทธ๋ฆผ์„ ๋ฟŒ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ hdc์— ๊ทธ๋ฆฐ๋‹ค.

์ผ๋‹จ bmpํŒŒ์ผ์„ ์ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š”
  1. bmpํŒŒ์ผ์„ surface์— ์ฐ๋Š”๋‹ค. (์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ)
  2. Blt๋‚˜ Blifast๋ฅผ ํ†ตํ•ด์„œ BackSurface์— ์ฐ๋Š”๋‹ค.
  3. ๊ทธ๊ฒƒ์„ Flipํ•œ๋‹ค.
  4. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๊ฒƒ์ด FrontSurface์— ์ฐํ˜€์„œ ํ™”๋ฉด์— ๋ณด์ด๊ฒŒ ๋œ๋‹ค.
์†Œ์Šค๋ฅผ ๋ณด๊ณ  ๋‚ด๋ฆฐ ๊ฒฐ๋ก .

4.3. ๊ฒฐ๋ก 

์ด๋ก ๋งŒ ์ตํ˜€๋†“๊ณ .. sdk ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”..
ddutil.h ddutil.cpp dxutil.h dxutil.cpp ๋งŒ ์žˆ์œผ๋ฉด.. ๋น„ํŠธ๋งต์€ ๊ทธ๋ƒฅ ์ฐ์„ ์ˆ˜ ์žˆ๊ตฐ์š”..

ใ…ก.ใ…ก ๋ญ.. ๊ทธ ์†Œ์Šค๋ฅผ ๋œฏ์–ด ๊ณ ์น ๋งŒํ•œ ๊ฑด๋•์ง€๋„ ์—†๊ตฐ์š”.. ์›Œ๋‚™ ์ž˜๋˜์–ด ์žˆ์–ด์„œ.

๊ฑฐ๊ธฐ์„œ ํ•„์š”์—†์–ด๋ณด์ด๋Š”๊ฒƒ ์ค„์ด๊ณ  ์“ธ๋งŒํ•œ๊ฑฐ๋งŒ ์ถ”๋ ค์„œ.. ์ƒˆ๋กœ.. ๋งŒ๋“ค์–ด๋ณด๋˜์ง€๋งŒ. ํ•ด์•ผ๊ฒ ๋„ค์š”.

DirectDraw๊ฐ€.. ํ•„์š”์—†๋‹ค๋Š” ์†Œ๋ฆฌ๋ฅผ ์ด์ œ .. ์•Œ๊ฑฐ๊ฐ™์•„์š”

์ฟจ๋Ÿญ. ๊ทธ๋Ÿผ.. API์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด ๋ด์•ผ๊ฒ ๋„ค์š”

4.3.1. Thread

์˜ํ˜„ ์œ ์šฉ์„ฑ์„ ์œ„ํ•ด.. ๋’ค์— ๋‚˜์˜ค๋Š” 7์ด๋‚˜ 2๋Š” ๋นผ๋ผ.. ใ…กใ…ก; ํ•˜ํ•˜..

์„ ํ˜ธ ๊ทธ๋ž˜๋„.. 8.1 ๊น”์€ ๊น€์—..ใ…กใ…ก;

ํ•ด์„ฑ ์ง€๋‚˜๊ฐ€๋‹ค๊ฐ€ ํ•œ๋งˆ๋””.. ^^;; DX ์ดˆ๊ธฐํ™” ๊ณผ์ •์€ ์ด์ „๋ฒ„์ „๊ณผ ํก์‚ฌํ•˜๊ตฐ์š”.. ์Œ.. ์ดˆ๊ธฐํ™” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํŒŒ์•…ํ–ˆ๋‹ค๋ฉด.. ๋‹ค์ด๋ ‰ํŠธ ์—‘์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚ด๋ถ€์ ์œผ๋กœ ์ž‘๋™ํ•ด์„œ ์ผ๋ฐ˜ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ณด๋‹ค ๋น ๋ฅธ ์—‘์„ธ์Šค ๋ฉ”์นด๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜์‹œ๊ตฌ์š”.. ์™ ๋งŒํ•˜๋ฉด DX ์“ฐ์ง€๋ง๊ตฌ.. ์ถ”๊ฐ€์ ์ธ ์ดํŽ™ํŠธ๋“ฑ์„ ๊ตฌํ˜„ํ•ด๋ณด๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™๋„ค์š”.. ์•ŒํŒŒ๋ธ”๋ Œ๋”ฉ์„ ์‘์šฉํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋ฒ•(ํŽ˜์ด๋“œ ์ธ์•„์›ƒ์ด๋‚˜ ์ „ํ™˜.. ๋ญ๋ผ๊ทธ๋Ÿฌ๋“œ๋ผ).. ํ•˜๊ตฌ.. ์ „ ๋ชปํ•ด๋ดค์ง€๋งŒ.. ๋ธ”๋Ÿฌ๋ง ํ•„ํ„ฐ ๊ฐ™์€๊ฒƒ๋‘.. ์„œํŽ˜์ด์Šค์— ์ง์ ‘ ์–ต์„ธ์Šค ํ•˜๋Š”๊ฑฐ ๊ณต๋ถ€ํ•˜๋ฉด.. ํ•ด๋ณผ๋งŒ ํ• ๊ฒƒ ๊ฐ™๊ตฐ์š”.. ๊ทธ๋ฆฌ๊ตฌ.. ์Œ.. ๋งค์ผ ํ—ˆ์ ‘ ํ”Œ๋ฐ์„ ํ•˜๊ตฌ ์žˆ์ง€๋งŒ.. ๊ทธ๋ž˜๋‘ ์ง€๊ฒจ์šด ์ดˆ๊ธฐํ™” ๊ณผ์ •์„ ๋‹จ์ถ•์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์–ด๋А์ •๋„ ๋ชจ๋“ˆํ™”๋˜๊ฒŒ ๋ผ์ž…์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์ข‹๊ฒ ์ง€์š”.. ์ „ ์ ˆ๋Œ€ ์•ˆํ•˜์ง€๋งŒ.. ใ…‹ใ…‹;; ๊ทธ๋Ÿผ.. ์žก์„ค์ด์—ˆ์Šต๋‹ˆ๋‹น~ ์ˆ˜๊ฑฐ~

1002 ์ดˆ๊ธฐํ™”๊ณผ์ •์ด ์ด์ „๋ฒ„์ „๊ณผ ๊ฐ™์€ ์ด์œ ๋Š” Surface 7 ์„ ์ด์šฉํ•ด์„œ์ผ๊ฒƒ ๊ฐ™๋‹ค๋Š”. DX8๋กœ๋Š” ์•„์ง ์•ˆํ•ด๋ด์„œ..~

๋ฐ๊ธฐ) ํ•ด์„ฑ์ด๊ฐ€ ๋งํ•œ ์ถ”๊ฐ€์ ์ธ ์ดํŽ™ํ„ฐ๋“ค์˜ ๊ธฐ๋ณธ์ ์ธ ์•„์ด๋””์–ด๋Š” '์˜์ƒ์ฒ˜๋ฆฌ' ์‹œ๊ฐ„์— ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์„ ํ˜ธ ํ˜ผ์ž DX ๋ณด๋Š”๋ฐ๋„ ์˜์™ธ๋กœ ์ง„๋„๊ฐ€ ์ž˜ ๋‚˜๊ฐ€๋Š”๋“ฏ...)

1002 Output ์ด ๊ธ‰ํ•˜๋‹ค๋ฉด DirectX Media SDK ๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ŒํŒŒ๋ธ”๋žœ๋”ฉ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Transform Libary ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ™”๋ฉด ์ „ํ™˜๊ณผ ๊ด€๋ จ๋œ ํŠน์ˆ˜ํšจ๊ณผ๋“ค์„ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ์ฃ . ํ•˜์ง€๋งŒ, ๊ณต๋ถ€ํ•˜์‹œ๋Š” ์ž…์žฅ์—์„œ๋Š” ์ด๋ก ์„ ํŒŒ๊ณ ๋“ค์–ด์„œ ์ง์ ‘ ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ฃ .

ํ•ด์„ฑ ๊ฐ€๋งŒ๋ณด๋‹ˆ .. 99๋“ค์ด ๊ฐ๋†”๋ผ ๋ฐฐ์ถ”๋†”๋ผ ํ•˜๊ตฌ ์žˆ๊ตฐ.. -0-;;; ใ…Žใ…Ž;;

DeleteMe) DX8 SDK๋ฌธ์„œ๋ฅผ ๋ณด๋‹ˆ Direct Draw์˜ ์ „ ๊ธฐ๋Šฅ์ด Direct3D๋กœ ํ†ตํ•ฉ ๋๋‹ค๋Š”๊ตฐ.... ๊ณ ๋กœ DDraw๋Š” ์ด์ œ๋Š” ์˜๋ฏธ๊ฐ€ ํ‡ด์ƒ‰ํ•œ๋“ฏ.. ์ฟจ๋Ÿญ;; by ๋ด‰ํ™˜(๋น„ํšŒ์› ์ฐธ๊ฒฌ๊พผ)

์„ ํ˜ธ ๋ญ.. DirectGraphics๋กœ ํ†ตํ•ฉ๋˜์—ˆ๋‹ค๊ณ  ํ•˜์ง€๋งŒ ์•„์ง ์˜ˆ์ „์˜ ๊ธฐ๋Šฅ๋“ค์€ ์ „๋ถ€ ๋‚จ์•„์žˆ๊ณ  ์˜์›ํžˆ 2D๋ฅผ ์•ˆํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—. ๋ญ 2D๋ฅผ 3D๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ๋ฒ•๋“ค๋งŒ ์š”์ƒˆ๋Š” ์†Œ๊ฐœ๋˜๊ณ  ์žˆ์–ด์„œ ์•ˆํƒ€๊น๊ธฐ๋„ ํ•˜์ง€๋งŒ.^^



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:08
Processing time 0.0081 sec