Download presentation
Presentation is loading. Please wait.
1
DirectX 3D 7개월차 김성도 3D 5인 프로젝트
2
1. Project Summary 2. Code Style 3. Technique 4
1. Project Summary 2. Code Style 3. Technique 4. Responsibility Technique 5. Project Key Information Contents
3
제작 기간 ~ ~ 참여 인원 클라이언트 3명, 모델러 1명, MFC 툴 1명 담당 분야 팀장, 클라이언트 메인 프로그래머 사용언어/개발도구 C/C++, Win32 API, STL, DirectX SDK, HLSL, MFC, FMOD Sound, XML Parsing 3D Max, Photoshop, Mesh View, Direct Show, UE View 동영상 3D Team Project 동영상 링크 Project Summary
4
1. Objected Oriented Programming 2. Access Control KeyWord, Accessor 3
1. Objected Oriented Programming 2. Access Control KeyWord, Accessor 3. Memory Leak, Debug KnowHow 4. Comment Code Style
5
OOP ( 1/ 2) Objected Oriented Programming Encapsulation
Information Hiding 외부에서 객체 상태를 바꾸거나 허가되지 않은 동작을 요청하지 못하게 하여 안정성을 확보 Abstraction 동일한 특징을 가진 객체들을 한가지 인터페이스를 유지 효율적이고 안전한 설계 OOP ( 1/ 2)
6
OOP ( 2/ 2) Objected Oriented Programming Inheritance Polymorphism
기존의 클래스를 파생시켜 최대한 재활용 하여 시간과 노력을 절약 Polymorphism 똑같은 호출이라도 상황과 객체에 따라 다른 동작을 할 수 있게 하여 객체들을 사용하는 코드를 일관되게 유지 OOP ( 2/ 2)
7
Access Control KeyWord, Accessor
상위 클래스의 멤버 변수를 Protected 로 설정하여 하위 클래스에서만 사용할 수 있도록 하였습니다. 실제 구현 클래스는 Private 을 사용하여 외부에서의 직접적인 접근을 막았습니다. Get, Set 접근자를 지정하여 멤버변수에 직접 접근하지 못하고 간접적으로만 접근 할 수 있게 하였습니다. Access Control KeyWord, Accessor
8
Memory Leak, Debug KnowHow
_CrtSetDbgFlag 함수와 _CrtSetBreakAlloc 함수를 사용하여 Memory Leak 발생여부 체크 두 함수로 찾을 수 없을 경우에 Visual Leak Detector 를 사용하여 Leak 발생위치를 찾음 Message Box 를 활용하여 오류 발생시 한번에 쉽게 알아 볼 수 있게 하였고, 중단점을 활용하여 값을 확인한 다음 잘못된 점을 찾아내는 방식으로 Debug를 하였습니다. Memory Leak, Debug KnowHow
9
주석을 최대한 활용하여 팀원들이 Frame Work 를 잘 이해하고 다시 보더라도 단번에 알아 볼 수 있도록 하였습니다.
Comment
10
Technique List Rendering Skill Multi - Thread Texture Splatting
Collision OBB, AABB, Ray Collision Design Pattern Template Factory Singleton Mediator State Strategy Algorithm DDA Algorithm Quad Tree Rendering Skill Texture Splatting Detail Map Persistence Of Vision Depth Shadow Soft Particle Water Phong Shading High Dynamic Range Lightning Lens Flare Skinning Frustum Culling Technique List
11
Design Pattern ( 1/ 7 ) Singleton 최대 1(N)개로 객체 생성을 제한하기 위하여 사용
충돌, Factory 등 Design Pattern ( 1/ 7 )
12
Design Pattern ( 2/ 7 ) Factory Method
Template Method 로 구체적으로 어떤 클래스의 객체를 생성해야 할 지 미리 몰라도 쉽게 생성 생성할 객체 종류마다 하위 클래스 생성으로 확장성부여 Design Pattern ( 2/ 7 )
13
Design Pattern ( 3/ 7 ) State Pattern
Game 을 시작할 때 Logo, Movie, Select, Game 으로 상태를 나눠서 다양하게 변경 가능하게 제작 Design Pattern ( 3/ 7 )
14
추가상태(Character Select, Loading) 가 필요할 경우 분기문을 수정함으로써 반영
Design Pattern ( 4/ 7 )
15
Design Pattern ( 5/ 7 ) Mediator
타 객체의 정보가 필요한 각각의 객체들이 필요한 정보마다 접근하지 않고 하나로 모아둠으로 M:N의 관계를 M: 1로 만들어서 개별 클래스의 재 사용성을 늘리고 순환 참조의 범위를 줄였다. Design Pattern ( 5/ 7 )
16
Design Pattern ( 6/ 7 ) Strategy
구현된 Rendering 기술로 여러 가지 방식을 사용해야 하는데 Mgr 클래스를 생성하여 Rendering 기술들의 인터페이스를 하나로 만들어 필요에 따라 맞는 기술을 사용하도록 하였다. Design Pattern ( 6/ 7 )
17
Design Pattern ( 7 / 7 ) ProtoType
자주 생성하는 객체의 정보를 미리 담아두고 필요할 때 마다 새로운 객체를 생성하여 정보를 복사하여 사용한다. 복사 생성자의 사용 Design Pattern ( 7 / 7 )
18
Multi - Thread Multi Thread
긴 작업을 수행 중에 프로그램의 수행을 계속하여 사용자에 대한 응답성을 증가 시킴 Critical Section 을 사용하여 하드웨어 리소스를 공유할 때 서로 간섭 할 수 없게 설계 Multi - Thread
19
STL : Effective Use List : 삽입/삭제가 빈번 한 객체 관리
Vector : 삽입/삭제가 빈번하지 않은 객체 관리 Map : Key/Value를 사용해 Resource 관리 STL : Effective Use
20
Responsibility Technique
Main Frame Work Phong Shading Lens Flare High Dynamic Range Lightning OBB Collision Quad Tree, Frustum Culling Animation Move Multi - Thread Responsibility Technique
21
Phong Shading Phong Shading
정점을 포함하여 내부의 픽셀마다 조명연산을 하여 각 정점단위로 색상 값을 연산하는 Gouraud Shading 보다 더 매끄러운 출력이 가능하게 구현. Phong Shading
22
High Dynamic Range Lightning
디스플레이에 표시되지 않는 강도의 빛을 고려한 처리 눈부시게 보이는 것 같은 연출 추가 각 성분에 관해서 256단계의 정밀도 밖에 없기 때문에 어두운 곳에 있는 희미한 빛에 대해서 큰 차이가 발생한다. 따라서 좀 더 정밀도가 높은 데이터(HDR) 로 미리 보관해두고, 디스플레이에 출력할 경우에 256 단계로 복원해 출력한다. High Dynamic Range Lightning
23
High Dynamic Range Lightning
구현 과정 A16B16G16R16F (부동소수점) 형태의 Render Target 에 최초 장면을 Rendering 한다. 빠른 처리를 위한 축소 버퍼(부동소수점 포맷)에 그린다. 휘도가 높은 부분만 추출하여 그린다. 추출한 부분을 크로스필터를 사용하여 6방향으로 늘리고 6장의 텍스쳐를 합성한 뒤 최초장면에 덧씌워서 출력한다. High Dynamic Range Lightning
24
High Dynamic Range Lightning
25
Lens Flare 태양의 화면상의 투영좌표를 저장하고 화면상의 중심을 기준으로 대각으로 반대 점에 한 점을 잡는다. 두 점을 잇는 거리를 1로 변환하고 Flare 를 출력할 곳을 보간 할 T값을 넣고 추가해준다. 스크린으로부터 태양이 얼마나 떨어져있는지 계산하여 강도를 구하고 2D로 출력한다. Lens Flare
26
강도 구하기 Lens Flare
28
처음에는 Sphere Collision 을 이용하여 접근한 몬스터만을 Vector에 넣어두고 OBB Collision 으로 계산한다.
정교한 충돌 처리를 위하여 무기 에도 OBB Box 로 처리 한번 휘두를 때 한번씩, 다수의 몬스터를 타격 판정 되도록 설계 Collision
29
Collision
30
Project Key Information
F3 : NonTargeting Camera (WASD, Lbutton Click) F4 : Free Camera (Rbutton Drag, W,S) 1, 2, 3, 4 : Skill O : OBB Box Render Near Merchant, F : Open Store(Rclick : Insert List) WASD Move : Quit Store Project Key Information
31
Reference DirectX9를 이용한 3D Game PG 입문 : Frank D.Luna 저
DirectX9 Shader PG : 타카시 이마기레 저 Gof Design Pattern : 에릭 감마 외 3인 3D 게임 프로그래밍 : 김용준 저 Effective C++, Effective STL : 스콧 마이어스 저 Reference
Similar presentations