빌보드
버퍼가 카메라를 바라봐야한다.
뷰스페이스 변환을 하기위한 카메라의 월드 변환의 역행렬을 이용
뷰스페이스 변환행렬의 회전행렬의 역을 적용해주자.
뷰스페이스 변환을 위한 회전변환에 역변환을 빌보드를 먹이고싶은 객체에게 적용해주면 카메라를 바라보게된다.
이펙트에 빌보드 적용
Late_Tick에서
1.게임인스턴스 얻어와서 뷰매트릭스 가져오자
2.뷰매트릭스의 역행렬 구해주자.
3.위 행렬을 이펙트의 회전행렬에 적용해주자.
4.1,2,3행을 라업룩에 적용시켜주자.
주로 인게임에 풀같은것들을 빌보드로 표현한다.
MFC
단일 문서 MFC 표준
MFC는 데이터만 뽑으면된다.
툴안에서 경로 잡아주자.
일반 탭의 추가 포함 디렉토리에 레퍼런스폴더에 inc폴더 잡아주자.
링커탭의 일반에서 추가 라이브러리 디렉토리 Lib추가해주자.
입력의 추가종속성에 Engine.lib 추가해주자.
vc++디렉토리에 포함 디렉터리에 sdk에 include
라이브러리 디렉토리에 sdk_>lib 추가해주자.
MainFrame
CSplitterWnd 하나 선언해주자.
클래스뷰에서 MainFrame의 OnCreateClient 함수를 만들어서 클라이언트를 만들어주자.
OnCreateClient
m_MainSplitter.CreateStatic호출 해주자
(this,행 한개 ,열 두개);
나눠놓은 윈도우에 화면을 세팅해야한다.
m_MainSplitter.CreateView(0,0,RUNTIME_CLASS(띄우고싶은 뷰클래스))
자동으로 ToolView를 만들어주자(하얀색 클라이언트 영역을 담당해주는 클래스)
CToolView의 OnDraw 클래스가 렌더역할을한다.
MFC는 객체지향으로 만들어진 프레임워크다.
MainFrame에서 ToolView를 include를 한다.
Include가 꼬인다 ToolDoc.h 인클루드해주자.
m_MainSplitter.CreateView(0,0,RUNTIME_CLASS(CToolView),사이즈를 정의해주자)
MFC에는 AdjustWindow없다
return 부모함수 호출안하고 true로 바꿔주자.
폼뷰
메인클래스는 그대로쓰고 폼뷰는 새로만들어주자.
CForm 클래스를 만들어준다 기본클래스를 CFormView로 해준다.
이를
m_MainSplitter.CreateView(0,0,RUNTIME_CLASS(CFormView),사이즈를 정의해주자)
로 띄어주자.
이제 다른창이 뜬다.
리소스뷰에 툴에 다이알로그에 폼이 이생겼다 여기에다가 버튼을 넣으면 된다.
장치 띄우기
왼쪽 담당은 툴뷰다.
클래스뷰의 툴뷰 속성 -> 재정의 ->OnInitalUpdate
여기서 게임인스턴스를 통해서 초기화해주자.
pGameInstance->Ready_Graphic_Device(m_hWnd,CGraphic_Device::MODE_WIN,900,720,장치)
툴뷰 멤버변수로 m_pGraphic_Device를 추가해주자.
장치초기화 끝
위에 OnDraw에서 그려보자.
장치의Clear 비긴신
엔드신 프레젠트 호출해주자.
툴뷰헤더에 게임인스턴스추가해주자(다이렉트 헤더를 모른다.)
카피파일 툴의 빈으로 해주자.
속성의 출력 디렉토리를 Tool에 bin으로 해주자.
툴뷰에 OnInitialUpdate에서 원하는거 해주자 원형추가해주고 쓰고해주자.
중요한건 두 창간의 소통이다.
리소스뷰 폼에서 버튼을 더블클릭해서 클릭이벤트로가자.
AfxGetMainWnd();를 호출하면 메인프레임의 주소를 얻어올수있다.
메이프레임에서 창을 분리하고 썼다 여기서 뷰의 정보를 가지고있게할수있다.
메인프레임에 CToolView를 선언하자. 레프트와 라이트.
메인프레임의 온크리에이트클라이언트함수
m_MainSplitter.GetPane 특정 위치의 주소를 얻어오자.
왼쪽뷰 오른쪽 뷰의 주소를 저장해주자.
이제 메인프레임은 데이터를 통신해야하는 두개의 뷰의 주소를 가지고있다.
이제 버튼클릭이벤트 함수안에 메인프레임을 통해서 특정 뷰에 어떤 기능을하라 기능을 추가할수있다.
툴뷰의 온드로우에서 그려주자.
엔지 디파인에 ENGINE_DEBUG로 바꿔주고
클라이언트속성 전처리기 에 ENGINE_DEBUG 추가.
이제 폼의 클릭에서
메인프레임에 주소 받아서 접근할수있다.