31
DirectX 3D 7 개개개 개개개 3D 5 개 개개개개

DirectX 3D 7 개월차

  • Upload
    bart

  • View
    111

  • Download
    1

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: DirectX 3D 7 개월차

DirectX 3D7개월차

김성도3D 5 인 프로젝트

Page 2: DirectX 3D 7 개월차

Contents

1. Project Summary 2. Code Style3. Technique4. Responsibility Technique5. Project Key Information

Page 3: DirectX 3D 7 개월차

Project Summary

제작 기간 2012. 03. 21 ~ 2012.04.222012.05.07 ~ 2012. 05. 28

참여 인원 클라이언트 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 동영상 링크• http://youtu.be/dx4HheZaJ6c

Page 4: DirectX 3D 7 개월차

Code Style

1. Objected Oriented Programming2. Access Control KeyWord, Accessor3. Memory Leak, Debug KnowHow4. Comment

Page 5: DirectX 3D 7 개월차

OOP ( 1/ 2)

• Objected Oriented Programming Encapsulation

각 Object 를 독립적으로 만들고 데이터와 함수를 하나의 묶음으로 사용

Information Hiding 외부에서 객체 상태를

바꾸거나 허가되지 않은 동작을 요청하지 못하게 하여 안정성을 확보

Abstraction 동일한 특징을 가진 객체들을

한가지 인터페이스를 유지효율적이고 안전한 설계

Page 6: DirectX 3D 7 개월차

OOP ( 2/ 2)

• Objected Oriented Programming Inheritance

기존의 클래스를 파생시켜 최대한 재활용 하여 시간과 노력을 절약

Polymorphism 똑같은 호출이라도

상황과 객체에 따라 다른 동작을 할 수 있게 하여 객체들을 사용하는 코드를 일관되게 유지

Page 7: DirectX 3D 7 개월차

Access Control KeyWord, Ac-cessor

• 상위 클래스의 멤버 변수를 Pro-tected 로 설정하여 하위 클래스에서만 사용할 수 있도록 하였습니다 .

• 실제 구현 클래스는 Private 을 사용하여 외부에서의 직접적인 접근을 막았습니다 .

• Get, Set 접근자를 지정하여 멤버변수에 직접 접근하지 못하고 간접적으로만 접근 할 수 있게 하였습니다 .

Page 8: DirectX 3D 7 개월차

Memory Leak, Debug KnowHow

• Memory Leak 관리 _CrtSetDbgFlag 함수와 _CrtSetBreakAlloc 함수를

사용하여 Memory Leak 발생여부 체크 두 함수로 찾을 수 없을 경우에 Visual Leak Detector 를

사용하여 Leak 발생위치를 찾음

• Message Box 를 활용하여 오류 발생시 한번에 쉽게 알아 볼 수 있게 하였고 , 중단점을 활용하여 값을 확인한 다음 잘못된 점을 찾아내는 방식으로 Debug 를 하였습니다 .

Page 9: DirectX 3D 7 개월차

Comment

• 주석을 최대한 활용하여 팀원들이 Frame Work 를 잘 이해하고 다시 보더라도 단번에 알아 볼 수 있도록 하였습니다 .

Page 10: DirectX 3D 7 개월차

Technique List

Rendering SkillTexture SplattingDetail MapPersistence Of VisionDepth ShadowSoft ParticleWaterPhong ShadingHigh Dynamic Range

LightningLens FlareSkinningFrustum Culling

Multi - Thread Collision

OBB, AABB, Ray Colli-sion

Design PatternTemplate FactorySingletonMediatorStateStrategy

AlgorithmDDA AlgorithmQuad Tree

Page 11: DirectX 3D 7 개월차

Design Pattern ( 1/ 7 )

• Singleton 최대 1(N) 개로 객체 생성을

제한하기 위하여 사용 Singleton 객체가 전역화

되기 때문에 접근이 쉽게 하기 위해 사용

충돌 , Factory 등

Page 12: DirectX 3D 7 개월차

Design Pattern ( 2/ 7 )

• Factory Method Template Method 로

구체적으로 어떤 클래스의 객체를 생성해야 할 지 미리 몰라도 쉽게 생성

생성할 객체 종류마다 하위 클래스 생성으로 확장성부여

Page 13: DirectX 3D 7 개월차

Design Pattern ( 3/ 7 )

• State Pattern Game 을 시작할 때

Logo, Movie, Select, Game 으로 상태를 나눠서 다양하게 변경 가능하게 제작

Page 14: DirectX 3D 7 개월차

Design Pattern ( 4/ 7 )

• 추가상태 (Character Select, Loading) 가 필요할 경우 분기문을 수정함으로써 반영

Page 15: DirectX 3D 7 개월차

Design Pattern ( 5/ 7 )

Mediator• 타 객체의 정보가 필요한

각각의 객체들이 필요한 정보마다 접근하지 않고 하나로 모아둠으로 M:N의 관계를 M: 1 로 만들어서 개별 클래스의 재 사용성을 늘리고 순환 참조의 범위를 줄였다 .

Page 16: DirectX 3D 7 개월차

Design Pattern ( 6/ 7 )

Strategy• 구현된 Render-

ing 기술로 여러 가지 방식을 사용해야 하는데 Mgr 클래스를 생성하여 Render-ing 기술들의 인터페이스를 하나로 만들어 필요에 따라 맞는 기술을 사용하도록 하였다 .

Page 17: DirectX 3D 7 개월차

Design Pattern ( 7 / 7 )

• ProtoType 자주 생성하는 객체의

정보를 미리 담아두고 필요할 때 마다 새로운 객체를 생성하여 정보를 복사하여 사용한다 .

복사 생성자의 사용

Page 18: DirectX 3D 7 개월차

Multi - Thread

• Multi Thread 긴 작업을 수행 중에 프로그램의 수행을 계속하여 사용자에

대한 응답성을 증가 시킴 Critical Section 을 사용하여 하드웨어 리소스를 공유할 때

서로 간섭 할 수 없게 설계

Page 19: DirectX 3D 7 개월차

STL : Effective Use

• List : 삽입 / 삭제가 빈번 한 객체 관리 • Vector : 삽입 / 삭제가 빈번하지 않은 객체 관리 • Map : Key/Value 를 사용해 Resource 관리

Page 20: DirectX 3D 7 개월차

Responsibility Tech-nique

• Main Frame Work• Phong Shading• Lens Flare• High Dynamic Range Lightning• OBB Collision• Quad Tree, Frustum Culling• Animation Move• Multi - Thread

Page 21: DirectX 3D 7 개월차

Phong Shading

• Phong Shading 정점을 포함하여 내부의 픽셀마다 조명연산을 하여 각

정점단위로 색상 값을 연산하는 Gouraud Shading 보다 더 매끄러운 출력이 가능하게 구현 .

Page 22: DirectX 3D 7 개월차

High Dynamic Range Lightning

• High Dynamic Range Lightning• 디스플레이에 표시되지 않는 강도의 빛을 고려한 처리• 눈부시게 보이는 것 같은 연출 추가• 각 성분에 관해서 256 단계의 정밀도 밖에 없기

때문에 어두운 곳에 있는 희미한 빛에 대해서 큰 차이가 발생한다 .

• 따라서 좀 더 정밀도가 높은 데이터 (HDR) 로 미리 보관해두고 , 디스플레이에 출력할 경우에 256 단계로 복원해 출력한다 .

Page 23: DirectX 3D 7 개월차

High Dynamic Range Lightning

• 구현 과정 A16B16G16R16F ( 부동소수점 ) 형태의 Render Target

에 최초 장면을 Rendering 한다 . 빠른 처리를 위한 축소 버퍼 ( 부동소수점 포맷 ) 에 그린다 . 휘도가 높은 부분만 추출하여 그린다 . 추출한 부분을 크로스필터를 사용하여 6 방향으로 늘리고6 장의 텍스쳐를 합성한 뒤 최초장면에 덧씌워서 출력한다 .

Page 24: DirectX 3D 7 개월차

High Dynamic Range Lightning

Page 25: DirectX 3D 7 개월차

Lens Flare

• Lens Flare• 태양의 화면상의 투영좌표를 저장하고 화면상의

중심을 기준으로 대각으로 반대 점에 한 점을 잡는다 .• 두 점을 잇는 거리를 1 로 변환하고 Flare 를 출력할

곳을 보간 할 T 값을 넣고 추가해준다 . • 스크린으로부터 태양이 얼마나 떨어져있는지 계산하여

강도를 구하고 2D 로 출력한다 .

Page 26: DirectX 3D 7 개월차

Lens Flare

• 강도 구하기

Page 27: DirectX 3D 7 개월차
Page 28: DirectX 3D 7 개월차

Collision

• 처음에는 Sphere Collision 을 이용하여 접근한 몬스터만을 Vector 에 넣어두고 OBB Collision 으로 계산한다 .

• 정교한 충돌 처리를 위하여 무기 에도 OBB Box 로 처리

• 한번 휘두를 때 한번씩 , 다수의 몬스터를 타격 판정 되도록 설계

Page 29: DirectX 3D 7 개월차

Collision

Page 30: DirectX 3D 7 개월차

Project Key Informa-tion

• 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

Page 31: DirectX 3D 7 개월차

Reference

• DirectX9 를 이용한 3D Game PG 입문 : Frank D.Luna 저

• DirectX9 Shader PG : 타카시 이마기레 저• Gof Design Pattern : 에릭 감마 외 3 인• 3D 게임 프로그래밍 : 김용준 저• Effective C++, Effective STL : 스콧 마이어스 저