D2D로 프레임워크를 짜자는 생각으로 어느정도 완성한거 같다.(이것으로 Win API , openGL , D3D_2DSprite , D2D..총 4번째 제작이다.. 어차피 형식은 모두 같다..)
[참고 사이트]
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ee719658(v=vs.85).aspx
https://msdn.microsoft.com/ko-kr/library/windows/desktop/dd756755(v=vs.85).aspx
딱 저 위에 2개만 참고해서 제작 했다...매번 생각하는거지만 모르는게 있으면 MSDN에 가서 해당 메소드의 메개 변수와 의미, 그리고 아래 간단한 샘플코드가 나오는데 그걸 본다면 안되는게 없더라..
[결과 - 화면 이동과 스프라이트 애니메이션 모두 잘 된다..]
D2D에서 ID2D1HwndRenderTarget는 Win API의 DC와 같았다..
가장 큰 문제는 더블 버퍼가 문제였다.
어떻게 할까 고민하다가.. 고전적인 방법을 사용하기로 했다..일단 예제에서는 매번 Clear 하게 되어 있는데 이게 InvaidRect와 동일한 기능을 하고 있어 스프라이트 애니메이션을 하면 깜빡이더라..
조금 생각해봤지만 당연히 다른 랜더 타겟이 있어야 했고 그래서 ID2D1BitmapRenderTarget을 생성해서 CreateCompatibleRenderTarget을 통해 RenderTarget을 생성하고 , ID2D1BitmapRenderTarget에 그림을 그린후에 GetBitmap으로 비트맵을 가져오고(쉽게 복사하고) ID2D1HwndRenderTarget에서 해당 비트맵을 그려주는 식으로 했다.
또 Clear대신에 FillRectangle 함수를 통해서 처음 그릴때 배경색으로 덮어버리는 식으로 그렸더니 위 동영상처럼 잘 되었다. (솔직히 화면 전체 크기의 배경을 계속 덮어버리면 더블 버퍼는 안해도 될것 같지만..그래도 더블 버퍼의 개념은 당연히 들어가야 겠지..)
이 밖에도 찾아보니 Layer를 이용해서 이미지를 변경하거나 , ID2D1DeviceContext을 사용해서 Effect 생성을 통해 다양한 효과를 준다거나 D3D와 함께 사용하는 방법등 방법은 다양했다.
하지만 , 현재 사용할 기능은 스프라이트 애니메이션과 , 알파 블랜딩 , 더블 버퍼 , 이미지 , 카메라 이동이기 때문에 해당 기능을 이용하다가 필요하면 점목 시키면 될 것 같다.(어차피 사용하는 함수들은 모두 같으므로 추후에 사용하는데는 큰 문제는 없을 것 같다.)
처음에는 bmp나 jpg를 사용할 수도 있으니 해당 이미지에서 픽셀을 읽어들어와 특정 값만 없애버릴려고 했는데..png를 사용하면 되니 굳이 안그래도 될 것 같다..(나중에 필요하면 기능만 추가하자)
'프로그래밍 제작 > 연구과제' 카테고리의 다른 글
A* 알고리즘.. (0) | 2016.07.27 |
---|---|
[D2D] 삼국지 2D - 제작 중.. (0) | 2016.07.27 |
LPD3DXSPRITE 출력 (0) | 2015.12.09 |
directx 11 을 이용한 3d 게임 프로그래밍 입문 예제 띄우기 성공! (3) | 2015.11.17 |
WIndows API - API에서 콘솔창 띄우기 (0) | 2015.10.23 |