2011.4.1 작성된 글입니다.
Direct3D를 사용한 프레임워크를 DirectX 마법사를 사용하여 만들어보자.
음
상하좌우키를 통해서 저 주전자를 돌려볼 수 있고
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 |