포트폴리오/게임스쿨 졸작 19

17. 포그설정

물속 포그를 설정하려고 버텍스 하나를 생성해보았는데 별안간 제대로 생성이 안되고 자꾸 버텍스 위치가 엉뚱하게 되는것이었다. 아무리 봐도 별이상은 없는데 안되길래 되는 버텍스파트를 갖다고 한줄한줄 비교해보면서 실험해봤다. 아래는 잘못된 코드 m_pDev->SetStreamSource(0, m_pVB_Wall, 0, sizeof(FVF_SURFACE)); m_pDev->SetFVF(FVF_SURFACE); 결국 원인은 스트림쪽에 메시크기를 넣어야 하는데 FVF 크기를 넣어서 그렇게 된것이었다. 이 간단한것이 왜그리 안보이던지 ㅡㅡ; 아무래도 삽질을 좀 더 해봐야 할듯.. 아래는 수정된 코드 m_pDev->SetStreamSource(0, m_pVB_Wall, 0, sizeof(SURFACE_MESH)); m..

16. 화면 꾸미기

현재 적함의 추적과 공격까지는 완성이 되었다. 이제 할일은 보기좋게 꾸미는일이 남았는데 크게는 다음과 같다. - 수면렌더링 - 물속 객체들 배치(물풀, 바위등) - 안될 가능성높음 - 물속 분위기에 맞게 빛조절 - 포그 - 어뢰및 폭뢰발사시 물방울효과 - 배및 잠수함 기동시 물방울효과 - UI갱신 - 어뢰발사후 중간에 정지시 메모리정리 안되는 문제 - 와이어모드일때 각 클래스별로 처리하기 그래서 우선적으로 수면렌더링부터 처리하기로 했다. 사실 첨부터 염두에 두고 있었던 코드가 있었는데 중간에 구현하다 포기했었고(속도가 너무 안나와서) 두번째 방법은 일단 환경맵으로 보기만 좋게 우선 구현하고 버텍스 쉐이더로 버텍스를 움직이는걸 해볼까 한다. 인터넷과 책에 있는 여러 바다렌더링용 쉐이더와 코드를 봤는데 당장..

14. 지면과 수면충돌처리

물속 바닥과 충돌시, 물위로 올라왔을때 수평처리 바닥 충돌시 충격파를 모사하기 위해 여러효과를 구상해 봤는데 아래와 같다. 1. 선체 떨리기 2. 번쩍이는 화면효과 3. 물속 뿌연 먼지나기 4. 데미지 세팅 5. 기체 수평 여기서 일단 1번과 5번만 구현해놓고 다른건 셰이더쪽에서 구현하기로 했다. 또한 물위로 올라왔을때는 바로 수평으로 처리하는것 보다는 위 아래로 피치 운동을 하면서 높이값을 수면과 동일하게 맞춰졌더니 물위로 올라오는 효과가 그럴싸하게 구현되었다.

13. 파도구현 실패

3일동안 파도만 생각했더니 머리가 다 아프네... 4일째까지 구현하다 안되면 걍 환경맵핑처리로만 가야겠다. 오리가 나오는 유명한 파도 데모를 구해서 붙일시도만 4일을 했다. ㅡㅡ;; 그러나 결과는 대 실패!! 실패원인을 분석해보니 소스분석을 얕게하고 무조건 소스를 갖다 붙일생각만 해서 그런거 같다. 카메라쪽파트가 내가 구현하고 있는 소스쪽으로 너무 억지로 이것저것 건드렸더니 프레임도 안나오고 오히려 원본보다 안좋아 졌다. 일단은 이건 패스를 하고 다른 구현이 끝난후 다시 시도를 하던지 다른 소스를 찾아봐야겠다.

12. 약간 개선된 카메라파트

이번에 카메라 클래스를 원래 함께있던 게임씬에서 분리해내면서 예상치 못한 문제들이 발생했다. 기존에는 카메라 포인터를 여기저기서 가져다가 쓰면서도 하나의 테두리 안에 위치해 있어서 카메라변환시 큰 문제가 없었지만 카메라 클래스 자체를 분리를 하자 이 포인터를 게임씬에 어떻게 공급할지가 우선 큰 문제였다. 그래서 해결방법으로는 카메라 클래스들만 관리하는 카메라 관리자 클래스를 하나 생성한뒤 아무 제약이 없는 자유카메라만 우선적으로 만든뒤에 게임씬 생성시 이 포인터를 넘겨주는것으로 일차 마무리는 되었다. 하지만 바로 또 문제가 발생하였는데 스카이 박스의 조종사 카메라 기준으로 처리시에 바뀐 카메라 포인터를 넘겨 주어야 하지만 서로 분리된 클래스에게 포인터를 넘겨줄 방법이 마땅히 떠오르지 않았다. 계속 소스를..

11. 소스정리 작업과 그후 할 작업들

리팩토리작업을 하던중 일차적으로 소스정리까지 겸해서 깨끗하게 정리했다. 기본유닛 클래스인 CPlane, CShip, CSubMarine 클래스들을 CActor 클래스로 합쳤고 CEnemy, CEnemySub, CEnemyShip, CHero, CHeroSub, CHeroShip 클래스들도 싹 정리해서 CHeroEx, CEnemyEx로 정리하고 나니 속이 다 후련하다. 또한 이벤트리시버를 받는 구조도 전에 게임씬과 인트로씬만 작성한거에서 카메라를 따로 분리해서 독립적으로 해놓은거 또한 성과중에 하나일듯 싶다. 아래는 비주얼 스튜디오에서 제공하는 다이어그램으로 작성한 유닛클래스 다이어그램이다. 아래는 이벤트리시버 다이어그램이다. 카메라가 따로 분리되어 나온걸 알수있다. 큰 뼈대는 이제 대충 마무리 된듯싶다...

10. 스트래티지 패턴적용

슬슬 중간 점검과 리팩토링을 고려해볼때가 된거 같다. 물론 지형과 기타 필요한 꾸미기가 들어가지를 않았으나 중요핵심요소를 구현했고 충돌체크까지 체크되었으니 메인뼈대는 완성되었다고 보면 될듯하다. 이 뼈대를 중간점검해서 좀더 튼튼히 만들어야 다음 확장때도 무리가 없을듯 싶다. 일단 첨에 잡은 주요일정을 다시 살펴보면 다음과 같다. 전체목표 - 5월 23일~29일 (2주) : 맵구성, 카메라구성, 리소스다듬기, 라이트처리 - 5월 30일~6월 5일 (3주) : 충돌처리, 효과처리 - 6월 6일~12일 (4주) : 충돌처리, 효과처리 - 6월 13일~19일 (5주) : 프레임별 구성처리 - 6월 20일~26일 (6주) : 사운드작업, - 6월 27일~7월 3일 (7주) : 디버깅작업 - 7월 4일~7월 10일..

9. 문서화 작업도 빼먹으면 안돼지요. - 독시젠작업

논리적 구조화 작업도 테스트까지는 끝냈고 문서화작업도 더이상 늦추면 안될듯 하다. 슬슬 시작해야겠다.. (이미 늦었음) 원칙은 이미 유명한 블로그인 아래의것을 따르기로 했다. http://a.tk.co.kr/130 그중에서 쓰기 쉬운 몇가지만 고르면 - 소스 파일의 최상단에 파일명, 날짜, 제작자, 설명을 명기한다. - 클래스 및 구조체 인터페이스 윗부분에 클래스 명, 날짜, 제작자, 설명 등을 첨부한다. - 클래스 / 구조체 멤버 변수 주석은 공백 1칸을 띄우고 "///

7. 어뢰와 폭뢰 클래스 제작

일단 전반적인 상속상황을 살펴보면 아래와 같다. - src │ ├- GameProc : 실제 게임메인 프레임 │ ├- AirCraft : 비행체관련 클래스들 │ ├- CPlane : 비행체 추상클래스 │ └- CHero : 주인공비행기 클래스 │ ├- System : 게임의 전체적인 영향을주는 클래스들 │ └- CCamera: 각 시점별 카메라 │ ├- Unit : 게임에서 쓰이는 모든 객체의 추상클래스 │ └- CUnit : │ ├- Weapon : │ └- CBullet : │ ├- CRailGun │ │ └- CTornado │ ├- CMissile │ ├- CAntiSubBomb │ └- CTorpedo │ ├- Ships : │ └- CShip : │ ├- CHeroShip : │ └- CSub..

6. 메모리 릭 잡기

문자열쪽에 메모리릭이 발생되는걸로 봐서 문자열에 관여하는 어떤 함수가 생각났다. 바로 와이드ANSI 변환 함수들!! 헤더파일 // 유니코드를 ANSI코드로 char* LPCWSTR2STR(const WCHAR* wstr); void LPCWSTR2STR_Release(char* str); // ANSI코드를 유니코드로 WCHAR* LPCSTR2WSTR(const char* str); void LPCSTR2WSTR_Release(WCHAR* wstr); 본체 //>> 유니코드에서 ANSI 문자열로의 변환 방법 char* LPCWSTR2STR(const WCHAR* wstr) { if ( wstr ) { char* str = NULL; int nLen = WideCharToMultiByte(CP_ACP, 0..

개발 5일차

* 오늘의 목표 - 카메라... 카메라를 위치와 키입력에 맞게 - 무기발사... 미사일클래스를 개조한 어뢰와 폭뢰 클래스제작 - 슬슬 전체적인 메인프레임을 만들준비를... 미니테스트하기(로그인 ... 게임화면 ... 결과) * 작업 기존 미사일 클래스에서 CArrayList 로 되어 있는걸 STL의 List로 바꿔보기 젠장 미사일 클래스를 붙여넣었는데 미사일이 발사되면 없어져버린다. 이유가 멀까? - Plane 클래스의 m_vCurrDirVelo 값이 계산이 안되는 상태였는데 이걸 미사일 클래스에서 갔다쓰니...ㅋㅋ 지금쯤이면 메모리 체크도 슬슬 들어가봐야하는디... - 체크해본 결과 ... 아 미치것따 메모리가 샌다 ㅠㅠ 이것부터 잡고가야 할듯