Microsoft PowerPoint - GameProgramming16-Camera.ppt

Similar documents
Microsoft PowerPoint - Week04_Rendering Pipeline.pptx

Microsoft PowerPoint - ch02-1.ppt

PowerPoint 프레젠테이션

슬라이드 1

슬라이드 1

???짚?


슬라이드 1

<4D F736F F D20BECBB1E220BDACBFEE20BAA4C5CD2C20C1C2C7A5B0E82C20C1C2C7A5BAAFC8AFC7E0B7C4>

PowerPoint 프레젠테이션

4.1 힘의모멘트 스칼라공식 4.1 힘의모멘트 스칼라공식 모멘트크기 (resultant moment) 2

(Microsoft PowerPoint - CNVZNGWAIYSE.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

<4D F736F F F696E74202D20C1A63134B0AD202D20BBE7BFF8BCF6BFCD20C8B8C0FC>

슬라이드 1


; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

Microsoft PowerPoint - 1학기 11주.ppt [호환 모드]

Microsoft Word - cg07-midterm.doc

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

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

???짚?

OC-17 OC-18 OC-19 OC-20 1인용쇼파 2인용쇼파 스툴 가죽스툴 W900 x D750 x H420 W1700 x D750 x H420 W470 x D400 x H610~830 W400 x D440 x H610~830 색상 : 블랙 색상 : 블랙 색상 :

Microsoft PowerPoint - lecture15-ch6.ppt

제11장 프로세스와 쓰레드

Microsoft PowerPoint - IP11.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

스키 점프의 생체역학적 연구

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 13prac.pptx


단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

Microsoft PowerPoint - lecture16-ch6

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

gnu-lee-oop-kor-lec06-3-chap7

12 CO N T E N T S

11 CO N T E N T S

UI TASK & KEY EVENT

Łø·ŸÕ=¤ ¬ ÇX±xÒ¸ 06 - Èpº– 1

PowerPoint 프레젠테이션

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

Microsoft PowerPoint - additional01.ppt [호환 모드]

2002 Game White paper 2002 Game White paper

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/7) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당

쉽게 풀어쓴 C 프로그래밍

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \


hwp

JAVA PROGRAMMING 실습 08.다형성

ThisJava ..

K&R2 Reference Manual 번역본

Microsoft PowerPoint - es-arduino-lecture-03

PowerPoint Presentation

Microsoft PowerPoint - LA_ch6_1 [호환 모드]

Microsoft PowerPoint - Java7.pptx

슬라이드 1

RVC Robot Vaccum Cleaner

<4D F736F F F696E74202D B30395FBAEDB7BBB5F95FBDBAC5D9BDC7B9F6C6DB5FB1D7B8B2C0DA2E >

Design Issues

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

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

PowerPoint Presentation

Microsoft Word - cg12-midterm-answer

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft PowerPoint - 14주차 강의자료

슬라이드 1

Open GL

PowerPoint 프레젠테이션

윈도우시스템프로그래밍

실감미디어 제작 전문인 과정 1기 결과보고서

R-963)

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

LIDAR와 영상 Data Fusion에 의한 건물 자동추출

PowerPoint Presentation

Contents 4-2 Intoduction Fee-Body Diagam Reactions at Suppots and Connections fo a Two-Dimensional Stuctue Equilibium of a Rigid Body in Two Dimension

Modern Javascript

PowerPoint Presentation

Chapter #01 Subject

슬라이드 1

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

I 문학과 우리 사회 눈 은 다가오는 계절인 봄의 생명력과 연결되어 작품 전체의 분위 기를 주도하고 있다. 1. 문학과 인접 분야 바탕 학습 확인 문제 본문 009쪽 01 4 문학은 음악, 미술 등과 같이 예술의 한 갈래로, 다른 예술 갈래와 달리 언

PowerPoint Presentation


STATICS Page: 7-1 Tel: (02) Fax: (02) Instructor: Nam-Hoi, Park Date: / / Ch.7 트러스 (Truss) * 트러스의분류 트러스 ( 차원 ): 1. 평면트러스 (planar tru

chap 5: Trees

<3136C2F720C6F7B7B3BFF8B0ED2E687770>

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

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

adfasdfasfdasfasfadf

ICT인문사회융합동향 - 2 동향

untitled

PowerPoint Presentation

설계란 무엇인가?

JUNIT 실습및발표

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

슬라이드 1

Transcription:

Biding a Feibe Camea Cass Feibe Camea Camea Design Imementation Detais Camea 예제 3589 28년봄학기 6/4/27 박경신 Camea Design 구현동기 고정된카메라위치설정을위해서 D3DXMatiookAtH( ) 함수사용 장점 : 고정된위치에카메라를놓고목표지점을겨냥 단점 : 사용자입력에반응하여카메라를이동 목표 비행시뮬레이션이나 인칭시점의게임 (e.g. Fist-eson Shooting game) 에적합한유연한 Camea 클래스구현 Camea Design 4 개의카메라벡터 wod coodinate sstem에서의카메라의위치와방향을정의하기위해사용 우향 (ight), 상향 (), 전방 (ook), 위치벡터 (osition vecto) osition vecto ight vecto vecto ook vecto (,, ) 방위벡터 (oientation vectos) 정직교 (othonoma) 직교행렬 (othogona mati) 역행렬 전치행렬 Camea Sace Wod Sace

Camea Design 구현하고자하는카메라동작 6 가지의자유도 (6DOF) itch - 우행벡터를기준으로회전 Yaw - 상향벡터를기준으로회전 o - 전방벡터를기준으로회전 Stafe - 우향벡터방향으로이동 ( 옆걸음질 ) F - 상향벡터방향으로이동 ( 날기 ) Wak - 전방벡터방향으로이동 ( 전, 후진 ) 구현하고자하는카메라타입 AICAFT 6 가지자유도를허용 ANDOBJECT 특정축으로의이동을제한 인칭슈팅게임등과같이주인공이하늘을날수없도록제한함 Camea Design #incde <d3d9.h> cass Camea bic: enm CameaTe ANDOBJECT, AICAFT ; Camea(); Camea(CameaTe cameate); ~Camea(); void stafe(foat nits); // eft/ight void f(foat nits); // /down void wak(foat nits); // fowad/backwad void itch(foat ange); // otate on ight vecto void aw(foat ange); // otate on vecto void o(foat ange); // otate on ook vecto void getviewmati(d3dxmatix* V); void setcameate(cameate cameate); void getosition(d3dxvecto3* os); void setosition(d3dxvecto3* os); void getight(d3dxvecto3* ight); void get(d3dxvecto3* ); void getook(d3dxvecto3* ook); ivate: CameaTe _cameate; D3DXVECTO3 _ight; D3DXVECTO3 _; D3DXVECTO3 _ook; D3DXVECTO3 _os; ; Camea Design #incde camea.h Camea::Camea() _cameate AICAFT; _os D3DXVECTO3(.f,.f,.f); _ight D3DXVECTO3(.f,.f,.f); _ D3DXVECTO3(.f,.f,.f); _ook D3DXVECTO3(.f,.f,.f); Camea::Camea(CameaTe cameate) _cameate cameate; _os D3DXVECTO3(.f,.f,.f); _ight D3DXVECTO3(.f,.f,.f); _ D3DXVECTO3(.f,.f,.f); _ook D3DXVECTO3(.f,.f,.f); Camea::~Camea() void Camea::getosition(D3DXVECTO3* os) *os _os; void Camea::setosition(D3DXVECTO3* os) _os *os; void Camea::getight(D3DXVECTO3* ight) *ight _ight; void Camea::get(D3DXVECTO3* ) * _; void Camea::getook(D3DXVECTO3* ook) *ook _ook; void Camea::setCameaTe(CameaTe cameate) _cameate cameate; View Mati 주어진카메라 vecto 로부터 View Mati ( 뷰행렬 ) 를변환을위하여 Wod sace 의점 q 를 View sace 의점 q 으로변환하는행렬 V 를구해야한다. q qv Wod sace 에서 View sace 로의변환 (viewing tansfomation) 카메라위치가 Wod Sace 의원점에오도록이동시킴 ( 카메라와모든물체 ) ook vecto 가 + 축과일치되도록회전시킴 ( 카메라와모든물체 ) 4 개의카메라벡터 (,, ) (,, ) (,, ) (,, )

View Mati View sace tansfomation 변환행렬 V (,, ) : osition vecto (,, ) : ight vecto (,, ) : vecto (,, ) : ook vecto + + O A B C D + + O A B C D + + O A D B C V (,, ) : oigin V (,, ) : -ais V (,, ) : -ais V (,, ) : -ais View Mati Tansfomation: Tansation 를원점으로이동 ( ) ( ) ( ) T T View Mati Tansfomation: otation 3 개카메라벡터 (,, ) 를월드의축에일치하도록회전 2 2 2 2 2 2 2 2 2 2 2 2 View Mati Tansfomation: otation 3 개카메라벡터 (,, ) 를월드의축에일치하도록회전 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 T - - M M M I M I M

View Mati Tansfomation: V Camea :: getviewmati ( ) 뷰변환행렬 V: V T void Camea::getViewMati(D3DXMATIX* V) // Kee camea's aes othogona to each othe D3DXVec3Nomaie(&_ook, &_ook); D3DXVec3Coss(&_, &_ook, &_ight); D3DXVec3Nomaie(&_, &_); D3DXVec3Coss(&_ight, &_, &_ook); D3DXVec3Nomaie(&_ight, &_ight); // Bid the view mati: foat -D3DXVec3Dot(&_ight, &_os); foat -D3DXVec3Dot(&_, &_os); foat -D3DXVec3Dot(&_ook, &_os); (*V)(, ) _ight.; (*V)(, ) _.; (*V)(, 2) _ook.; (*V)(, 3).f; (*V)(, ) _ight.; (*V)(, ) _.; (*V)(, 2) _ook.; (*V)(, 3).f; (*V)(2, ) _ight.; (*V)(2, ) _.; (*V)(2, 2) _ook.; (*V)(2, 3).f; (*V)(3, ) ; (*V)(3, ) ; (*V)(3, 2) ; (*V)(3, 3).f; otation Ais/Ange 임의의회전축 (ais) 에대한하나의회전각도 (ange) 4 개의숫자로표현한다. 임의의회전축을나타내는단위벡터 a (,, ) 와단위벡터주위로회전각도를나타내는 θ (~36) 값으로구성된다. + a θ (θ, a) + Yaw, itch, o 임의의축을기준으로회전하는변환행렬 D3DXMATIX &D3DXMatiotationAis ( D3DXMATIX *Ot, // ott otation mati CONST D3DXVECTO *V, // abita ais FOAT Ange); // ange of otation (in adians) 예제 : vecto (.77,.77, ) 로정의된축을기준으로 i/2만큼회전 D3DXMATIX ; Y D3DXVECTO3 ais(.77f,.77f,.f); D3DXMatiotationAis(&, &ais, D3DX_I/2.f); Z A - X

Yaw, itch, o Yaw/itch/o /ight/ook vecto 를기준으로회전 ANDOBJECT 에대해서는물체가기울어진상태에서 aw/o 은부자연스러움 Yaw 는 vecto 가아닌 - 축을기준으로회전 o 은이용할수없도록함 Yaw itch o Camea :: itch ( ) and aw ( ) void Camea::itch(foat ange) D3DXMATIX T; D3DXMatiotationAis(&T, &_ight, ange); // otate _ and _ook aond _ight vecto D3DXVec3TansfomCood(&_,&_, &T); D3DXVec3TansfomCood(&_ook,&_ook, &T); void Camea::aw(foat ange) D3DXMATIX T; // otate aond wod (,, ) awas fo and object if( _cameate ANDOBJECT ) D3DXMatiotationY(&T, ange); // otate aond own vecto fo aicaft if( _cameate AICAFT ) D3DXMatiotationAis(&T, &_, ange); // otate _ight and _ook aond _ o -ais D3DXVec3TansfomCood(&_ight,&_ight, &T); D3DXVec3TansfomCood(&_ook,&_ook, &T); Camea :: o ( ) void Camea::o(foat ange) // on o fo aicaft te if( _cameate AICAFT ) D3DXMATIX T; D3DXMatiotationAis(&T, &_ook, ange); // otate _ and _ight aond _ook vecto D3DXVec3TansfomCood(&_ight,&_ight, &T); D3DXVec3TansfomCood(&_,&_, &T); Wak, Stafe, F Stafe/F/Wak /ight/ook vecto 를기준으로이동 이동하고자하는크기 / 방향의벡터를더하면됨 ANDOBJECT: 평면으로움직임을제한하여야함. 위를보는상황에서전진하거나기울이진상황에서옆걸음을해도공중에뜨지않도록함. 계단 / 언덕을오르는방법으로고도가바뀔수있으므로 Camea::setosition 방법을제공하여카메라의높이나위치지정이가능하도록함 + +s s t +t

Camea :: wak, stafe, f ( ) Eame: Camea void Camea::wak(foat nits) // move on on ane fo and object if( _cameate ANDOBJECT ) _os + D3DXVECTO3(_ook.,.f, _ook.) * nits; if( _cameate AICAFT ) _os + _ook * nits; void Camea::stafe(foat nits) // move on on ane fo and object if( _cameate ANDOBJECT ) _os + D3DXVECTO3(_ight.,.f, _ight.) * nits; if( _cameate AICAFT ) _os + _ight * nits; void Camea::f(foat nits) // move on on -ais fo and object if( _cameate ANDOBJECT ) _os. + nits; if( _cameate AICAFT ) _os + _ * nits; Conto Kes W / S 전진 / 후진 (Wak fowad/backwad) A / D 왼쪽 / 오른쪽옆걸음질 (Stafe eft/ight) / F 위 / 아래날기 (F / down) eft / ight aow kes Yaw / Down aow kes itch N / M o Eame: DawBasicScene d3dtiit.h boo DawBasicScene( IDiect3DDevice9* device, // ass in fo cean foat scae); // nifom scae stct Vete Vete() Vete(foat, foat, foat, foat n, foat n, foat n, foat, foat v) _ ; _ ; _ ; _n n; _n n; _n n; _ ; _v v; foat _, _, _; foat _n, _n, _n; foat _, _v; static const DWOD FVF;

Eame: DawBasicScene boo d3d::dawbasicscene(idiect3ddevice9* device, foat scae) static IDiect3DVeteBffe* foo ; static IDiect3DTete9* te ; static ID3DXMesh* ia ; HEST h ; if (device ) if (foo && te && ia) d3d::eease<idiect3dvetebffe9*>(foo); d3d::eease<idiect3dtete9*>(te); d3d::eease<id3dxmesh*>(ia); ese if (!foo &&!te &&!ia) device->ceatevetebffe(6 * sieof(d3d::vete),, d3d::vete::fvf, D3DOO_MANAGED, &foo, ); Vete* v ; foo->ock(,, (void**) &v, ); v[] Vete(-2.f, -2.5f, -2.f,.f,.f,.f,.f,.f); v[] Vete(-2.f, -2.5f, 2.f,.f,.f,.f,.f,.f); v[2] Vete( 2.f, -2.5f, 2.f,.f,.f,.f,.f,.f);. v[5] Vete(-2.f, -2.5f, -2.f,.f,.f,.f,.f,.f); foo->nock(); Eame: DawBasicScene D3DXCeateCinde(device,.5f,.5f, 5.f, 2, 2, &ia, ) D3DXCeateTeteFomFie(device, deset.bm, &te) ese device->setsamestate(, D3DSAM_MAGFITE, D3DTEXF_INEA); device->setsamestate(, D3DSAM_MINFITE, D3DTEXF_INEA); device->setsamestate(, D3DSAM_MIFITE, D3DTEXF_OINT); D3DXVECTO3 di(.77f, -.77f,.77f); D3DXCOO co(.f,.f,.f,.f); D3DIGHT9 ight d3d::initdiectionaight(&di, &co); device->setight(, &ight); device->ightenabe(, te); device->setendestate(d3ds_nomaizenomas, te); device->setendestate(d3ds_secaenabe, te); // ende D3DXMATIX T,,, S; D3DXMatiScaing(&S, scae, scae, scae); D3DXMatiotationX(&, -D3DX_I *.5f); Eame: DawBasicScene // daw foo D3DXMatiIdentit(&T); T T * S; device->settansfom(d3dts_wod, &T); device->setmateia(&d3d::white_mt); device->settete(, te); device->setsteamsoce(, foo,, sieof(vete)); device->setfvf(vete::fvf); device->dawimitive(d3dt_tiangeist,, 2); // daw ia device->setmateia(&d3d::be_mt); device->settete(, ); fo (int i ; I < 5; i++) D3DXMatiTansation(&T, -5.f,.f, -5.f + (i * 7.5f)); T T * S; device->settansfom(d3dt_wod, &); ia->dawsbset(); D3DXMatiTansation(&T, 5.f,.f, -5.f + (i * 7.5f)); * T * S; device->settansfom(d3dt_wod, &); ia->dawsbset(); etn te; Eame: Camea #incde d3dhee.h #incde d3dtiit.h #incde camea.h IDiect3DDevice9* Device ; const int Width 64; const int Height 48; Camea TheCamea(Camea::ANDOBJECT); boo Set() d3d::dawbasicscene(device,.f); // ojection mati D3DXMATIX oj; D3DXMatiesectiveFovH(&oj, D3DX_I *.25f, (foat) Width/ (foat) Height,.f,.f); Device->SetTansfom(D3DTS_OJECTION, &oj); etn te; void Cean() // ass fo the fist aamete to cean d3d::dawbasicscene(,.f);

Eame: Camea Eame: Camea boo Disa(foat timedeta) if (Device) if (::GetAsncKeState( W ) & 8f) TheCamea.wak( 4.f*timeDeta); if (::GetAsncKeState( S ) & 8f) TheCamea.wak( -4.f*timeDeta); if (::GetAsncKeState( A ) & 8f) TheCamea.stafe( -4.f*timeDeta); if (::GetAsncKeState( D ) & 8f) TheCamea.stafe( 4.f*timeDeta); if (::GetAsncKeState( ) & 8f) TheCamea.f( 4.f*timeDeta); if (::GetAsncKeState( F ) & 8f) TheCamea.f( -4.f*timeDeta); if (::GetAsncKeState(VK_) & 8f) TheCamea.itch(.f*timeDeta); if (::GetAsncKeState(VK_DOWN) & 8f) TheCamea.itch( -.f*timedeta); if (::GetAsncKeState(VK_EFT) & 8f) TheCamea.aw( -.f*timedeta); if (::GetAsncKeState(VK_IGHT) & 8f) TheCamea.aw(.f*timeDeta); if (::GetAsncKeState( N ) & 8f) TheCamea.o(.f*timeDeta); if (::GetAsncKeState( M ) & 8f) TheCamea.o( -.f*timedeta); // date the view mati eesenting the camea D3DXMATIX V; TheCamea.getViewMati(&V); Device->SetTansfom(D3DTS_VIEW, &V); // ende Device->Cea(,, D3DCEA_TAGET D3DCEA_ZBFFE,,.f, ); Device->BeginScene(); d3d::dawbasicscene(device,.f); Device->EndScene(); Device->esent(,,, ); etn te;