본문 바로가기

Windows API

아이소 매트릭 타일(ISO MATRIX TILE)그리기.


블로그 유입키워드가 아이소 매트릭이 많네요.

혹시 읽어도 뭔소린지 모르겠으면 덧글 남겨 주시면, 추가 설명을 올리도록 하겠습니다.

현재 C++을 안한지 너무 오래 되었어옄ㅋㅋ Unity로 취직이 되어서;;;

그래서 이론적인 부분에 대해서만 설명이 가능합니다.


일반적인 아이소 매트릭 구현방식.

MoveToEx와 LineTo를 이용하여, Rectangle을 그린 다음, 각 변의 중앙을 연결하는 방식으로 그림.

하나의 Rectangle를 그린 후, 다음 사각형을 그리기도 힘들 뿐더러, 매우 복잡한 방식으로 진행됨.

 

 

 

[일반적인 iso metrix구현 방식 (총 2번의 MoveToEX와 8번의 LineTo를 이용하여 작업하게 된다.)]

 

 

 

Pivot을 지정후 아이소 매트릭 구현방식.

우선적으로 지정된 pivot으로 부터 offset되어 rectangle의 Volume(부피, 또는 크기)을 결정할 POINT자료(맴버 변수로 int x, int y를 가지고 있다.)형 변수를 이용하여, rectangle의 Volume(크기)을 먼저 설정함.

(그려질 rectangle의 크기를 우선적으로 결정해야 함)

 

POINT자료형 변수 pivot을 이용하여, 사각형이 배치될 위치를 지정함.

(이때 rectangle의 volume을 감안하여 간격을 조절하도록 함.)

 

pivot으로 부터의 지정된 x만큼의 거리와, y만큼의 거리만으로 아이소가 제작 가능.

 

[pivot이라는 기준과, offset이라는 기준이 정해져 있기 때문에, 외각 rectangle은 rectangle함수로 제작하며,

내부의 마름모꼴만 LineTo로 제작 가능]

 

그리고 개인적으로 RECT자료형 구조체 변수에 다음과 같이 설정해 놓고 사용중이다.

 

 rect.left

 =

 pivot.x - offset.x;

 rect.top

 =

 pivot.y - offset.y;

 rect.right

 =

 pivot.y - offset.y;

 rect.bottom

 =

 pivot.y - offset.y;

 

 

[Syntax]

 

tile.rec.left      = tile.pivot.x - tile.offset.x;
tile.rec.right    = tile.pivot.x + tile.offset.x;
tile.rec.top      = tile.pivot.y - tile.offset.y;
tile.rec.bottom = tile.pivot.y + tile.offset.y;

 

MoveToEx(getMemDC(),tile.rec.left, tile.pivot.y, NULL);
LineTo(getMemDC(), tile.pivot.x, tile.rec.top);
LineTo(getMemDC(), tile.rec.right, tile.pivot.y);
LineTo(getMemDC(), tile.pivot.x, tile.rec.bottom);
LineTo(getMemDC(), tile.rec.left, tile.pivot.y);

 

 

 

picking까지 성공

 

 

 

내친김에 6각형도 성공 :D

'Windows API' 카테고리의 다른 글

두점간의 거리 구하는 공식  (0) 2015.04.03
아이소 메트릭 타일(마름모 맵) 수학 1/2  (7) 2015.01.18