1 / 26

Tales V 2.0 분석문서

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

ulf
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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tales V 2.0 분석문서

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

  3. 프로그램의 전체 흐름

  4. Project : Tales File : main.cpp WinMain() : Program Entry MessageLoop() : 게임 이벤트 루프 InitIlluminia() : 게임 엔진 초기화 InitTalesGame() : 게임 객체 초기화 ReleaseGame() : 게임 객체 릴리즈 ReleaseIlluminia() : 게임 엔진 릴리즈 Option 구조체 세팅 Step In • Program 의 Entry 함수.함수의 구조 변경 사항은 없을 것으로 보임. • 단, 지금은 Option 구조체를 한데 뭉뚱그려 놓았는데 이를 기능별로 분리하는 것이 좋을것으로 보임. • 가령 InitOption, GameOption이라든지.

  5. Project : Illuminia File : Illuminia\ Illuminia.cpp 구조개선 여지없음. InitD3D() : DirectX 10 객체 초기화 InitIlluminia() : 게임 엔진 초기화 InitWin32() : Window 초기화. Step In • 여기서부터 코드가 꼬일 기미가 보임. • 후에 설명할 InitTalesGame() 함수 ( 슬라이드 8 참조 ) 에서 초기화되고 있는 모든 관리객체들을이곳으로 가져와야 함.

  6. 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.

  7. Project : Illuminia File : Illuminia\ Illuminia.cpp InitD3D() : DirectX 10 객체 초기화 InitIlluminia() : 게임 엔진 초기화 InitWin32() : Window 초기화. Step Out.

  8. Project : Tales File : main.cpp WinMain() : Program Entry MessageLoop() : 게임 이벤트 루프 InitIlluminia() : 게임 엔진 초기화 InitTalesGame() : 게임 객체 초기화 ReleaseGame() : 게임 객체 릴리즈 ReleaseIlluminia() : 게임 엔진 릴리즈 Option 구조체 세팅 Step In • InitIlluminia() 함수까지 초기화가 끝났다. • 이제 InitTalesGame() 함수로 들어감.* 주의 ! 마음을 단단히 먹고 들어가시오.

  9. 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

  10. Project : TalesCore File : TalesCore.cpp initFSM() : 캐릭터 생성 적 캐릭터의 위치 설정 랜덤 시드 설정. – srand() 주인공 캐릭터의 위치 설정 캐릭터 위치설정 – 중복 방지 • 현재라면 논리상 결함은 없음. • 단, 차후 각 스테이지 별로 초기 주인공 캐릭터의 위치가 fix 되어 있다고 가정하면, 주인공 캐릭터의 생성 뒤에 적 캐릭터를 중복되지 않게 배치하는 것이 맞음. • 그리고 이 루틴은 AI 처리 루틴이 되므로, 스크립팅 언어 embedded 로 작성하는 것이 옳을 것으로 보임. Step Out.

  11. RenderState객체 초기화( Game, Init ) “Init” Render State 로 전환 마우스 관리 객체 초기화 ( 640, 480 ) initFSM() : 캐릭터 생성 ( AI 처리 ) Project : TalesCore File : TalesCore.cpp Effect 로부터 테크닉, 상수변수들 얻기 Mesh 및 애니메이션리소스 초기화 스카이박스 객체 초기화 사운드 매니저 객체 초기화 카메라 객체 초기화( WALKER ) 지형 객체 초기화 월드 및 투사행렬 초기화 상수행렬 초기화 *.fx파일로부터 Effect 생성 InitTalesGame() : 게임 객체 초기화 Step Out

  12. Project : Tales File : main.cpp WinMain() : Program Entry MessageLoop() : 게임 이벤트 루프 InitIlluminia() : 게임 엔진 초기화 InitTalesGame() : 게임 객체 초기화 ReleaseGame() : 게임 객체 릴리즈 ReleaseIlluminia() : 게임 엔진 릴리즈 Option 구조체 세팅 Step In • 게임 내의 모든 객체의 초기화가 끝남. • 이제 사용자 메시지 처리와게임 Render Loop 로 들어감.

  13. Project : Illuminia File : Illuminia\ Illuminia.cpp 메시지 처리 MessageLoop() : 게임 이벤트 루프 현재 시간 얻기 발생한 이벤트가 WM_QUIT 인가 ? renderState->Render() : 초기 or 게임 화면 렌더링 게임 종료 들어온 메시지가 있는가 ? Yes No Yes No • 메시지 및 렌더링 루프. • 각각 윈도우 메시지는 윈도우프로시저에서, 렌더링은RenderState객체에서 처리. • 초기화면 RenderState : RenderInit게임화면 RenderState : RenderGame Step In

  14. 렌더링 분기 1 RenderState = RenderInit ( 초기화면 렌더링 )

  15. 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

  16. 렌더링 분기 2 RenderState = RenderGame ( 게임화면 렌더링 )

  17. Project : TalesCore File : RenderStates\ RenderGame.cpp 마우스 입력에 따라 카메라 조작( yaw, pitch) RenderGame>Render() : 게임화면 렌더링 카메라 이동에 따라 좌표, 뷰 행렬 갱신 카메라 조작( WSAD ) 월드행렬 갱신 지형 렌더링 updateFSM() : 캐릭터 위치갱신 • 큰 문제는 발견되지 않음. 캐릭터 렌더링 Swap Chain present Step Out

  18. 종료 분기 1 WM_QUIT 메시지 입력

  19. Project : Illuminia File : Illuminia\ Illuminia.cpp Step Out 메시지 처리 MessageLoop() : 게임 이벤트 루프 현재 시간 얻기 발생한 이벤트가 WM_QUIT 인가 ? renderState->Render() : 초기 or 게임 화면 렌더링 게임 종료 들어온 메시지가 있는가 ? Yes No Yes No

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

  21. 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

  22. Project : Tales File : main.cpp WinMain() : Program Entry MessageLoop() : 게임 이벤트 루프 InitIlluminia() : 게임 엔진 초기화 InitTalesGame() : 게임 객체 초기화 ReleaseGame() : 게임 객체 릴리즈 ReleaseIlluminia() : 게임 엔진 릴리즈 Option 구조체 세팅 • 게임 종료 이벤트 발생.. Step In

  23. Project : TalesCore File : TalesCore.cpp releaseFSM() : 적 캐릭터 객체 릴리즈 ReleaseGame() : 게임 객체 릴리즈 마우스 입력 객체 릴리즈 사운드 관리 객체 릴리즈 주인공 캐릭터 객체 릴리즈 스카이 박스 반납 • InitTalesGame() 에서생성되었던 모든 객체들이 반납되지 않고 있음. Step Out

  24. Project : Tales File : main.cpp WinMain() : Program Entry MessageLoop() : 게임 이벤트 루프 InitIlluminia() : 게임 엔진 초기화 InitTalesGame() : 게임 객체 초기화 ReleaseGame() : 게임 객체 릴리즈 ReleaseIlluminia() : 게임 엔진 릴리즈 Option 구조체 세팅 Step In

  25. Project : Illuminia File : Illuminia\ Illuminia.cpp 윈도우 클래스 unregister ReleaseIlluminia() : 게임 엔진 릴리즈 Step Out

  26. Project : Tales File : main.cpp WinMain() : Program Entry MessageLoop() : 게임 이벤트 루프 InitIlluminia() : 게임 엔진 초기화 InitTalesGame() : 게임 객체 초기화 ReleaseGame() : 게임 객체 릴리즈 ReleaseIlluminia() : 게임 엔진 릴리즈 Option 구조체 세팅 • 전체종료. • 게임 끝. Step Out

More Related