2014-05-15 2 views
1

내 창에서 픽셀을 얻는 데 문제가 있습니다. 나는 이것을 할 길을 찾을 수 없다. 나는 표준 윈도우 함수와 Direct2D (DirectDraw가 아님)를 사용한다. 나는 D2D1factory 객체를 생성하고 창에서 비트 맵을 그리는 그런 Direct2D를 사용하여 창에서 픽셀을 얻는 방법

WNDCLASS wc; 
wc.style = CS_OWNDC; 
wc.lpfnWndProc = WndProc; 
wc.cbClsExtra = 0; 
wc.cbWndExtra = 0; 
wc.hInstance = hInstance; 
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(6); 
wc.lpszMenuName = 0; 
wc.lpszClassName = L"WINDOW"; RegisterClass(&wc); 
hWnd = CreateWindow(L"WINDOW", L"Game", WS_OVERLAPPEDWINDOW,100,100,1024,768,NULL,NULL,hInstance,NULL); 

:

HWND hWnd = NULL; 
srand((unsigned int)time((time_t)NULL)); 

ID2D1Factory* factory = NULL; 
ID2D1HwndRenderTarget* rt = NULL; 
CoInitializeEx(NULL,COINIT_MULTITHREADED); 
My_CreateWindow(&hWnd, hInstance); 
My_CreateFactory(&hWnd, factory, rt); 
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&factory); 

factory->CreateHwndRenderTarget(RenderTargetProperties(), HwndRenderTargetProperties(hWnd,SizeU(800,600)), &rt); 

// tons of code 

rt->BeginDraw(); rt->DrawBitmap(background[0], RectF(0,0,800,600)); 
rt->DrawBitmap(GIFHorse[(int)iterator], 
RectF(0+MyX-100,0+MyY-100,100+MyX,100+MyY)); 
rt->DrawBitmap(Star[(int)iterator], RectF(0 + starX, 0 + starY, 50 + starX, 50+starY)); rt->EndDraw(); 

내가 안타를 계산해야합니다 (I 만들기 위해 노력하고 나는 새로운 윈도우의 표준 초기화를 사용하고 있습니다 간단한 게임). 그래서 저는 윈도우의 모든 픽셀에 액세스해야합니다.

다른 알고리즘을 사용하려고 생각하고 있지만 작성하기가 더 어려워서 더 쉬운 것으로 시작하고 싶습니다.

나는 GetPixel() 함수에 대해 알고 있지만, HDC에 사용해야하는 것을 이해할 수 없다.

답변

0

D2D 픽셀을 얻는 간단하고 쉬운 방법은 없습니다.

단순 충돌 감지는 지오메트리를 사용하여 구현할 수 있습니다. ID2D1Geometry 개체의 윤곽선이있는 경우 ID2D1Geometry::CompareWithGeometry을 사용하여 개체를 비교할 수 있습니다. 당신은 픽셀을 주장하는 경우

그들에 액세스하는 방법을 사용하면 DXGI 표면 대신 HWND의 목표와 스왑 체인 렌더링 렌더 타겟을 사용할 필요가이 경우 IDXGISurface1::GetDC

를 통해 얻을 수있는 DC에서입니다. 단계별로

단계 :

  1. D3D11CreateDeviceAndSwapChain는 당신에게 스왑 체인을 제공합니다.
  2. IDXGISwapChain::GetBuffer은 DXGI 표면을 제공합니다.
  3. ID2D1Factory::CreateDxgiSurfaceRenderTarget은 렌더링 타겟을 제공합니다.
  4. IDXGISurface1::GetDC은 당신에게 DC를줍니다. 이 페이지에서 비평을 읽어보십시오!
관련 문제