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

Dong Chan Shin
Dong Chan ShinGame Programmer em Nexon Korea
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
1 de 32

Recomendados

[NEXT] Android 개발 경험 프로젝트 4일차 (Networking) por
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)YoungSu Son
4.2K visualizações170 slides
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기 por
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
239 visualizações21 slides
쉽게 쓰여진 Django por
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 DjangoTaehoon Kim
24.6K visualizações136 slides
[0618구경원]초보 게임프로그래머를 위한 c++ por
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++KyeongWon Koo
4.3K visualizações58 slides
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation) por
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)성일 한
45.4K visualizações49 slides
온라인 게임 처음부터 끝까지 동적언어로 만들기 por
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
7.7K visualizações62 slides

Mais conteúdo relacionado

Mais procurados

소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안 por
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
73.7K visualizações39 slides
Django개발은 PyCharm에서 por
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서Kyoung Up Jung
18.9K visualizações31 slides
[120316] node.js 프로그래밍 5장 por
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장sung ki choi
3.9K visualizações33 slides
티켓몬스터를 위한 PHP 개발 방법 por
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
7.9K visualizações48 slides
Flask! - python web framework flask 튜토리얼 por
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼mangonamu
718 visualizações53 slides
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기 por
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기CONNECT FOUNDATION
677 visualizações31 slides

Mais procurados(20)

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

Destaque

Project anarchy로 3 d 게임 만들기 part_1 por
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
777 visualizações23 slides
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여 por
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Dong Chan Shin
455 visualizações40 slides
C++ try catch 어디까지 가봤니 por
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니Dong Chan Shin
1.5K visualizações11 slides
Cloud Camp: The Introduction por
Cloud Camp: The IntroductionCloud Camp: The Introduction
Cloud Camp: The Introductioncloudcampnigeria
429 visualizações12 slides
Effective c++ chapter1 2_dcshin por
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
463 visualizações24 slides
Effective c++ chapter5 6_ 131039 신동찬 por
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
444 visualizações31 slides

Destaque(18)

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

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

[액션스크립트] 1부 액션 스크립트 2.0 por
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0MinGeun Park
1.6K visualizações40 slides
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1 por
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1진상 문
1.1K visualizações20 slides
7. html5 api por
7. html5 api7. html5 api
7. html5 api은심 강
989 visualizações50 slides
Light Tutorial Django por
Light Tutorial DjangoLight Tutorial Django
Light Tutorial DjangoKwangyoun Jung
1.7K visualizações27 slides
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기 por
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
2.5K visualizações155 slides
Working Effectively With Legacy Code - xp2005 por
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
1.1K visualizações72 slides

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

[액션스크립트] 1부 액션 스크립트 2.0 por MinGeun Park
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0
MinGeun Park1.6K visualizações
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1 por 진상 문
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
진상 문1.1K visualizações
7. html5 api por 은심 강
7. html5 api7. html5 api
7. html5 api
은심 강989 visualizações
Light Tutorial Django por Kwangyoun Jung
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
Kwangyoun Jung1.7K visualizações
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기 por Chanwoong Kim
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
Chanwoong Kim2.5K visualizações
Working Effectively With Legacy Code - xp2005 por Ryan Park
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park1.1K visualizações
ant로 안드로이드 앱을 자동으로 빌드하자 por Sewon Ann
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
Sewon Ann19K visualizações
웹 Front-End 실무 이야기 por JinKwon Lee
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
JinKwon Lee54.3K visualizações
OpenJigWare(V02.00.04) por Jinwook On
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
Jinwook On529 visualizações
190119 unreal engine c++ 입문 및 팁 por KWANGIL KIM
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
KWANGIL KIM4.7K visualizações
HolubOnPatterns/chapter2_1 por 정환 임
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
정환 임524 visualizações
Holub on-patterns-2-1 por 정환 임
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
정환 임438 visualizações
191221 unreal engine 4 editor 확장하기 por KWANGIL KIM
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기
KWANGIL KIM525 visualizações
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2 por 진상 문
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
진상 문1K visualizações
20131217 html5 por DK Lee
20131217 html520131217 html5
20131217 html5
DK Lee956 visualizações
피니엔진 por 승우 백
피니엔진피니엔진
피니엔진
승우 백1.7K visualizações
Effective c++ 1~8장 por Shin heemin
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
Shin heemin535 visualizações
Start unreal por 대영 노
Start unrealStart unreal
Start unreal
대영 노217 visualizações
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX) por YOUNGJO CHO
PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
YOUNGJO CHO761 visualizações
Ndc2013 정리(upload버전) por Minsu Park
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
Minsu Park4.3K visualizações

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