Graphics/DirectX

Direct 3D - 프레임워크

MOLOKINI 2014. 6. 19. 15:34

2011.4.1 작성된 글입니다.

 

Direct3D를 사용한 프레임워크를 DirectX 마법사를 사용하여 만들어보자.


프레임워크 : 기본뼈대,, 앞으로 이걸 통해서 더 발전시켜나갈 여지가 있는 것이다.

프레임워크는 DX SDK 9.x를 설치하면 VS에 자동으로 DX응용프로그램 마법사가 설치된다.
 - 9.0c를 넘어가면서부터 프레임워크가 사라졌다고 한다.
 

이전에는 마법사형태로 지원되었지만
이제 스스로 코드로 짜야한다
 



인터넷 망망대해를 헤메다가 결국 찾아냈다

 

상하좌우키를 통해서 저 주전자를 돌려볼 수 있고

F2를 눌러서 자잘한 옵션을 설정할 수 있다.

그리고 내 그래픽카드가 보이네 HD4600ㅇㅋ


적어도 윈도우 창을 만드는것과 키입력같은 자잘한 것 정도는 얻어낸 셈이다.



일단 헤더는 넣어두고

클래스들을 좀 보자

 


우선 d3dapp.cpp 클래스를 보자

프레임워크의 전체 흐름을 관리하는 클래스다


소스가 워낙 길어서 전부다 볼수는 없고 중요한 멤버변수와 함수만 보겠다.

멤버변수

HWND m_hWnd : 메인 윈도우 핸들

LPDIRECT3D9 m_pD3D : D3D 객체의 포인터

LPDIRECT3DDEVICE9 m_pd3dDevice : D3D 디바이스의 포인터

FLOAT m_fTime : 현재시간

FLOAT m_fElapsedTime : 직전 프레임과 현재 프레임의 시간 간격

FLOAT m_fFPS : 초당 프레임 수

TCHAR* m_strWindowTitle : 윈도우 캡션 바의 제목

DWORD m_dwCreationWidth : 윈도우의 가로크기

DWORD m_dwCreationHeight : 윈도우의 세로크기

bool m_bStartFullScreen : 윈도우를 전체화면 모드로 생성할 것인가


멤버함수

HRESULT ConfirmDevice()

Caps 정보를 사용하여 디바이스의 기능을 검사한다. 이 함수에서 E_FAIL을 리턴하면 프레임워크는 오류를 발생시키고 종료된다. 정상적일 경우 S_OK를 리턴해야 한다.

HRESULT OneTimeSceneInit()

장면을 단 한번만 초기화할 수 있게 해준다

HRESULT InitDeviceObject()

DeleteDeviceObject()와 짝을 이룬다, D3DPOOL_MANAGED. D3DPOOL_SCRATCH, D3DPOOL_SYSTEMMEM 플래그로 생성된 자원들은 reset() 되어도, 메모리에서 사라지지 않는데, 이런 자원들을 생성하는 함수다, 정점 셰이더나 픽셀 셰이더 역시 이 함수에서 초기화할 수 있다.

HRESULT RestoreDeviceObjects()

InvalidateDeviceObject()와 짝을 이룬다, D3DPOOL_DEFAULT로 생성한 자원들은 디바이스가 재생성될 때 모두 무효화 된다. 이런 객체들을 여기서 초기화시킨다.

HRESULT FrameMove()

매 프레임마다 애니메이션 관련 처리를 해준다

HRESULT Render()

화면에 폴리곤을 그린다

HRESULT InvalidateDeviceObjects()

RestoreDeviceObjects()와 짝을 이룬다. 디바이스 객체를 무효화한다.

HRESULT DeleteDeviceObjects()

프로그램이 종료되거나 디바이스가 재생성될 때 불려진다.

HRESULT FinalCleanUp()

프로그램 종료 직전에 불려진다. 최종적으로 필요없는 객체들을 삭제한다.

HRESULT Create()

프레임워크를 시동한다.

INT Run()

메시지 루프를 돌린다.

LRESULT MsgProc()

메시지 처리를 해준다.

void Pause()

잠시 대기한다.

 

'Graphics > DirectX' 카테고리의 다른 글

Direct 3D - 행렬기초  (0) 2014.06.19
Direct 3D - 벡터  (0) 2014.06.19
Direct 3D - *인덱스 버퍼  (0) 2014.06.19
Direct 3D - *메시  (0) 2014.06.19
Direct 3D - *텍스쳐  (0) 2014.06.19