320 likes | 565 Views
DirectX 3D 7 개월차. 김성도 3D 5 인 프로젝트. 1. Project Summary 2. Code Style 3. Technique 4. Responsibility Technique 5. Project Key Information. Contents. Project Summary. 1. Objected Oriented Programming 2. Access Control KeyWord , Accessor 3. Memory Leak, Debug KnowHow 4. Comment.
E N D
DirectX 3D7개월차 김성도 3D 5인 프로젝트
1. Project Summary 2. Code Style 3. Technique 4. Responsibility Technique 5. Project Key Information Contents
1. Objected Oriented Programming 2. Access Control KeyWord, Accessor 3. Memory Leak, Debug KnowHow 4. Comment Code Style
Objected Oriented Programming • Encapsulation • 각Object를 독립적으로 만들고 데이터와 함수를 하나의 묶음으로 사용 • Information Hiding • 외부에서 객체 상태를 바꾸거나 허가되지 않은 동작을 요청하지 못하게 하여 안정성을 확보 • Abstraction • 동일한 특징을 가진 객체들을 한가지 인터페이스를 유지 • 효율적이고 안전한 설계 OOP ( 1/ 2)
Objected Oriented Programming • Inheritance • 기존의 클래스를 파생시켜 최대한 재활용 하여 시간과 노력을 절약 • Polymorphism • 똑같은 호출이라도 상황과 객체에 따라 다른 동작을 할 수 있게 하여 객체들을 사용하는 코드를 일관되게 유지 OOP ( 2/ 2)
상위 클래스의 멤버 변수를 Protected로 설정하여 하위 클래스에서만 사용할 수 있도록 하였습니다. • 실제 구현 클래스는 Private을 사용하여 외부에서의 직접적인 접근을 막았습니다. • Get, Set 접근자를 지정하여 멤버변수에 직접 접근하지 못하고 간접적으로만 접근 할 수 있게 하였습니다. Access Control KeyWord, Accessor
Memory Leak 관리 • _CrtSetDbgFlag함수와 _CrtSetBreakAlloc함수를 사용하여 Memory Leak 발생여부 체크 • 두 함수로 찾을 수 없을 경우에 Visual Leak Detector 를 사용하여 Leak발생위치를 찾음 • Message Box 를 활용하여 오류 발생시 한번에 쉽게 알아 볼 수 있게 하였고, 중단점을 활용하여 값을 확인한 다음 잘못된 점을 찾아내는 방식으로 Debug를 하였습니다. Memory Leak, Debug KnowHow
주석을 최대한 활용하여 팀원들이 Frame Work 를 잘 이해하고 다시 보더라도 단번에 알아 볼 수 있도록 하였습니다. Comment
Multi - Thread • 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 • PhongShading • High Dynamic Range Lightning • Lens Flare • Skinning • Frustum Culling Technique List
Singleton • 최대 1(N)개로 객체 생성을 제한하기 위하여 사용 • Singleton객체가 전역화 되기 때문에 접근이 쉽게 하기 위해 사용 • 충돌, Factory등 Design Pattern ( 1/ 7 )
Factory Method • Template Method 로 구체적으로 어떤 클래스의 객체를 생성해야 할 지 미리 몰라도 쉽게 생성 • 생성할 객체 종류마다 하위 클래스 생성으로 확장성부여 Design Pattern ( 2/ 7 )
State Pattern • Game을 시작할 때 Logo, Movie, Select, Game 으로 상태를 나눠서 다양하게 변경 가능하게 제작 Design Pattern ( 3/ 7 )
추가상태(Character Select, Loading) 가 필요할 경우 분기문을 수정함으로써 반영 Design Pattern ( 4/ 7 )
Mediator • 타 객체의 정보가 필요한 각각의 객체들이 필요한 정보마다 접근하지 않고 하나로 모아둠으로 M:N의 관계를 M: 1로 만들어서 개별 클래스의 재 사용성을 늘리고 순환 참조의 범위를 줄였다. Design Pattern ( 5/ 7 )
Strategy • 구현된 Rendering기술로 여러 가지 방식을 사용해야 하는데 Mgr클래스를 생성하여 Rendering기술들의 인터페이스를 하나로 만들어 필요에 따라 맞는 기술을 사용하도록 하였다. Design Pattern ( 6/ 7 )
ProtoType • 자주 생성하는 객체의 정보를 미리 담아두고 필요할 때 마다 새로운 객체를 생성하여 정보를 복사하여 사용한다. • 복사 생성자의 사용 Design Pattern ( 7 / 7 )
Multi Thread • 긴 작업을 수행 중에 프로그램의 수행을 계속하여 사용자에 대한 응답성을 증가 시킴 • Critical Section 을 사용하여 하드웨어 리소스를 공유할 때 서로 간섭 할 수 없게 설계 Multi - Thread
List : 삽입/삭제가 빈번 한 객체 관리 • Vector: 삽입/삭제가 빈번하지 않은 객체 관리 • Map: Key/Value를 사용해 Resource관리 STL : Effective Use
Main Frame Work • Phong Shading • Lens Flare • High Dynamic Range Lightning • OBB Collision • Quad Tree, Frustum Culling • Animation Move • Multi - Thread Responsibility Technique
Phong Shading • 정점을 포함하여 내부의 픽셀마다 조명연산을 하여 각 정점단위로 색상 값을 연산하는 GouraudShading 보다 더 매끄러운 출력이 가능하게 구현. Phong Shading
High Dynamic Range Lightning • 디스플레이에 표시되지 않는 강도의 빛을 고려한 처리 • 눈부시게 보이는 것 같은 연출 추가 • 각 성분에 관해서 256단계의 정밀도 밖에 없기 때문에 어두운 곳에 있는 희미한 빛에 대해서 큰 차이가 발생한다. • 따라서 좀 더 정밀도가 높은 데이터(HDR) 로미리 보관해두고, 디스플레이에 출력할 경우에 256단계로 복원해 출력한다. High Dynamic Range Lightning
구현 과정 • A16B16G16R16F (부동소수점) 형태의 Render Target 에 최초 장면을 Rendering한다. • 빠른 처리를 위한 축소 버퍼(부동소수점 포맷)에 그린다. • 휘도가 높은 부분만 추출하여 그린다. • 추출한 부분을 크로스필터를 사용하여 6방향으로 늘리고 6장의 텍스쳐를 합성한 뒤 최초장면에 덧씌워서 출력한다. High Dynamic Range Lightning
Lens Flare • 태양의 화면상의 투영좌표를 저장하고 화면상의 중심을 기준으로 대각으로 반대 점에 한 점을 잡는다. • 두 점을 잇는 거리를 1로 변환하고 Flare를 출력할 곳을 보간 할 T값을 넣고 추가해준다. • 스크린으로부터 태양이 얼마나 떨어져있는지 계산하여 강도를 구하고 2D로 출력한다. Lens Flare
강도 구하기 Lens Flare
처음에는 Sphere Collision 을 이용하여 접근한 몬스터만을Vector에 넣어두고 OBB Collision 으로 계산한다. • 정교한 충돌 처리를 위하여 무기에도 OBB Box 로 처리 • 한번 휘두를 때 한번씩, 다수의 몬스터를 타격 판정 되도록 설계 Collision
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
DirectX9를 이용한 3D Game PG 입문 : Frank D.Luna저 • DirectX9 Shader PG : 타카시이마기레 저 • Gof Design Pattern : 에릭 감마 외 3인 • 3D 게임 프로그래밍 : 김용준 저 • Effective C++, Effective STL : 스콧마이어스 저 Reference