Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
1. Creating 3D Game Client Program
With Project Anarchy
- Part 3. 움직여라 움직여 -
분 류 NHN NEXT 1기 실전프로젝트 산출물
실습 업체 블루홀 스튜디오
프로젝트 팀명 그랜드부다페스트(문진상/신동찬)
작성자 신동찬
Created Date 2015-01-05
2. 다시 한 번 말씀 드리지만
Anarchy Project에서 추천하는 방법은 아닙니다
단,
1. C++로 엔진 활용 기법을 학습하고 싶다(우리 같이)
2. C++은 알고 있는데 파이프 라인 등을 몰라 게임을 못 만든다
3. 과거 Vision 엔진 대비 요즘에 어떻게 바뀌었나 대략적으로 보고 싶다
등의 이유를 가지고 계신 분은 vForge 없이 개발하는 방법에 참여하세요
3. 자료를 읽기에 앞서 알아야 할 것
이번 강의에서 당신이 자료에서 참고하거나 배울 수 있는 것
기대했을 수 있지만 자료에 없는 내용
- C++ 사용 방법
- Lib, DLL 개념 및 사용 방법
- Project Anarchy 설치 및 세팅( http://www.slideshare.net/ssusere4785c/project-anarchyvision-engine-part1 )
- UDP 네트워크 통신
- 렌더링 파이프라인
- Project Anarchy를 과거 Vision Engine 처럼 사용하는 법
- 윈도우 프로세스로 프로그램 수행
- 리소스 파일에 대한 정보
- Picking
- Character Move
- vForge를 활용한 게임 개발
- Engine Plugin 및 Component 를 활용한 게임 개발
- GUI 시스템
4. 본 자료에서 사용하는 파일 위치는 Default 설치 위치를 기반으로 함
기본 설치 위치
C:Havok2014.1.0AnarchySDK
Project Anarchy 사용을 위해서는 vforge를 우선 실행해야 함
Project Anarchy는 무료로 사용 가능한 대신 몇 가지 제약 사항이 존재
본 실습 과정은 vforge를 실행한 것을 기본으로 한다
< vForge 미실행시 발생하는 error >
Visual Studio 2010 기준으로 설명
Project Anarchy는 Visual Studio 2010 기준으로 실행 됨
Visual Studio 2013에서 실행 하기 위해서는 2010이 설치 되어 있어야 함
12. Place Entity Like Game
모델 포지션 설정 후 entity 생성에서 활용
Vision RTTI 활용 entity 생성
입력되는 entity에 대해
“Walk” animation을
표준속도(1.0f)로 Loop(무한 반복)함
사실은 땅이 아니라 큐브를 잡아 늘려 평평한 대지처럼 만든 것
14. Place Entity Like Game(Lighting)
Vision::Game 은 전체 entity control과 일반기능 함수를 포함
Light도 entity와 유사한 방식으로 바로 생성 가능
15. Place Entity Like Game(Lighting)
Light 포지션 설정 후 Light 생성에서 활용
두 번째 포지션은 참고 코드
Light 타입 설정(point 외에도 direction 등 enum으로 되어 있음)
Light 강도를 높여주는 계산(승수 증감)
Light 크기 결정
16. Place Entity Like Game
이번 SubPart에서 소개한 내용은
어디에서 수행되어야 할 것인가?
Part 2에 답이 있다!
AfterEngineInit()에서 수행되는 것
18. Rendering Pipeline
* NHN NEXT Computer Grapics 수업자료 인용(2013, 임석현 교수)
World 좌표 상의 3D 물체가 화면에 보여지는 과정
4번의 Transformation 존재
그 중 Model Transformation은 무의미 하기에
관련 있는 Transgormation 3번
23. Entity Setting
Entity의 충돌 검출은 TraceAccuracy 설정값에 영향을 받음
Entity는 충돌체가 아닌 것이 기본 설정
(생성시 Trace 안되도록 설정되어 있음)
따라서 Picking이 되게 하기 위해서는 Entity에 해당하는 충돌 박스를 만들어 줘야 함
Get,Set으로 확인 및 설정이 가능함
본 프로젝트에서는 AABB BOX로 진행
24. TraceLineEntities()
Vision Engine에서는 생성된 Entity를 Collection으로 통합 관리 함
해당 Entity Collection 중에서 현재 화면에 Visible 상태인 Entity를 별도로 가져와 목록화 가능
LineTrace를 수행하되 해당 목록에 충돌 되는지 확인
충돌이 일어나면 m_lastTraceInfo(VisTraceLineInfo_t struct)에 해당 충돌체 정보 값을 넣어 줌
그냥 LineTrace로는 백날 해도 안 됨
32. Where is Mouse Pointer?
C++ 세계에선 공짜가 없듯
Vision 엔진도 전부 공짜로 뭐 해주는 건 없다
Mouse는 overlay로 화면에 그려내야 한다
문제는 그리는 타이밍인데...
그 문제는 다음 시간에 다루도록 하며
여기에서는 일단 어떻게 나오도록 하는지에 집중
33. Mouse Point
게임 엔진답게(?!) Vision Engine에서는 input 받는 것을 전부 통합 관리한다
VInputManager를 통해 관리되는 것들을 받을 수 있음
GetMouse(): 마우스 내놔
GetRawControlValue(): 인자를 받아 x, y 값을 선택적으로 내놔
m_MousePosition은 hkvVec2(2차원 벡터)
34. Mouse Pointer
앞서 받은 mousePointer 정보 값을 활용
화면에 Texture를 그대로 overlayRendering 하면 됨
35. Mouse Pointer
사실 이 부분은 매 Tick마다 불러져야 화면에 계속 노출
따라서 Vision Engine에서 제공하는 Callback 함수를 활용
OnRenderHook은 화면이 그려지는(Render)되는 매 Tick마다 불려짐
36. Mouse Pointer
Vision Engine에서는 RenderLoop에도 추가로 절차를 계속 줄 수 있음
RenderHook callback으로 계속 Renderer를 붙여나가면 추가 렌더링 가능
이 함수는 가장 마지막에 추가해 항상 맨 위에 그려지도록 함
(part4 참고)