혹시 궁금해 하시는 분이 계실까봐 스샷 몇장올립니다.
자세한 내용은 일단 http://www.larosel.com/209 를 참고하세요..;

사용자 삽입 이미지

대략 이런 형태가 나왔습니다.

사용자 삽입 이미지
원래는 이런 형태죠;;

사용자 삽입 이미지
와이어 프레임은 이런 느낌입니다.

사용자 삽입 이미지
걸을수 있는 바닥면에 대한 데이터도 여전히 있습니다.

사용자 삽입 이미지
마을전경은 대략 이런느낌;;

점점 김성민씨의 Space Filling Volume와 모냥이 비슷해집니다..;;

일단은 버전2로 올라오면서 용량 최적화가 많이 됐습니다.
이전 구조에 공간데이터를 넣었으면 좌절할만한 용량이-_-;;

일단 기본설명은 버전1에서 설명했으니 생략하도록 하겠습니다..;

데이터가 같은 셀들을 묶어서 용량최적화를 했고..
공간의 데이터를 가지고 있을 수 있도록 내용을 추가했습니다.
알고리즘은 V1에서 높이만 뽑던걸 Pair로 뽑도록 변경한거라 별다른 내용은 없습니다.

렌더링 되고 있는 화면은 닫힌 공간(실제 공간을 차지하고 있는)을 렌더링 하고 있지만
실제 데이터는 열린 공간을 가지고 있습니다.
닫힌 공간으로는 충돌처리를 할수가 없게 되어 버리더군요;;
이유는 캐릭터가 점..; 이라면 닫힌공간에 부딪히나..를 검사하면 되지만
캐릭터가 세로부피가 있기 때문에(머 대략2m라고 치고) 이 공간에 내가 들어갈 수 있나..를 검사하도록 만들어야 합니다.
다리가 있다고 쳤을때 다리하고 지면이 1미터 간격밖에 안되는데 지나가 버리면 이상하겠죠;;

거창하게 공간데이터 이긴 하지만 실제 사용은 높이만 가지고 있던 내용이랑 큰차이가 없어서 3D상의 공간 충돌뿐만이 아니라 공간상의 길찾기도 내용만 약간 수정해서 그대로 넣어도 사용하는데 지장은 없습니다. 속도적인 부분도 가만할수 있을정도일듯 싶습니다.

잠수나 날아다니거나 하는경우는 사실 1인칭형으로 이동이 될거기 때문에 3D길찾기가 필요한 경우는 없겠지만 혹시나 수중전투-_-같은 경우는 필요하겠죠..; 혹시 몹이 하늘을 날아다니거나..하는 경우도 써먹을수도 있을거고..;;

그리고 걸을수 있는 데이터...의 경우에는 공간데이터와는 따로 가지고 있습니다.
공간데이터쪽에 플래그 같은걸 넣어도 되지만 길찾기 할 때 속도를 높이려고 그냥 중복해서 가지고 있습니다.;;

전과 달라진 내용은 지면데이터 쪽에도 지면에 대한 공간으로 가지고 있습니다.
혹시 캐릭터나 몬스터 이동시 높이에 대한 부피체크(위에서 설명한)가 들어갈 일이 있을까봐 같이 넣었습니다. ( 사실은 따로 만들기 귀찮아서;; )

머 그외에는 버전1에 비해 특별한 내용은 없군요..;

사용자 삽입 이미지

용량을 궁금해 하실까봐 용량을 캡쳐했습니다.
dat파일이 실제 서버에서 사용하는 파일입니다.

메모리 구조와 파일구조가 거의 비슷해서 실제 셀데이터 올릴때 vector에 공간차지하는거 약간 1~2메가 정도 말고는 실제 메모리에 올라가는 용량 그대로입니다.

4020*4020 1미터 단위 4개..와 2040*2040 1미터 단위 2개..맵이 185메가 정도군요..;
원래는 좀 더되야 하는데 내부에서 중복셀을 줄이기 위해 16분할로 데이터를 가지고 있습니다.
용량의 대부분이 셀데이터와 실제 지형을 연결시켜주는 인덱스 데이터이기 때문에
중복셀이 많으면 4바이트를 쓰고 적으면 1, 2바이트를 사용하기 때문에 분할하는것과 안하는것이 차이가 꽤 납니다. ( 많게는 2배까지 )

사실 실제 서버는 존서버 방식이라 한서버에 몇개의 존만 올라가서 그냥 써도 상관은 없지만 나중에 테스트 서버같은데는 모든존을 다 올려버리게 될거 같아서 가능한 다이어트를 했습니다.

_ST가 붙은 파일들은 클라이언트용 패킹파일입니다.
파일 내용자체는 100%같습니다.

사용자 삽입 이미지
안에는 대략 이런 모냥이죠;;

서버파일은 그냥 파일을 줄줄줄 붙여논거 밖에 없습니다. 파일 합치는 방식만 다르고 실제파일은 같습니다.

클라이언트용 패킹파일샷은 압축했을때 얼마나 압축이 되나.. 참고하시라고 올렸습니다.
185메가 짜리가 72메가 가량이 되었군요..
실제 클라이언트에서 그대로 쓰는 구조라 압축률이 낮은걸 쓰고 있어서 저정도 용량입니다.
zip방식으로 걍 압축하면 50메가 정도입니다.

대충 내용은 이정도입니다..
소스를 만들어서 배포를 하거나 할 예정은 없습니다..;;;; ( 이 내용외의 기본 내용들을 만들어서 붙이기도 귀찮고 같이 딸려있는 다른 모듈들;; 덕분에;; )

알고리즘은 내용에 설명을 다 해놨으니 공간개념이 있는 프로그래머분들은 아마 내용만 보고 만드시는데 별 지장은 없을듯 싶습니다.

실제 소스도 공간데이터 만드는 부분 200라인 정도 데이터 구조랑, 로드, 세이브가 500라인정도밖에 안됩니다.

혹시 궁금하신 내용이 있으면 답변 해드리도록 하겠습니다.

'자료 > 내자료' 카테고리의 다른 글

mpl::is_vector  (2) 2009.02.17
SPE V1 - 길찾기용 지형구조  (9) 2006.12.10
게임을 위한 GUI모듈  (4) 2006.07.31
MSB/LSB template  (0) 2006.05.18
is_template  (0) 2006.05.10

자주 까먹어서 포스팅

void CopyClipboard( IN const tstring strTemp )
{
 if( ::OpenClipboard( NULL ) )
 {
  ::EmptyClipboard();

  HGLOBAL hBlock = ::GlobalAlloc( GMEM_MOVEABLE, sizeof(TCHAR) * ( strTemp.size() + 1 ) );
  if( hBlock )
  {
   TCHAR *pwszText = (TCHAR*)::GlobalLock( hBlock );
   if( pwszText )
   {
    _tcscpy( pwszText, strTemp.c_str() );
    ::GlobalUnlock( hBlock );
   }
   ::SetClipboardData( CF_UNICODETEXT, hBlock );
  }
  ::CloseClipboard();
  // We must not free the object until CloseClipboard is called.
  if( hBlock )
   ::GlobalFree( hBlock );
 }
}

OUT const tstring GetClipboard()
{
 if( ::OpenClipboard( NULL ) )
 {
  if( ::IsClipboardFormatAvailable( CF_UNICODETEXT ) == TRUE )
  {
   HANDLE hMem;
   hMem = ::GetClipboardData( CF_UNICODETEXT );
   const tstring reStr = (LPCTSTR)GlobalLock((HGLOBAL)hMem );
   GlobalUnlock( (HGLOBAL)hMem );

   return reStr;
  }
  ::CloseClipboard();
 }

 return tstring();
}

http://msdn2.microsoft.com/en-us/library/ms177194.aspx

gpg에 답변달다가 홈피에도 없는것 같길래 포스팅
boost를 대체할수 있는 기본 키워드들이 꽤 있다.
컴파일러에서 처리를 해주니 왠지 boost보다 가볍지 않을까...하는 느낌..

'자료 > Article' 카테고리의 다른 글

Utilities for STL std::string  (1) 2007.03.27
/ENTRY(진입점 기호)  (2) 2007.03.01
Subversion(SVN)과 Mantis의 연동  (2) 2007.01.05
라그나로크2 클라이언트 분석  (2) 2006.12.31
[펌] 디스크 캐쉬 제대로 알기  (2) 2006.12.29
원본글 http://nbfive.net/nb5/328

개발에 대해서 그럴듯한 비유가 있어서 펌
생략된 내용이 있으므로 원본 사이트의 글을 읽기를 권장합니다.

---------------------------------------------

대부분의 실패하는 개발자들이 저지르기 쉬운 실수는 훌룡한 재료만으로 훌룡한 요리가 나올꺼라는
착각에 있다..요리가 고객의 식탁에 놓여지기까지는 정말 많은 과정과 많은 노력을 필요로 한다..
재료의 선택은 훌룡한 요리의 한가지 조건에 불과하다..

여기 한 불쌍한 요리사의 이야기가 있다..

분명히 처음의 시작은 떡볶이를 만들려는 계획이었다..
조금더 싸고 저렴하게 만들어서 많은 사람들에게 팔려는 의도에서 요리를 시작했다..
하지만 실패하는 요리사(혹은 경력좀 있다고는 하지만 한번도 요리를 만들어본 적없는)들의 관심은
오로지 재료에 몰려있다..기존의 떡볶이와 다른 떡볶이를 만들기 위해..라면도 넣고..깻잎도 넣고..
쫄면도 넣고..더 많은 재료로서 차별화된 떡볶이를 만들어야 겠다고 생각한다..
애초에 싸고 저렴하게 만들자는 의도는 금방 잊어버렸다..계속해서 새로운 재료를 쌓아놓기만 한다..
새로운 재료는 다듬어지지도 않고 떡볶이가 만들어지는 불판에 올라가게 된다..

떡볶이에 대한 조리법이 존재한다..기본적인 조리법은 이론적으로 누구나 알고 있다고 요리사는
생각했다..비록 자신은 그 조리법대로 만들어본 적조차 없지만..누구나 알고 있는 부분이기 때문에
굳이 그부분에 대해서 깊게 생각하지 않는다..중요한 건 재료다..
많은 재료를 넣으면 차별화된 떡볶이가 자연스럽게 만들어질 거라고 생각한다..
하지만 재료가 많아질수록 그것들이 자연스럽게 어울리기 위해 얼마나 많은 조리법이
새로 필요한지에 대해서는 쉽게 간과해버린다..
그리고 지금 자신이 만드는 음식이[떡볶이]라는 사실도 쉽게 간과해버린다..
정리가 안된 채로 가득 불판위에 올라간 재료들중에는 떡볶이와는 전혀 어울리지 않는 생선이며..
마요네즈..초밥같은 것들이 가득 담겨져있어서 이것이 떡볶이를 만드는 재료인지..
잡탕밥을 만드는 재료인지조차 알수 없는 수준이 되어버리고..조리법도 엉망이 되어버린다..

뭔가 이상하다고 느낀 상태에서 그런 잘못을 메꾸기 위해 더욱 재료를 첨가해 나간다..
재료를 첨가하면 첨가할수록 상황은 더욱 악화되어버린다..
요리사는 스스로가 잘못생각했다고 생각하고 불판의 음식을 모두 버리고 새롭게 음식을 만들어야겠다고
다짐한다..그런데 그가 선택한 음식은 [떡볶이]가 아닌 부침개였다..

그리고 자신이 처음부터 만들고자 했던 음식이 부침개였노라고 스스로를 위로한다..
결국 처음의 의도와 계획과는 다르게 너무도 다른 음식을 다시 처음부터
만들어야 하는 상황에 봉착하고 마는 것이다..
그렇지만 알고있는 조리법은 그동안 만들어 온 떡볶이 조리법을 제외하고는 아무것도 알지 못한다..
결국 부침개를 떡볶이 조리법에 맞춰서 만들게 된다..
이건 뭔가 아니라는 생각이 계속 들기 시작한다..

하지만 이제 가게를 오픈해야할 시간이 얼마남지 않았다..부랴부랴 부침개를 떡볶이식 조리법을 가지고
만들기 시작했지만..결국 결과물은 떡볶이도 아니고..부침개도 아닌 어설픈 요리가 되어버리고 말았다..
결국 가게를 오픈해야할 시기가 되었고..음식은 완성도 되지 않은채 데코레이션도 하지 못하고..
음식의 간도 제대로 보지 못한 상황에서..고객들 테이블에 올려지게 되었다..

고객들은 외면했고..그 요리사는 또다시 실패했다..
그는 자신의 요리가 어째서 잘못되었는지를 곰곰히 생각해보았다..
역시나 재료때문이었다..
문제는 자신이 애초에 부침개의 재료를 잘못 선택했기 때문이라고 생각했다..
요리사는 더 좋은 재료를 찾아 나섰다..

- 뒤의 내용은 아무것도 모르는 사람이 쉽게 말할 수 없는 내용이라 퍼오지 않음 -

-------------------------------------------------------

게임 개발 프로젝트가 점점 커지고 있음에도 불구하고 여전히 가장 중요한 부분은 처음 생각했던 내용을 관철해 나가는 것이고 그러기 위해서 하지 않아야 할것들을 정하는 일이다.

이것은 클베를 하려면 꼭 들어가야 한다 이것은 오베를 하려면 꼭 들어가야 한다..
가 아니라 이건 우리게임에 절대 들어가면 안된다! 라는것과 그에 대한 합당한 이유를 유지하는게 개발에서는 가장 중요한 내용이다.

그냥 이것저것 주워다 놓는다고 게임이 나오는것도 아니고, 이게 왜 들어가야 하는지 이게 머가 재밌는건지 이해하는건 넷째치더라도 이게 대체 무슨 내용인지, 왜 이렇게 되있는건지를 눈앞에 있는 사람한테 말로 해도 설명못하는 게임을 유저가 받아들일 수 있을리도 없다.

할말이야 많지만 괜히 분쟁을 일으키고 싶지는 않으니 대략 묵념..;

'잡담' 카테고리의 다른 글

vc2005배포문제  (3) 2007.03.23
KTF 도시락  (1) 2007.03.23
[펌] 청약저축 / 청약부금 / 청약예금..잘 모르시는 분들을 위해서..Ver2  (4) 2007.01.26
요즘  (5) 2007.01.24
티스토리 탁상용 달력을 받게되다.  (5) 2007.01.11

'잡담' 카테고리의 다른 글

KTF 도시락  (1) 2007.03.23
[펌] 재료가 훌룡하다고 훌룡한 음식이 나오는 건 아니다.  (8) 2007.02.05
요즘  (5) 2007.01.24
티스토리 탁상용 달력을 받게되다.  (5) 2007.01.11
vs2005 sp1 실행모듈배포 좌절..;  (0) 2006.12.19

요즘은 NDS에 푹빠져 살고 있습니다.
두뇌트레이닝에 있는 스도쿠는 역시 시간때우기 짱이고
조용한곳에서는 영어삼매경도 참 삼매경에 빠집니다..;;

가이블엔진이 업데이트 되서 GPU스키닝 작업을 했습니다.
그전에도 쓸려면 쓸수 있었지만 이번버전에 본개수에 맞춰서 메쉬잘라주는 기능이 추가되서 작업했습니다.
본맥스를 37개나 잡았는데 mx의 vs1.1 시뮬레이션에서도 잘돌아가서 걍 냅둘까 하는 중입니다..;;

쉐이더쪽을 손대는 김에 싹 정리하고 머리색이랑 피부색 바꾸는 작업을 하고 있는데
머리색이야 통째로 색바꾸는거니까 약간만 손보면 될거 같은데
피부색은 mx에서 지원하려다 보니까 매핑을 꽤 많이 손봐야 하는 사태가 되버려서 캐릭터팀이 싫어할것 같습니다-ㅅ-;;
게다가 알파채널에 피부색 명암을 넣어야 해서 알파를 못쓰게 되기땜시 강력한 반발이 일어날지도 모르겠습니다.
어쩝니까 mx는 텍스쳐 두장밖에 못쓰는데.. 카툰쉐이딩때문에 쉐이딩용 텍스쳐 한장 써야 하는데-ㅅ-;;

SPE는 공간데이터까지 잘 넣어서 대략 2.0으로 버전업이 됐는데..
실제로 날아다니거나 수영 로직을 만들어서 테스트 해야 하는데 스케줄이 한참뒤에 있어서 로직테스트는 못해봤습니다.
대략 툴에서 확인해보기는 이상없습니다.
스샷 찍어서 올린다는걸 귀찮아서 못하고 있습니다..;

요즘 할일은 많은데 시간은 없는 사태가 벌어지고 있어서 참 스트레스가 많습니다..;
이번주부터 꼬박꼬박 새벽2~3시 사이에 잔다~!! 라고 하고 있는데 벌써 4시가 넘었습니다-ㅅ-;;

PS. 먼가 이렇게 쓰고 있자니 학교제출용 일기를 쓰고 있는것 같은 기분입니다..;

사용자 삽입 이미지
사용자 삽입 이미지

참조글 : http://notice.tistory.com/732

클로즈드 베타 우수회원 1000명...에 내가 있단다..;;
그래서 탁삭용 캘린더를 준단다..

으흠?;;
그..그럴리가-_-;
어째서-_-;
그..그냥 랜덤인거 아닐까..;;;;
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
이런건 일단 지르고 보는거다!
사용자 삽입 이미지

국내 정발이 연말 계획이라는 말을 듣고 별 수 없이 지름..;
본체 : 30
컴퍼넌트, 젤다, 시작의위, 위스포츠, 드래곤볼, 눈챠크1개 : 28

480P까지 밖에 지원을 안하는지라 소프트웨어적으로 16:9를 지원하는데
이놈의 델24인치가 16:9비율고정이 없는지라 4:3으로 게임을 하고 있는 안습크리한 상황-ㅅ-;
게다가 센서바가 너무 가까우면 인식을 못하는지라 책상앖에 앉아서 게임을 못하게 되버린 불쌍한 상황..;
거북이만 된다.
속성에 tsvn:logminsize 를 넣어준다.
속성이라는게 있다는걸 왜 인제 안 거지-ㅅ-ㅋ

+ Recent posts