Tales V 2.0
This presentation is the property of its rightful owner.
Sponsored Links
1 / 26

Tales V 2.0 분석문서 PowerPoint PPT Presentation


  • 93 Views
  • Uploaded on
  • Presentation posted in: General

Tales V 2.0 분석문서. How to Read it ?. 흐름도 ( Flow Chart ) 위주로 되어 있으니 , 슬라이드 한 장 한 장 넘겨가며 읽을 것 . 우측 상단에 설명할 함수 명과 간략한 기능이 소개되어 있음 . 좌측 상단에 설명할 함수가 있는 프로젝트 이름과 해당 프로젝트 내의 파일 경로가 기입되어 있음 . 흐름도는 슬라이드 좌측 칸 안에 각 기능별로 기술됨 . ( 좌측 상단에서 좌측 하단으로 읽기 ) 다음 슬라이드에서 함수 안으로 진입 :

Download Presentation

Tales V 2.0 분석문서

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Tales v 2 0

Tales V 2.0

분석문서


Tales v 2 0

How to Read it ?

  • 흐름도 ( Flow Chart ) 위주로되어 있으니, 슬라이드 한 장 한 장넘겨가며 읽을 것.

  • 우측 상단에 설명할 함수 명과 간략한 기능이 소개되어 있음.

  • 좌측 상단에 설명할 함수가 있는 프로젝트 이름과 해당 프로젝트내의 파일 경로가기입되어 있음.

  • 흐름도는 슬라이드 좌측 칸 안에 각 기능별로 기술됨.( 좌측 상단에서 좌측 하단으로 읽기 )

  • 다음 슬라이드에서 함수 안으로 진입 :

  • 현재 슬라이드에서 함수 끝 :

  • 코멘트를 잘 읽을 것.

Step In.

Step Out.


Tales v 2 0

프로그램의 전체 흐름


Tales v 2 0

Project : Tales

File : main.cpp

WinMain() : Program Entry

MessageLoop() : 게임 이벤트 루프

InitIlluminia() : 게임 엔진 초기화

InitTalesGame() : 게임 객체 초기화

ReleaseGame() : 게임 객체 릴리즈

ReleaseIlluminia() : 게임 엔진 릴리즈

Option 구조체 세팅

Step In

  • Program 의 Entry 함수.함수의 구조 변경 사항은 없을 것으로 보임.

  • 단, 지금은 Option 구조체를 한데 뭉뚱그려 놓았는데 이를 기능별로 분리하는 것이 좋을것으로 보임.

  • 가령 InitOption, GameOption이라든지.


Tales v 2 0

Project : Illuminia

File : Illuminia\ Illuminia.cpp

구조개선

여지없음.

InitD3D() : DirectX 10 객체 초기화

InitIlluminia() : 게임 엔진 초기화

InitWin32() : Window 초기화.

Step In

  • 여기서부터 코드가 꼬일 기미가 보임.

  • 후에 설명할 InitTalesGame() 함수 ( 슬라이드 8 참조 ) 에서 초기화되고 있는 모든 관리객체들을이곳으로 가져와야 함.


Tales v 2 0

Project : Illuminia

File : Support\

D3D.cpp

Frame Buffer 얻어오고, RTV 생성

Swap Chain Description 초기화

Device 및 Swap Chain 생성 ( HAL )

Depth-Stencil Texture, View 생성

OM Stage 에 DS view, RTV 병합

뷰포트 지정

InitD3D() : DirectX 10 객체 초기화

윈도우 영역 계산

IF( FAIL ) : REF 로 생성

IF( FAIL) : 객체생성 불가

  • 각 스테이지별FAIL 검사 있음.

  • 여기서는 DX API 함수를 사용하므로, 함수명을 표기하지 않음.

  • 한 함수가 너무 많은 객체를 초기화함.루틴을 나누는 것이 좋을 듯.

  • GPU Rendering 을 위한 RTV 생성을 고려해야 함.

  • RTV : Render Target View

  • DS View : Depth-Stencil View

Step Out.


Tales v 2 0

Project : Illuminia

File : Illuminia\ Illuminia.cpp

InitD3D() : DirectX 10 객체 초기화

InitIlluminia() : 게임 엔진 초기화

InitWin32() : Window 초기화.

Step Out.


Tales v 2 0

Project : Tales

File : main.cpp

WinMain() : Program Entry

MessageLoop() : 게임 이벤트 루프

InitIlluminia() : 게임 엔진 초기화

InitTalesGame() : 게임 객체 초기화

ReleaseGame() : 게임 객체 릴리즈

ReleaseIlluminia() : 게임 엔진 릴리즈

Option 구조체 세팅

Step In

  • InitIlluminia() 함수까지 초기화가 끝났다.

  • 이제 InitTalesGame() 함수로 들어감.* 주의 ! 마음을 단단히 먹고 들어가시오.


Tales v 2 0

RenderState객체 초기화( Game, Init )

initFSM() : 캐릭터 생성 ( AI 처리 )

마우스 관리 객체 초기화 ( 640, 480 )

“Init” Render State 로 전환

Project : TalesCore

File : TalesCore.cpp

  • 가장 골 때리는 함수.

  • 모든 객체의 초기화 루틴이 들어와 있다.대부분 initIlluminia() 로 옮기는 것이 합당.

  • 쉐이더에서 상수변수들을 굉장히 많이가져오는데, 객체 별로 쉐이더 파일을 분할하든지 하는 대책이필요함. 이 때문에 코드가 더 복잡해 보임.

  • 상수변수들은 반드시 각 관리객체에서 가져 올 것.

  • 애니메이션 리소스 파일경로 등을 String Table 로 관리하는 것은 어떨지 ?

  • Render 함수들을 State 패턴으로 처리한 것은 정말 탁월한 선택이었음 ! 최초의 RenderState는 초기화면을 그릴 객체인 RenderInit객체.

  • initFSM() 에서 Lua등 스크립팅 언어 처리가 필요함.

Effect 로부터 테크닉, 상수변수들 얻기

사운드 매니저 객체 초기화

스카이박스 객체 초기화

Mesh 및 애니메이션리소스 초기화

카메라 객체 초기화( WALKER )

상수행렬 초기화

지형 객체 초기화

월드 및 투사행렬 초기화

*.fx파일로부터 Effect 생성

InitTalesGame() : 게임 객체 초기화

Step In


Tales v 2 0

Project : TalesCore

File : TalesCore.cpp

initFSM() : 캐릭터 생성

적 캐릭터의 위치 설정

랜덤 시드 설정. – srand()

주인공 캐릭터의 위치 설정

캐릭터 위치설정 – 중복 방지

  • 현재라면 논리상 결함은 없음.

  • 단, 차후 각 스테이지 별로 초기 주인공 캐릭터의 위치가 fix 되어 있다고 가정하면, 주인공 캐릭터의 생성 뒤에 적 캐릭터를 중복되지 않게 배치하는 것이 맞음.

  • 그리고 이 루틴은 AI 처리 루틴이 되므로, 스크립팅 언어 embedded 로 작성하는 것이 옳을 것으로 보임.

Step Out.


Tales v 2 0

RenderState객체 초기화( Game, Init )

“Init” Render State 로 전환

마우스 관리 객체 초기화 ( 640, 480 )

initFSM() : 캐릭터 생성 ( AI 처리 )

Project : TalesCore

File : TalesCore.cpp

Effect 로부터 테크닉, 상수변수들 얻기

Mesh 및 애니메이션리소스 초기화

스카이박스 객체 초기화

사운드 매니저 객체 초기화

카메라 객체 초기화( WALKER )

지형 객체 초기화

월드 및 투사행렬 초기화

상수행렬 초기화

*.fx파일로부터 Effect 생성

InitTalesGame() : 게임 객체 초기화

Step Out


Tales v 2 0

Project : Tales

File : main.cpp

WinMain() : Program Entry

MessageLoop() : 게임 이벤트 루프

InitIlluminia() : 게임 엔진 초기화

InitTalesGame() : 게임 객체 초기화

ReleaseGame() : 게임 객체 릴리즈

ReleaseIlluminia() : 게임 엔진 릴리즈

Option 구조체 세팅

Step In

  • 게임 내의 모든 객체의 초기화가 끝남.

  • 이제 사용자 메시지 처리와게임 Render Loop 로 들어감.


Tales v 2 0

Project : Illuminia

File : Illuminia\ Illuminia.cpp

메시지 처리

MessageLoop() : 게임 이벤트 루프

현재 시간 얻기

발생한 이벤트가 WM_QUIT 인가 ?

renderState->Render() : 초기 or 게임 화면 렌더링

게임 종료

들어온 메시지가 있는가 ?

Yes

No

Yes

No

  • 메시지 및 렌더링 루프.

  • 각각 윈도우 메시지는 윈도우프로시저에서, 렌더링은RenderState객체에서 처리.

  • 초기화면 RenderState : RenderInit게임화면 RenderState : RenderGame

Step In


Tales v 2 0

렌더링 분기 1

RenderState = RenderInit

( 초기화면 렌더링 )


Tales v 2 0

Project : TalesCore

File : RenderStates\ RenderInit.cpp

RenderState를 RenderGame으로전환

입력 받은 좌표가 261 <= x <= 381 이고 370<= y <= 416일 경우

입력 받은 좌표가 261 <= x <= 381 이고 204 <= y <= 249 일 경우

텍스쳐 읽어오기

텍스쳐를back buffer 에 그림

Swap Chain 을 present

게임 종료

RenderInit->Render() : 초기화면 렌더링

마우스 입력 받음

No

Yes

Yes

No

  • 최초로 게임이 로드되면 실행될 Render 함수.

  • ‘버튼이벤트’ 가 따로 없이, 그냥 윈도우의특정 영역 선택으로 이후의 스테이트를판정함.

Step Out


Tales v 2 0

렌더링 분기 2

RenderState = RenderGame

( 게임화면 렌더링 )


Tales v 2 0

Project : TalesCore

File : RenderStates\ RenderGame.cpp

마우스 입력에 따라 카메라 조작( yaw, pitch)

RenderGame>Render() : 게임화면 렌더링

카메라 이동에 따라 좌표, 뷰 행렬 갱신

카메라 조작( WSAD )

월드행렬 갱신

지형 렌더링

updateFSM() : 캐릭터 위치갱신

  • 큰 문제는 발견되지 않음.

캐릭터 렌더링

Swap Chain present

Step Out


Tales v 2 0

종료 분기 1

WM_QUIT 메시지 입력


Tales v 2 0

Project : Illuminia

File : Illuminia\ Illuminia.cpp

Step Out

메시지 처리

MessageLoop() : 게임 이벤트 루프

현재 시간 얻기

발생한 이벤트가 WM_QUIT 인가 ?

renderState->Render() : 초기 or 게임 화면 렌더링

게임 종료

들어온 메시지가 있는가 ?

Yes

No

Yes

No


Tales v 2 0

종료 분기 2

초기화면에서 ‘종료’ 에 해당하는 좌표 클릭


Tales v 2 0

Project : TalesCore

File : RenderStates\ RenderInit.cpp

RenderState를 RenderGame으로전환

입력 받은 좌표가 261 <= x <= 381 이고 370<= y <= 416일 경우

입력 받은 좌표가 261 <= x <= 381 이고 204 <= y <= 249 일 경우

텍스쳐 읽어오기

텍스쳐를back buffer 에 그림

Swap Chain 을 present

게임 종료

RenderInit->Render() : 초기화면 렌더링

마우스 입력 받음

No

Yes

Yes

No

Step Out


Tales v 2 0

Project : Tales

File : main.cpp

WinMain() : Program Entry

MessageLoop() : 게임 이벤트 루프

InitIlluminia() : 게임 엔진 초기화

InitTalesGame() : 게임 객체 초기화

ReleaseGame() : 게임 객체 릴리즈

ReleaseIlluminia() : 게임 엔진 릴리즈

Option 구조체 세팅

  • 게임 종료 이벤트 발생..

Step In


Tales v 2 0

Project : TalesCore

File : TalesCore.cpp

releaseFSM() : 적 캐릭터 객체 릴리즈

ReleaseGame() : 게임 객체 릴리즈

마우스 입력 객체 릴리즈

사운드 관리 객체 릴리즈

주인공 캐릭터 객체 릴리즈

스카이 박스 반납

  • InitTalesGame() 에서생성되었던 모든 객체들이 반납되지 않고 있음.

Step Out


Tales v 2 0

Project : Tales

File : main.cpp

WinMain() : Program Entry

MessageLoop() : 게임 이벤트 루프

InitIlluminia() : 게임 엔진 초기화

InitTalesGame() : 게임 객체 초기화

ReleaseGame() : 게임 객체 릴리즈

ReleaseIlluminia() : 게임 엔진 릴리즈

Option 구조체 세팅

Step In


Tales v 2 0

Project : Illuminia

File : Illuminia\ Illuminia.cpp

윈도우 클래스 unregister

ReleaseIlluminia() : 게임 엔진 릴리즈

Step Out


Tales v 2 0

Project : Tales

File : main.cpp

WinMain() : Program Entry

MessageLoop() : 게임 이벤트 루프

InitIlluminia() : 게임 엔진 초기화

InitTalesGame() : 게임 객체 초기화

ReleaseGame() : 게임 객체 릴리즈

ReleaseIlluminia() : 게임 엔진 릴리즈

Option 구조체 세팅

  • 전체종료.

  • 게임 끝.

Step Out


  • Login