SlideShare a Scribd company logo
1 of 32
Download to read offline
Creating 3D Game Client Program
With Project Anarchy
- Part 2. vForge를 피하고 싶었어 -
분 류 NHN NEXT 1기 실전프로젝트 산출물
실습 업체 블루홀 스튜디오
프로젝트 팀명 그랜드부다페스트(문진상/신동찬)
작성자 신동찬
Created Date 2015-01-04
다시 한 번 말씀 드리지만
Anarchy Project에서 추천하는 방법은 아닙니다
단,
1. C++로 엔진 활용 기법을 학습하고 싶다(우리 같이)
2. C++은 알고 있는데 파이프 라인 등을 몰라 게임을 못 만든다
3. 과거 Vision 엔진 대비 요즘에 어떻게 바뀌었나 대략적으로 보고 싶다
등의 이유를 가지고 계신 분은 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 시스템
본 자료에서 사용하는 파일 위치는 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이 설치 되어 있어야 함
Base Code( main, loop, etc)
지난 시간 Framework 개론 복습
가장 중요하다 했던 클래스 기억 나시죠?
# VAppImpl 클래스( 중요 )
사용자와 직접 접하는 클래스
VAppBase 클래스는 VAppImpl 클래스의 인스턴스를 가지고 있음
사용자가 작업한 내용을 VAppBase를 통해 실제 엔진에서 적용되도록 함
따라서 사용자가 Vision의 Application Framework를 사용하기 위해서는 반드시 상속 받아야 함
지난 시간 Framework 개론 복습
Main Class
정리하면 Vision Engine을 실행하는 진입점(흔히 main 함수)는 엔진 내부에 존재
따라서 외부에서 접근해 사용하기 위해서는
별도의 클래스를 만들되, 해당 클래스가 VAppImpl 클래스를 상속 받도록 하면 됨
VAppImpl 클래스를 상속 받은 클래스가 프로그램 진입점처럼 사용됨
# Project Creator로 프로젝트를 제작하면 생기는 기본 클래스
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() : 프로그램 종료 시점에 처리해야 할 일 수행(메모리 해제 등)
Main Class Sample
이번 개발에서는 AfterSceneLoaded()에
직접 구현한 기능을 전부 넣었음
직접 구현한 기능은 contents를 제외하고는 모두 util성 기능이라
Singleton 패턴을 활용했음
따라서 모든 초기화는 해당 함수에서 수행
VFileAccessManager
How to Access File?
Vision Engine에서는 File 경로를 통합해서 관리하는 FileSystem Manager가 존재
무조건 소스파일 있는 곳에 파일을 넣는다고 읽을 수 있지 않음
따라서 최초 지정된 장소를 파악하고,
해당 장소를 기준으로 FileSearchPath를 추가하는 방식으로 확장해야 함
!! references docs는 havok_sdk라고 나왔는데 이는 설치폴더를 향 함
!! 잘 확인하지 않으면 아무것도 불러 올 수 없음
How to Access File?
config.m_sFileSystemRootName = “workspace”;
솔루션 파일이 있는 위치를 최초 위치로 설정 함
init()에서 Append를 통해 경로 추가
How to Access File?
탐색 경로를 VFileAccessManager에 추가 완료
향후 경로 설정은 여기에 추가된 경로를 기반으로 진행 됨
ex)
RayTracer::GetInstance()->SetCursor( "Textures/Gui/Mouse.dds" );
여기서 파일 이 있는 경로는 workspace/Asset/Textures/Gui/Mouse.dds 임
Console
What a Awesome!
Vision Engine이 정말 좋은 이유는
스스로 뭐하고 있는지 알아서 술술 말한다는 것
내부 정보를 어렴풋이라도 확인할 수 있음
단, 사용자가 직접 콘솔을 붙인다는 전제로
(절대 직접 콘솔을 띄워주지 않는다)
Console
stdout에 console을 물려주면 엔진에서 보내는 모든 정보를 받아 console에 띄울 수 있음
(콘솔 디버깅은 보너스)
Scene
scene, vscene file?
저번에 vForge로 만드니깐 필요 없다고 하지 않았던가?
그렇지 않고, 우리는 Scene을 코드로 구성할 것이니깐 vForge에서 Scene을 작업할 필요가 없는 것
가장 기본이 되는 scene은 필요함(아무것도 없는 공백이라도)
그러면 vscene은 뭔가?
vscene file은 vForge에서 scene을 만들고 해당 scene을 엔진에서 돌리기 위해 변형한 file
즉, 엔진에서는 vscene file만 바로 읽어서 사용할 수 있는 것
이 부분은 어쩔수 없으니 vForge에서 Scene을 만들고 export vscene 으로 file을 생성함
scene, vscene file?
finder에 뜨는 건 filename.platform.vscene 을 의미
하지만 코드에서는 아래와 같이 filename.vscene으로만 써도 상관 없음
엔진에서 플랫폼을 구분해 해당 플랫폼 file을 가져다 로딩함
Make Entity
Entity? = Object!
모든 길은 로마 Entity로 향한다
Entity? = Object!
즉, 모든 객체는 Entity로 관리 되며, 조작 된다고 할 수 있음
게다가 Entity는 엔진 내부에서 관리되는 객체이기 때문에
적절한 Api 활용 및 간단한 전달인자 만으로 원하는 기능을 구현 할 수 있다는 장점이 있음
* 애니메이션 변경은 이 한 줄로 끝
RTTI(Runtime Type Information)
Vision Engine에서 제공하는 Vtype 클래스는 클래스의 이름으로 생성 등을 할 수 있도록 지원함
엔진의 주요 클래스는 이름으로 생성이 가능함
RTTI(Runtime Type Information)
RTTI가 적용된 카메라 entity 생성 코드
VisBaseEntity_cl* 를 활용해 해당 entity에 대한 추후 제어
RTTI(Runtime Type Information)
3D 모델을 코드 예제
생성 형태는 편한 방법을 선택해 사용하면 됨
(밑에 코드는 클래스에서 포인터를 유지해 지속적으로 관리)
Make Entity
Entity는 원하는 곳에서 생성하면 됨
하지만, 상식적으로 생각하면 생성할 곳은 AfterSceneLoaded()에서 진행되어야 함을 알 수 있음
entity를 만드는 것은 그야말로 new 하는 것이기 때문에 게임 플레이 중 할 이유가 없음
로딩 타임에 전부 완료 해야 하는 것이 맞기 때문
게다가 Run()은 매번 루프를 돌기 때문에 CreateEntity()를 지날 때 마다 새로운 entity를 만들게 됨
이것은 당연히 우리가 원하는 방향이 아님
Transform, Scale, Rotate
Transform
모든 객체가 VisBaseEntity_cl을 가지고 하기 때문에 같은 형식을 취함
매 루프 position을 지정하는 SetPosition 함수를 사용해 위치를 변경할 수 있음
# hkvVec3는 Vision Engine에서 벡터 값을 처리하는 자료형 임
Rotate(Orientation)
Transform과 동일한 형태
다만 matrix를 직접 넘겨 회전시키는 방법 추가
Rotate(Orientation)
3축 방향이 동일 비율로 Scaling 되는 것과
각 방향 벡터를 직접 넣는 함수가 존재
하지만 직접 사용한 것은 SetScale( hkvVec3 &scale);
- Part 3. 움직여라 움직여 -
The NEXT

More Related Content

What's hot

소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서Kyoung Up Jung
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장sung ki choi
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼mangonamu
 
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기CONNECT FOUNDATION
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)JinKwon Lee
 
Introduce Yeoman
Introduce YeomanIntroduce Yeoman
Introduce Yeoman항희 이
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1Booseol Shin
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전주항 박
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejsNAVER D2
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 라한사 아
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)민지 김
 

What's hot (20)

소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼
 
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
M5 6 1
M5 6 1M5 6 1
M5 6 1
 
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
 
Introduce Yeoman
Introduce YeomanIntroduce Yeoman
Introduce Yeoman
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
Django beginning
Django beginningDjango beginning
Django beginning
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejs
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)
 

Viewers also liked

Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Dong Chan Shin
 
C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니Dong Chan Shin
 
Cloud Camp: The Introduction
Cloud Camp: The IntroductionCloud Camp: The Introduction
Cloud Camp: The Introductioncloudcampnigeria
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지Dong Chan Shin
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링Dong Chan Shin
 
Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석Dong Chan Shin
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinDong Chan Shin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory managementProject anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory managementDong Chan Shin
 
User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리Dong Chan Shin
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usabilityRTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usabilityDong Chan Shin
 

Viewers also liked (18)

Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
 
C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니
 
Cloud Camp: The Introduction
Cloud Camp: The IntroductionCloud Camp: The Introduction
Cloud Camp: The Introduction
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
Bloovue
BloovueBloovue
Bloovue
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링몰입 인지공백 프래그난쯔법칙 스토리텔링
몰입 인지공백 프래그난쯔법칙 스토리텔링
 
Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석Proactor/Reactor Server io 성능 분석
Proactor/Reactor Server io 성능 분석
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
Project anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory managementProject anarchy로 3d 게임 만들기 part_4_network_memory management
Project anarchy로 3d 게임 만들기 part_4_network_memory management
 
User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리User experience Design에 활용되는 각종 용어 정리
User experience Design에 활용되는 각종 용어 정리
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usabilityRTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
RTS 게임 ui에서 확인 할 수 있는 rts 게임 usability
 

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

[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0MinGeun Park
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1진상 문
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)Jinwook On
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기KWANGIL KIM
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2진상 문
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)YOUNGJO CHO
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Minsu Park
 

Similar to Project anarchy로 3d 게임 만들기 part_2_vforge피하기 (20)

[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
피니엔진
피니엔진피니엔진
피니엔진
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
Start unreal
Start unrealStart unreal
Start unreal
 
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 

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

  • 1. Creating 3D Game Client Program With Project Anarchy - Part 2. vForge를 피하고 싶었어 - 분 류 NHN NEXT 1기 실전프로젝트 산출물 실습 업체 블루홀 스튜디오 프로젝트 팀명 그랜드부다페스트(문진상/신동찬) 작성자 신동찬 Created Date 2015-01-04
  • 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 ) - Project Anarchy를 과거 Vision Engine 처럼 사용하는 법 - 윈도우 프로세스로 프로그램 수행 - 카메라 띄우기 - 3D Asset 표시하고 Transform, Scale, Rotate 수행 - vForge를 활용한 게임 개발 - *.model file 등 resource 측면 핸들링 - 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이 설치 되어 있어야 함
  • 5. Base Code( main, loop, etc)
  • 6. 지난 시간 Framework 개론 복습 가장 중요하다 했던 클래스 기억 나시죠?
  • 7. # VAppImpl 클래스( 중요 ) 사용자와 직접 접하는 클래스 VAppBase 클래스는 VAppImpl 클래스의 인스턴스를 가지고 있음 사용자가 작업한 내용을 VAppBase를 통해 실제 엔진에서 적용되도록 함 따라서 사용자가 Vision의 Application Framework를 사용하기 위해서는 반드시 상속 받아야 함 지난 시간 Framework 개론 복습
  • 8. Main Class 정리하면 Vision Engine을 실행하는 진입점(흔히 main 함수)는 엔진 내부에 존재 따라서 외부에서 접근해 사용하기 위해서는 별도의 클래스를 만들되, 해당 클래스가 VAppImpl 클래스를 상속 받도록 하면 됨 VAppImpl 클래스를 상속 받은 클래스가 프로그램 진입점처럼 사용됨 # Project Creator로 프로젝트를 제작하면 생기는 기본 클래스
  • 9. 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() : 프로그램 종료 시점에 처리해야 할 일 수행(메모리 해제 등)
  • 10. Main Class Sample 이번 개발에서는 AfterSceneLoaded()에 직접 구현한 기능을 전부 넣었음 직접 구현한 기능은 contents를 제외하고는 모두 util성 기능이라 Singleton 패턴을 활용했음 따라서 모든 초기화는 해당 함수에서 수행
  • 12. How to Access File? Vision Engine에서는 File 경로를 통합해서 관리하는 FileSystem Manager가 존재 무조건 소스파일 있는 곳에 파일을 넣는다고 읽을 수 있지 않음 따라서 최초 지정된 장소를 파악하고, 해당 장소를 기준으로 FileSearchPath를 추가하는 방식으로 확장해야 함 !! references docs는 havok_sdk라고 나왔는데 이는 설치폴더를 향 함 !! 잘 확인하지 않으면 아무것도 불러 올 수 없음
  • 13. How to Access File? config.m_sFileSystemRootName = “workspace”; 솔루션 파일이 있는 위치를 최초 위치로 설정 함 init()에서 Append를 통해 경로 추가
  • 14. How to Access File? 탐색 경로를 VFileAccessManager에 추가 완료 향후 경로 설정은 여기에 추가된 경로를 기반으로 진행 됨 ex) RayTracer::GetInstance()->SetCursor( "Textures/Gui/Mouse.dds" ); 여기서 파일 이 있는 경로는 workspace/Asset/Textures/Gui/Mouse.dds 임
  • 16. What a Awesome! Vision Engine이 정말 좋은 이유는 스스로 뭐하고 있는지 알아서 술술 말한다는 것 내부 정보를 어렴풋이라도 확인할 수 있음 단, 사용자가 직접 콘솔을 붙인다는 전제로 (절대 직접 콘솔을 띄워주지 않는다)
  • 17. Console stdout에 console을 물려주면 엔진에서 보내는 모든 정보를 받아 console에 띄울 수 있음 (콘솔 디버깅은 보너스)
  • 18. Scene
  • 19. scene, vscene file? 저번에 vForge로 만드니깐 필요 없다고 하지 않았던가? 그렇지 않고, 우리는 Scene을 코드로 구성할 것이니깐 vForge에서 Scene을 작업할 필요가 없는 것 가장 기본이 되는 scene은 필요함(아무것도 없는 공백이라도) 그러면 vscene은 뭔가? vscene file은 vForge에서 scene을 만들고 해당 scene을 엔진에서 돌리기 위해 변형한 file 즉, 엔진에서는 vscene file만 바로 읽어서 사용할 수 있는 것 이 부분은 어쩔수 없으니 vForge에서 Scene을 만들고 export vscene 으로 file을 생성함
  • 20. scene, vscene file? finder에 뜨는 건 filename.platform.vscene 을 의미 하지만 코드에서는 아래와 같이 filename.vscene으로만 써도 상관 없음 엔진에서 플랫폼을 구분해 해당 플랫폼 file을 가져다 로딩함
  • 22. Entity? = Object! 모든 길은 로마 Entity로 향한다
  • 23. Entity? = Object! 즉, 모든 객체는 Entity로 관리 되며, 조작 된다고 할 수 있음 게다가 Entity는 엔진 내부에서 관리되는 객체이기 때문에 적절한 Api 활용 및 간단한 전달인자 만으로 원하는 기능을 구현 할 수 있다는 장점이 있음 * 애니메이션 변경은 이 한 줄로 끝
  • 24. RTTI(Runtime Type Information) Vision Engine에서 제공하는 Vtype 클래스는 클래스의 이름으로 생성 등을 할 수 있도록 지원함 엔진의 주요 클래스는 이름으로 생성이 가능함
  • 25. RTTI(Runtime Type Information) RTTI가 적용된 카메라 entity 생성 코드 VisBaseEntity_cl* 를 활용해 해당 entity에 대한 추후 제어
  • 26. RTTI(Runtime Type Information) 3D 모델을 코드 예제 생성 형태는 편한 방법을 선택해 사용하면 됨 (밑에 코드는 클래스에서 포인터를 유지해 지속적으로 관리)
  • 27. Make Entity Entity는 원하는 곳에서 생성하면 됨 하지만, 상식적으로 생각하면 생성할 곳은 AfterSceneLoaded()에서 진행되어야 함을 알 수 있음 entity를 만드는 것은 그야말로 new 하는 것이기 때문에 게임 플레이 중 할 이유가 없음 로딩 타임에 전부 완료 해야 하는 것이 맞기 때문 게다가 Run()은 매번 루프를 돌기 때문에 CreateEntity()를 지날 때 마다 새로운 entity를 만들게 됨 이것은 당연히 우리가 원하는 방향이 아님
  • 29. Transform 모든 객체가 VisBaseEntity_cl을 가지고 하기 때문에 같은 형식을 취함 매 루프 position을 지정하는 SetPosition 함수를 사용해 위치를 변경할 수 있음 # hkvVec3는 Vision Engine에서 벡터 값을 처리하는 자료형 임
  • 30. Rotate(Orientation) Transform과 동일한 형태 다만 matrix를 직접 넘겨 회전시키는 방법 추가
  • 31. Rotate(Orientation) 3축 방향이 동일 비율로 Scaling 되는 것과 각 방향 벡터를 직접 넣는 함수가 존재 하지만 직접 사용한 것은 SetScale( hkvVec3 &scale);
  • 32. - Part 3. 움직여라 움직여 - The NEXT