본문 바로가기

게임 공부/DirectX20

DirectDraw 학습 (3) - Set pixel 지난 번에 Draw를 하기 위한 절차를 알아 보았다. 이번엔 직접 화면의 픽셀을 변경해 볼 것이다. 다시 한번 Draw 과정을 살펴보면 적절한 초기화 후 보조 표면에 Lock을 걸고, 얻은 보조 표면의 메모리 주소를 통해 write을 한다. 그리고 Unlock 후 blt을 통해 보조 표면에 작업한 것을 주 표면에 전송하여 스크린에 보이도록 한다. 우선 Lock을 통해 다음과 같이 보조 표면의 시작 주소와 pitch를 얻었다. // 예외 처리는 생략한다. DDSURFACEDESC2 ddsc = {}; ddsc.dwSize = sizeof(DDSURFACEDESC2); m_pDDBack->Lock(nullptr, &ddsc, DDLOCK_WAIT, nullptr); // 보조 표면의 시작 주소와 pitch .. 2020. 11. 21.
DirectDraw 학습 (2) - Draw 기본적인 DirectDraw 초기화가 완료되었으면 장면을 그릴 수 있다. 우선 이전에 설명했듯이 장면은 보조 표면 또는 오프스크린에 그려야 한다. 그리고 flip 또는 blit을 통해 미리 그렸던 장면을 보이게 하는 것이다. 따라서 우린 이전에 만들어 놓은 보조 표면(오프스크린)에 장면을 그릴 것이다. IDirectDrawSurface7::Lock 보조 표면에 장면을 그리기 위해선 보조 표면에 대한 메모리 주소를 얻어와야 한다. 그리고 여기에 write을 하기 위해선 다른 곳에서 혹시나 해당 메모리에 접근하지 못하도록 적절한 제어가 필요하다. 이를 위해 DirectDraw는 Lock 함수를 제공한다. Lock 함수는 surface 객체를 통해 호출한다. Lock 함수의 역할은 해당 surface에 대한 .. 2020. 11. 17.
DirectDraw 학습 (1) - Initialization 학습 목적의 글입니다. 자료: www.youtube.com/watch?v=J0MNKUYw1zY 영천님께서 Direct3D 학습 전에 DirectDraw 좀 익히고 시작하면 도움이 된다고 하니.. 특히 비트맵과 관련하여 세부적인 내용들을 경험해 볼 수 있다고 하시니 믿고 공부! 학습 전에 컴퓨터 그래픽스에 대해 공부를 하고 오면 더욱 이해가 잘 될 것이다. 우선 다음은 DirectDraw 객체를 사용하기 위해 필요한 기본적인 변수들이다. 초기화 과정에서 아래 변수들을 초기화할 것이다. LPDIRECTDRAW pDD; LPDIRECTDRAW7 pDD7; LPDIRECTDRAWSURFACE7 pDDPrimary; LPDIRECTDRAWSURFACE7 pDDBack; LPDIRECTDRAWCLIPPER pCli.. 2020. 11. 15.
행렬 변환에 대해 알아보자 개인적으로 공부하는 내용이므로 틀린 부분이 있을 수 있습니다. 있다면 알려주세요 :) 행렬 변환 기하와 벡터 또는 선형대수학에서 배웠다면 행렬을 통한 도형 변환에 대해 배웠을 것이다. 예를 들면 다음 그림과 같이 다양한 동작을 수행하는 행렬을 곱하여 도형을 변환시킬 수 있다. 출처 행렬의 장점은 편리함에 있다. 예를 들어 어떤 도형의 크기를 늘리고 회전시키고 싶다면 따로 따로 적용하는 것이 아니라 크기를 늘리는 행렬과 회전을 시키는 행렬을 서로 곱하여 하나의 행렬을 얻기만 하면 된다. 그리고 얻은 행렬을 원하는 점에 적용하면 크기와 회전 등이 알맞게 적용된다. Direct3D 에서는 이와 같은 행렬 변환을 지원한다. 최종적으로 변환이 완료된 행렬을 정점에 곱하면 변환된 정점을 얻을 수 있다. 변환 종류에.. 2020. 7. 5.
D3DXCreateTextureFromFileEx 함수의 color key 텍스쳐를 생성하는 함수로 D3DXCreateTextureFromFileEx() 라는 함수가 있다. (아래 함수와 동일) 위 함수의 인자 중 ColorKey라는 부분이 있는데, 이 부분은 텍스쳐(이미지) 중 나타내지 않을 색상을 표시한다. 예를 들어 다음과 같은 그림을 그리고 싶은데 배경색인 검정색은 제외하고 삼각형 모형만 그리고 싶을 때 검정색을 컬러키로 지정해주면 된다. 컬러키의 타입을 보면 D3DCOLOR라는 타입인데 이는 ARGB라는 속성을 가진다. RGB는 레드, 그린, 블루이고 A는 Alpha의 의미고 각 값의 범위는 0~255이다. 여기서 알파란 RGB에 대한 투명도이다. 예를 들어 RGB(0,0,0)이 검정을 나타내는데 이를 투명하게 할 것이므로 알파값(투명도)을 255로 설정한다. 즉 AR.. 2020. 6. 23.
Direct3D 라이브러리를 이용하여 간단한 게임 화면을 만들어 보았다. 위쳐 백그라운드 이미지는 인터넷에서 구하고 버튼은 파워 포인트로 만들었다. 2차원 객체를 그리도록 도와주는 스프라이트를 통해 그렸다. 코드는 별거 많은데 그냥 이미지 3개를 윈도우에 그린 것 뿐. 게임화면이라 하기도 민망한 정도. 완전한 게임을 만드는 그날까지.. 2020. 6. 16.