(Microsoft PowerPoint - \301\24613\260\255 - oFusion \276\300 \261\270\274\272)

Similar documents
슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

(Microsoft PowerPoint - \301\24615\260\255 - \303\346\265\271\303\263\270\256)

슬라이드 1

슬라이드 1

슬라이드 1

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)

<4D F736F F F696E74202D20C1A63037B0AD202D20B1A4BFF8B0FA20B1D7B8B2C0DA>

<4D F736F F F696E74202D20C1A63130B0AD202D20C1F6C7FCB0FA20C7CFB4C3C0C720B7BBB4F5B8B5>

<4D F736F F F696E74202D20C1A63137B0AD202D20C1F6C7FCC3E6B5B9C3B3B8AE>

<4D F736F F F696E74202D20C1A63134B0AD202D20BBE7BFF8BCF6BFCD20C8B8C0FC>

슬라이드 1

(Microsoft PowerPoint - \301\24611\260\255 - \276\326\264\317\270\336\300\314\274\307)

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

슬라이드 1

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - 13prac.pptx

Lab 3. 실습문제 (Single linked list)_해답.hwp

ThisJava ..

어댑터뷰

chap10.PDF

슬라이드 1

H3250_Wi-Fi_E.book

DocsPin_Korean.pages

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

2002 Game White paper 2002 Game White paper

슬라이드 1

UNREAL ENGINE

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관

<353120C0CCB8E9C0E72D4E504320C0CEB0F820C1F6B4C9C0BB20C0A7C7D120B9ABB8AEC1FEB1E220B1B8C7F62E687770>

JUNIT 실습및발표


<BABBB9AE2DC7D5C3BC2E687770>

유니티 변수-함수.key

Secure Programming Lecture1 : Introduction

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

K&R2 Reference Manual 번역본

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint 프레젠테이션

04_오픈지엘API.key

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

Microsoft PowerPoint - IP11.pptx

비긴쿡-자바 00앞부속

UI TASK & KEY EVENT

3D MAX + WEEK 9 Hansung Univ. Interior Design

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

UI TASK & KEY EVENT

슬라이드 1

초보자를 위한 C# 21일 완성

Macaron Cooker Manual 1.0.key

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft Word doc

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

PowerPoint 프레젠테이션

교육자료

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - es-arduino-lecture-03

PowerPoint Presentation

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

JMF2_심빈구.PDF

Chapter_02-3_NativeApp

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

No Slide Title

제 1 장 기본 개념

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

Microsoft PowerPoint - Week04_DirectX9 프로그래밍의 기초2.pptx

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

슬라이드 1

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint Presentation

2

Spring Data JPA Many To Many 양방향 관계 예제

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft Word - src.doc

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint Presentation

歯Lecture2.PDF

<4D F736F F F696E74202D C0CCB8EDBFF829C8DEB8D5B8F0BCC7B5A5C0CCC5CDC7A5C1D8C8AD F322E BC8A3C8AF20B8F0B

PowerPoint Presentation

Microsoft PowerPoint - chap01-C언어개요.pptx

슬라이드 1

PowerPoint Presentation

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

ePapyrus PDF Document

11강-힙정렬.ppt

PowerPoint Presentation

untitled

Chapter 4. LISTS

The Pocket Guide to TCP/IP Sockets: C Version

Transcription:

게임엔진 제 13 강 ofusion 씬구성 이대현교수 한국산업기술대학교게임공학과

학습목차 Ofusion 을이용한 export Export 된씬의재현 씬노드애니메이션을이용한수동카메라트래킹

ofusion OGRE3D 엔진용 3D MAX 익스포터 http://www.ofusiontechnologies.com

ofusion 의특징 Realtime Viewport 3D MAX 안에서 OGRE3D 용씬을구성하고, 실시간으로확인및변환이가능 Material System 다양한재질스크립트구현가능 Shader System GPU 파라미터의설정및실시간확인가능 Export 가능 (Professional Edition) Content exporter system 씬, 광원, 카메라, 애니메이션등등 Scene Loader Library OGRE3D 엔진용로더소스제공

ofusion 의설치 3D Max 를설치한후, ofusion 인스톨러를이용하여설치하여, 3D Max 의메뉴에 ofusion 항목이생성됨.

Exporter 메뉴

출력된파일의종류.osm - 카메라, 라이트, 그림자, 애니메이션등 Export 한 Scene 에대한전반적인정보를가지고있음..mesh 3D 메쉬기하정보.material 메쉬재질정보.skeleton 골격애니메이션정보 그외각종 image 파일들 Exporter option 의 Copy Texture 체크

실습 OSMCharacter ofusion 으로출력된캐릭터의재현

실습에필요한파일들 ofusion 로더소스코드 OgreOSMScene.cpp IOSMSceneCallBacks.h OgreOSMScene.h OSMAnimSerializer.h TinyXML 소스코드 Tinystr.cpp Tinyxml.cpp Tinyxmlerror.cpp Tinyxmlparser.cpp Tinystr.h Tinyxmlh ofusion 출력물 GeosungPack.zip BackgroundPack.zip

PlayState.cpp void GameManager::enter(void) { 중략 실습 mosmscene = new OSMScene(mSceneMgr, mroot->getautocreatedwindow()); OSMSceneCallbacks *eventcallbacksfn = new OSMSceneCallbacks(); mosmscene->initialise("geosung.osm", eventcallbacksfn); mosmscene->createscene(); mscenemgr = mosmscene->getscenemanager(); ninjaentity = mscenemgr->getentity("crash_play_cubeboy2"); ninjanode = mscenemgr->getscenenode("crash_play_cubeboy2"); midlestate = ninjaentity->getanimationstate("idle"); mattack2state = ninjaentity->getanimationstate("crash_o"); msidekickstate = ninjaentity->getanimationstate("crash_x"); mcrouchstate = ninjaentity->getanimationstate("stretching_1"); mjumpstate = ninjaentity->getanimationstate("crash_idle"); } 중략

실행결과

ofusion 씬로딩과정 (1) mosmscene = new OSMScene(mSceneMgr, mroot->getautocreatedwindow()); OSMSceneCallbacks *eventcallbacksfn = new OSMSceneCallbacks(); mosmscene->initialise("geosung.osm", eventcallbacksfn); class OSMSceneCallbacks { public: virtual ~OSMSceneCallbacks() {}; virtual void OnNodeCreate(Ogre::SceneNode *pnode, TiXmlElement* pnodedesc) {}; virtual void OnEntityCreate(Ogre::Entity *pentity, TiXmlElement* pentitydesc) {}; virtual void OnCameraCreate(Ogre::Camera *pcamera, TiXmlElement* pcameradesc) {}; virtual void OnLightCreate(Ogre::Light *plight, TiXmlElement* plightdesc) {}; virtual void OnHelperCreated(Ogre::SceneNode* phelper, TiXmlElement* phelperdesc) {}; virtual void OnShapeLoaded(const Ogre::SimpleSpline& spline) {}; virtual bool OnStaticGeometryCreated(Ogre::StaticGeometry* pstatic, const NodeList& nodelist) { return false; } };

ofusion 씬로딩과정 (2) mosmscene->createscene(); mscenemgr = mosmscene->getscenemanager(); ninjaentity = mscenemgr->getentity("crash_play_cubeboy2"); ninjanode = mscenemgr->getscenenode("crash_play_cubeboy2");

실습 OSMScene ofusion 으로출력된씬의재현

PlayState.cpp (1) void GameManager::enter(void) { 중략 실습 mosmscene = new OSMScene(mSceneMgr, mroot->getautocreatedwindow()); mosmscene->initialise("background.osm"); mosmscene->createscene(); mosmscene->initialise("geosung.osm"); mosmscene->createscene(); mscenemgr = mosmscene->getscenemanager(); mcamera = mscenemgr->getcamera("camera01"); mcamnode = mscenemgr->getscenenode("camera01"); mcamtargetnode = mscenemgr->getscenenode("camera01.target"); mbgentity = mscenemgr->getentity("top"); mbgnode = mscenemgr->getscenenode("top"); mcamanim = mscenemgr->getanimation("r_camera_intro"); } 중략

PlayState.cpp (2) 실습 bool PlayState::frameStarted(GameManager* game, const FrameEvent& evt) { 중략 mcamnode->resettoinitialstate(); mcamtargetnode->resettoinitialstate(); static Ogre::Real curtime = 0.0f; curtime += evt.timesincelastframe; mcamanim->apply(curtime); } return mcontinue;

실행결과

씬의구성 mosmscene = new OSMScene(mSceneMgr, mroot->getautocreatedwindow()); mosmscene->initialise("background.osm"); mosmscene->createscene(); mosmscene->initialise("geosung.osm"); mosmscene->createscene(); mscenemgr = mosmscene->getscenemanager(); mcamera = mscenemgr->getcamera("camera01"); mcamnode = mscenemgr->getscenenode("camera01"); mcamtargetnode = mscenemgr->getscenenode("camera01.target"); mbgentity = mscenemgr->getentity("top"); mbgnode = mscenemgr->getscenenode("top"); mcamanim = mscenemgr->getanimation("r_camera_intro");

카메라트래킹설정 mcamnode->resettoinitialstate(); mcamtargetnode->resettoinitialstate(); static Ogre::Real curtime = 0.0f; curtime += evt.timesincelastframe; mcamanim->apply(curtime); <animations> <animation name="r_camera_intro" loop="false" length="3"> <keyframe time="0"> <position x="74.5971" y="102.435" z="-91.6862" /> <rotation w="-0.765747" x="-0.577032" y="-0.226825" z="0.170925" /> <scale x="1" y="1" z="1" /> </keyframe> <keyframe time="0.0333333"> <position x="74.5367" y="102.386" z="-91.7632" /> <rotation w="-0.765747" x="-0.577032" y="-0.226825" z="0.170925" /> <scale x="1" y="1" z="1" /> </keyframe>

실습 CameraTrack 씬노드애니메이션을이용한카메라트래킹

PlayState.cpp (1) void PlayState::enter(void) { 중략 mcamera->setautotracking(true, mninjanode); 실습 mcamnode = mscenemgr->getrootscenenode()->createchildscenenode("camnode"); mcamnode->attachobject(mcamera); Animation* anim = mscenemgr->createanimation("cameratrack", 10); anim->setinterpolationmode(animation::im_spline); NodeAnimationTrack* track = anim->createnodetrack(0, mcamnode); TransformKeyFrame* key = track->createnodekeyframe(0); key = track->createnodekeyframe(2.5); key->settranslate(vector3(500,500,-1000)); key = track->createnodekeyframe(5); key->settranslate(vector3(-1500,1000,-600)); key = track->createnodekeyframe(7.5); key->settranslate(vector3(0,100,0)); key = track->createnodekeyframe(10); key->settranslate(vector3(0,0,0)); } manimstate = mscenemgr->createanimationstate("cameratrack"); manimstate->setenabled(true); 중략

PlayState.cpp (2) 실습 bool PlayState::frameStarted(GameManager* game, const FrameEvent& evt) { 중략 manimstate->addtime(evt.timesincelastframe); } return mcontinue;

PlayState.cpp (1) mcamera->setautotracking(true, mninjanode); mcamnode = mscenemgr->getrootscenenode()->createchildscenenode(); mcamnode->attachobject(mcamera); Animation* anim = mscenemgr->createanimation("cameratrack", 10); anim->setinterpolationmode(animation::im_spline);

PlayState.cpp (1) NodeAnimationTrack* track = anim->createnodetrack(0, mcamnode); TransformKeyFrame* key = track->createnodekeyframe(0); key = track->createnodekeyframe(2.5); key->settranslate(vector3(500,500,-1000)); key = track->createnodekeyframe(5); key->settranslate(vector3(-1500,1000,-600)); key = track->createnodekeyframe(7.5); key->settranslate(vector3(0,100,0)); key = track->createnodekeyframe(10); key->settranslate(vector3(0,0,0));

PlayState.cpp (1) manimstate = mscenemgr->createanimationstate("cameratrack"); manimstate->setenabled(true);

실습과제 #8 카메라트래킹설계 원거리에서카메라로지형위의닌자를포착하면서시작. 닌자로가까이카메라를움직이면서멋진 (?) 카메라트래킹으로접근함. 닌자에가까이오면카메라트래킹을멈추고대전모드로들어감.