Height Map Editor

1 Height Map Editor #

하이트맵의 랜더링을 할때 좀도 복잡한 하이트맵의 파일 포멧이 필요하게 되어 직접 에디터와 랜더러를 구현

  • 2004년 7월 29일
    현재의 진척도는 MFC View에다가 랜더링을 한다는 정도?

하다가 삽질한점은 RPG책에서 구현한 마우스 인풋이 MFC에서 안먹힌다는 점과 현재 랜더링을 APP::OnIdle 에서 하고 있는데 가만히 있으면 이게 호출이 안된다는 점이다. 마우스 인풋은 View의 마우스 이벤트로 처리 (그리고 기타 UI쪽에서 개삽질… 이제 제일 짜증난다!)

http://lagoons.net/docdata/Editor_1.jpg

  • 2004년 7월 31일
    이제는 조금 맵에디터 같은 분위기가 쪼오오오금 풍긴다. 여러개의 텍스쳐를 샥샥 랜더링이 가능하고 텍스쳐의 추가도 자유롭다. 당근 삭제도 자유로워야 하지만 지금은 에러가 있어서 한번이라도 사용했던 텍스쳐는 삭제할 시점에 사용한 타일이 다른 텍스쳐로 교체하더라도 에러가 꽃피게 된다. 음 어째서 -_-;;;

http://lagoons.net/docdata/Editor_3.jpg

1.1 구현요약 #

계속 개발 중이기 때문에 계속 바뀌겠지만 현재 맵에디터를 구하면 구현한 기반 클래스를 정리해보자

CIndexBufferManager
클래스명이 너무 거창하다. 사실 이 클래스가 관리할수 있는건 내가 만든 하이트 맵뿐이라서… 전혀 범용적이지 못하게 구현되어있다. 어쨋건간에 이름처럼 하이트맵에 관한 인덱스버퍼를 관리한다. 뭐 관리라고 해도 텍스쳐와 해당 인덱스버퍼를 연관시켜 백터에 담고 있다가 랜더링시 호출순서대로 찍어주는 역할뿐이 하지 않는다. 내부에는 타일매니져와 텍스쳐매니져를 가지고 있어서 타일에 매핑된 텍스쳐를 정렬하여 인덱스버퍼를 재구성하는 기능이있다. 문제점은 컬링이나 프러스트럼을 구현해 본적이 없어서 이쪽으로 확장성이 거이 없다는 것…
CHeightMapTileManager
뭐 클래스명 그대로 하이트맵에서 하나하나의 타일을 관리하는 클래스. 타일에 해당하는 이차원 배열을 가지고 타일당 각 텍스쳐의 매핑 정보를 가지고 있으며 각 텍스쳐들의 사용된 개수등등을 알수 있다.
CHeightMapTextureManager
역시나 클래스명 그대로 하이트맵에서 사용하는 텍스쳐들을 관리하는 클래스. UI쪽과 연계되서 파일에서 텍스쳐들을 추가할수 있고 각 텍스쳐의 이벤트코드와 파일패스 그리고 코맨트 정보도 함께 매핑해서 관리한다. (이벤트코드와 코맨트는 미구현)

위의 세가지 클래스들의 문제점은 서로 간의 인터페이스가 너무 난잡하다는 점. 3개 정도는 괜찮겠지 하고 그냥 짰는데 막상 짜다보니 좀 지지분한 생각이 들었다. CHeightMapTileManager , CHeightMapTextureManager 를 하나로 합쳐서 관리하는 하는 클래스를 만드는게 좋을지도 모르겠다.

  • 2004년 7월 31일 오후 9시 15분전
    후아… 버그를 잡았다. 상당히 짜증나는 버그 였지만 원인은 내가 호출을 안해줬을 뿐이었다. 인덱스버퍼매니져의 인덱스 버퍼 재구성은 하나의 플래그를 주어 그 플래그가 TRUE이 되면 한번 재구성하고 다시 FALSE로 바꿔놓는 방식으로 바꿨놨다. 매번 하이트맵의 랜더링마다 그 플래그의 값에 따라 함수 호출을 결정하므로 어디서든 요 플래그를 TRUE로 하면 재구성이 된다. 즉 텍스쳐를 삭제할때 재구성하는 방식.. 이제는 브러시 기능을 구현하면… 뭐 고저차자체는 간단하지 않을까? 둥글둥글하게 고저차를 정리하기 위해서는 곡면함수 이런거를 알아야 겠지만…

http://lagoons.net/docdata/Editor_4.jpg

http://lagoons.net/docdata/Editor_5.jpg

  • 2004년 8월 20일

너무 오랜만의 업데이트… 그동안 열심히 구현하고 싶었지만 여러가지 다른 사정이 겹쳐서 근 20일간 스크린샷을 못올리다니… 사실 내부적으로 구현은 했지만 외부적으로 보일게 별로 없어서 안한것도 있다. 그나저나 하이트맵을 구현하기 시작했을때 부터 한달 후에 지금 이정도면 꽤 열심히 한것 같기도 하고… 처음 10일간 한게 이후 20일동안 한것보도 많은것 같아서 아쉽기도 하고,…

이제 구현할건 둥글게 지형 변화를 비롯한 “지형변화 부분” 파일 저장 (맵과 타일셋을 따로) 그리고…짜잘한 버그들…

지금 어째서 인지 맵이 반투명 하게 되는 부분이 있는데 그 이유를 모르겠다 -_-;;;;;

흠 스크린샷의 우측하단 부분에 푸르스름한것이 브러쉬!

http://lagoons.net/docdata/map_5.jpg

  • 2004년 9월 즈음

사실 지금 정리하고 있는 시점이 2005년 4월 말이라 -_-; 기억이 안난다.

http://lagoons.net/docdata/HMapEditor_1s.jpg

http://lagoons.net/docdata/HMapEditor_1s_w.jpg

일단 8월달 과의 가장큰 차이점은 지형에 변화를 줄때 둥글둥글하게 변화를 준다는것. 사실 뭐 거창한 곡면 함수 이런게 필요할줄 알았지만 그냥 2차함수로 해결했다. X축으로 한번 적용해주고 Y축으로 한번 적용해주면 적당하게 둥글둥글한 지형변환 효과를 줄수 있다.

일단은 여기서 하이트맵 에디터는 대충 마무리를 지었다. 더 추가하기 위해서는 최적화 코드를 넣어야 하고 현재 구조가 별로 맘에도 안들고. 후…지금 당장 여건이 이걸 붙잡고 있기에 허락하지도 않고. 영천이형은 이것 보다는 일단 맥스익스포터와 그거 랜더러를 구현해 보라고 하셔서 나중에 다시 공부하게 된다면 그쪽으로 생각하고 있다.

2 소스 및 실행파일 #

실행에 필요한 DLL이 포함되어 있지 않다 -_-; 비주얼스튜디오 6.0을 깔도록…..

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다