32
Creating 3D Game Client Program With Project Anarchy - Part 2. vForge를 피하고 싶었어 - NHN NEXT 1기 실전프로젝트 산출물 실습 업체 블루홀 스튜디오 프로젝트 팀명 그랜드부다페스트(문진상/신동찬) 작성자 신동찬 Created Date 2015-01-04

Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Embed Size (px)

Citation preview

Page 1: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Creating 3D Game Client Program

With Project Anarchy

- Part 2. vForge를 피하고 싶었어 -

분 류 NHN NEXT 1기 실전프로젝트 산출물

실습 업체 블루홀 스튜디오

프로젝트 팀명 그랜드부다페스트(문진상/신동찬)

작성자 신동찬

Created Date 2015-01-04

Page 2: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

다시 한 번 말씀 드리지만

Anarchy Project에서 추천하는 방법은 아닙니다

단,

1. C++로 엔진 활용 기법을 학습하고 싶다(우리 같이)2. C++은 알고 있는데 파이프 라인 등을 몰라 게임을 못 만든다3. 과거 Vision 엔진 대비 요즘에 어떻게 바뀌었나 대략적으로 보고 싶다

등의 이유를 가지고 계신 분은 vForge 없이 개발하는 방법에 참여하세요

Page 3: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

자료를 읽기에 앞서 알아야 할 것

이번 강의에서 당신이 자료에서 참고하거나 배울 수 있는 것

기대했을 수 있지만 자료에 없는 내용

- C++ 사용 방법- Lib, DLL 개념 및 사용 방법- Project Anarchy 설치 및 세팅( http://www.slideshare.net/ssusere4785c/project-anarchyvision-engine-part1 )

- Project Anarchy를 과거 Vision Engine 처럼 사용하는 법- 윈도우 프로세스로 프로그램 수행- 카메라 띄우기- 3D Asset 표시하고 Transform, Scale, Rotate 수행

- vForge를 활용한 게임 개발- *.model file 등 resource 측면 핸들링- Engine Plugin 및 Component 를 활용한 게임 개발- GUI 시스템

Page 4: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

본 자료에서 사용하는 파일 위치는 Default 설치 위치를 기반으로 함

기본 설치 위치C:\Havok\2014.1.0\AnarchySDK\

Project Anarchy 사용을 위해서는 vforge를 우선 실행해야 함

Project Anarchy는 무료로 사용 가능한 대신 몇 가지 제약 사항이 존재본 실습 과정은 vforge를 실행한 것을 기본으로 한다

< vForge 미실행시 발생하는 error >

Visual Studio 2010 기준으로 설명

Project Anarchy는 Visual Studio 2010 기준으로 실행 됨Visual Studio 2013에서 실행 하기 위해서는 2010이 설치 되어 있어야 함

Page 5: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Base Code( main, loop, etc)

Page 6: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

지난 시간 Framework 개론 복습

가장 중요하다 했던 클래스 기억 나시죠?

Page 7: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

# VAppImpl 클래스( 중요 )

사용자와 직접 접하는 클래스VAppBase 클래스는 VAppImpl 클래스의 인스턴스를 가지고 있음사용자가 작업한 내용을 VAppBase를 통해 실제 엔진에서 적용되도록 함따라서 사용자가 Vision의 Application Framework를 사용하기 위해서는 반드시 상속 받아야 함

지난 시간 Framework 개론 복습

Page 8: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Main Class

정리하면 Vision Engine을 실행하는 진입점(흔히 main 함수)는 엔진 내부에 존재

따라서 외부에서 접근해 사용하기 위해서는별도의 클래스를 만들되, 해당 클래스가 VAppImpl 클래스를 상속 받도록 하면 됨VAppImpl 클래스를 상속 받은 클래스가 프로그램 진입점처럼 사용됨

# Project Creator로 프로젝트를 제작하면 생기는 기본 클래스

Page 9: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Main Class

해당 클래스는 목적에 맞게 변경해 사용이 가능함

*전달인자 생략• AfterEngineInit() : 엔진 초기화가 진행된 이후 1회 수행하는 함수• SetupAppConfig() : FileSystem Build Path 설정 / 윈도우 창 이름, 크기, 위치 설정 / vretrace 등 설정• Init() : 프로그램 기본 Scene file 위치 설정 / FileSystem에 추가 위치 설정 / Scene Loading• AfterSceneLoaded() : Scene Load 이후 Scene에 포함될 각종 리소스 생성 등 게임 로딩에서 하는 모든 것• Run() : 실질적인 Main Loop 하지만 개별 object는 engine 내부에서 update가 되기 때문에 포지션이 애매함• DeInit() : 프로그램 종료 시점에 처리해야 할 일 수행(메모리 해제 등)

Page 10: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Main Class Sample

이번 개발에서는 AfterSceneLoaded()에직접 구현한 기능을 전부 넣었음

직접 구현한 기능은 contents를 제외하고는 모두 util성 기능이라Singleton 패턴을 활용했음따라서 모든 초기화는 해당 함수에서 수행

Page 11: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

VFileAccessManager

Page 12: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

How to Access File?

Vision Engine에서는 File 경로를 통합해서 관리하는 FileSystem Manager가 존재무조건 소스파일 있는 곳에 파일을 넣는다고 읽을 수 있지 않음

따라서 최초 지정된 장소를 파악하고,해당 장소를 기준으로 FileSearchPath를 추가하는 방식으로 확장해야 함

!! references docs는 havok_sdk라고 나왔는데 이는 설치폴더를 향 함!! 잘 확인하지 않으면 아무것도 불러 올 수 없음

Page 13: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

How to Access File?

config.m_sFileSystemRootName = “workspace”;솔루션 파일이 있는 위치를 최초 위치로 설정 함

init()에서 Append를 통해 경로 추가

Page 14: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

How to Access File?

탐색 경로를 VFileAccessManager에 추가 완료

향후 경로 설정은 여기에 추가된 경로를 기반으로 진행 됨

ex)RayTracer::GetInstance()->SetCursor( "Textures/Gui/Mouse.dds" );여기서 파일 이 있는 경로는 workspace/Asset/Textures/Gui/Mouse.dds 임

Page 15: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Console

Page 16: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

What a Awesome!

Vision Engine이 정말 좋은 이유는스스로 뭐하고 있는지 알아서 술술 말한다는 것내부 정보를 어렴풋이라도 확인할 수 있음

단, 사용자가 직접 콘솔을 붙인다는 전제로(절대 직접 콘솔을 띄워주지 않는다)

Page 17: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Console

stdout에 console을 물려주면 엔진에서 보내는 모든 정보를 받아 console에 띄울 수 있음(콘솔 디버깅은 보너스)

Page 18: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Scene

Page 19: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

scene, vscene file?

저번에 vForge로 만드니깐 필요 없다고 하지 않았던가?그렇지 않고, 우리는 Scene을 코드로 구성할 것이니깐 vForge에서 Scene을 작업할 필요가 없는 것

가장 기본이 되는 scene은 필요함(아무것도 없는 공백이라도)

그러면 vscene은 뭔가?vscene file은 vForge에서 scene을 만들고 해당 scene을 엔진에서 돌리기 위해 변형한 file즉, 엔진에서는 vscene file만바로읽어서사용할 수 있는 것

이 부분은 어쩔수 없으니 vForge에서 Scene을 만들고 export vscene 으로 file을 생성함

Page 20: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

scene, vscene file?

finder에 뜨는 건 filename.platform.vscene 을 의미

하지만 코드에서는 아래와 같이 filename.vscene으로만 써도 상관 없음엔진에서 플랫폼을 구분해 해당 플랫폼 file을 가져다 로딩함

Page 21: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Make Entity

Page 22: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Entity? = Object!

모든 길은 로마 Entity로 향한다

Page 23: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Entity? = Object!

즉, 모든 객체는 Entity로 관리 되며, 조작 된다고 할 수 있음

게다가 Entity는 엔진 내부에서 관리되는 객체이기 때문에적절한 Api 활용 및 간단한 전달인자 만으로 원하는 기능을 구현 할 수 있다는 장점이 있음

* 애니메이션 변경은 이 한 줄로 끝

Page 24: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

RTTI(Runtime Type Information)

Vision Engine에서 제공하는 Vtype 클래스는 클래스의 이름으로 생성 등을 할 수 있도록 지원함엔진의 주요 클래스는 이름으로 생성이 가능함

Page 25: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

RTTI(Runtime Type Information)

RTTI가 적용된 카메라 entity 생성 코드VisBaseEntity_cl* 를 활용해 해당 entity에 대한 추후 제어

Page 26: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

RTTI(Runtime Type Information)

3D 모델을 코드 예제생성 형태는 편한 방법을 선택해 사용하면 됨(밑에 코드는 클래스에서 포인터를 유지해 지속적으로 관리)

Page 27: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Make Entity

Entity는 원하는 곳에서 생성하면 됨하지만, 상식적으로 생각하면 생성할 곳은 AfterSceneLoaded()에서 진행되어야 함을 알 수 있음

entity를 만드는 것은 그야말로 new 하는 것이기 때문에 게임 플레이 중 할 이유가 없음로딩 타임에 전부 완료 해야 하는 것이 맞기 때문

게다가 Run()은 매번 루프를 돌기 때문에 CreateEntity()를 지날 때 마다 새로운 entity를 만들게 됨이것은 당연히 우리가 원하는 방향이 아님

Page 28: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Transform, Scale, Rotate

Page 29: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Transform

모든 객체가 VisBaseEntity_cl을 가지고 하기 때문에 같은 형식을 취함

매 루프 position을 지정하는 SetPosition 함수를 사용해 위치를 변경할 수 있음

# hkvVec3는 Vision Engine에서 벡터 값을 처리하는 자료형 임

Page 30: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Rotate(Orientation)

Transform과 동일한 형태다만 matrix를 직접 넘겨 회전시키는 방법 추가

Page 31: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

Rotate(Orientation)

3축 방향이 동일 비율로 Scaling 되는 것과각 방향 벡터를 직접 넣는 함수가 존재

하지만 직접 사용한 것은 SetScale( hkvVec3 &scale);

Page 32: Project anarchy로 3d 게임 만들기 part_2_vforge피하기

- Part 3. 움직여라 움직여 -

The NEXT