CyberConnect2에서는 2013년부터 DirectX11세대용 멀티플랫폼엔진 개발을 시작하였으며, 제작 시 발생하였던 문제점을 DirectX9와의 차이점을 바탕으로 공유하고자 합니다.
이 세션은 DirectX11의 개발이 처음이거나 관심 있으신 분을 대상으로 합니다. Tessellation 이나 OIT와 같은 최신기술은 다루지 않으므로 주의하시기 바랍니다.
5. DRAW GRID
• Core Class의 구조입니다.
DirectX
Class
C++
CLI
Wrapped
Core Class
Init
BeginScene
EndScene
CleanUp
SetCamera
GetDevice
D3D를 초기화합니다.
Render Begin
Draw End
할당된 리소스를 해제합니다.
시점을 설정합니다..
생성된 Device의 포인터를 반환.
6. DRAW GRID
• Ground Class는 격자 ( Grid )를 그려주는 클래스입니다.
CGround
Class
C++
CLI
Wrapped
Ground Class
Create
OnRender
OnRelease
Core Device에 Ground를 생성
Ground Render
할당된 메모리를 해제합니다.
7. DRAW GRID
• 메인 코드입니다. ( C# )
• 이전과 달라진 점은
Core의 Render부분이 DrawScene, EndScene으로 분리되었습니다.
그리고 Ground 클래스가 새로 생겼습니다.
8. DRAW GRID
• Ground Class 입니다. ( C++ )
• Create 메소드를 보면 DirectX를 초기화 할 때 생성한 Device를 인자로 받아야 합니다.
이 Device정보를 가지고 Vertex Buffer, Index Buffer 등을 생성합니다.
그 외에 열, 행의 개수나 격자의 크기를 받습니다.
Ground Class ( 출처 : http://nowcampus.tistory.com/entry/10 )
9. DRAW GRID
CLI로 래핑한 Ground 클래스입니다.
Ground는 초기화한 Device 정보가 필요합니다.
그래서 Core의 GetDevice()를 통해 그 정보를 받아야 하기 때문
에 매개 변수로 Core를 전달해 줘야 합니다.
여기서 CLI 문법이 몇 개 나오는데 알아보도록 하겠습니다.
10. DRAW GRID
CLICore::Core ^core
CLI에서 관리 클래스(ref) 는 복사 생성자를 가지지 못합니다.
그래서 매개 변수로 클래스를 넘겨주지 못합니다.
그러므로 인자로 Reference를 넘겨주어야 하는데
그 때 사용하는 키워드가 ^ 입니다.
^는 C++의 *과 비슷한 용도이며 Handle이라 부릅니다.
그래서 클래스를 넘겨줄 때, 복사 생성자를 사용할 수
없으므로 핸들을 참조하도록 ^ 키워드를 사용하는 것입니다.
11. Ground Object를 이용해 기본적인 땅을 그려봤습니다.
다음 PPT엔 평지에 높이맵 ( Height map )을 적용하고 카메라 조작에 대해 설명하겠습니다.
사용했던 프로젝트
https://github.com/jihwankim/CS_PPT
DRAW GRID