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