2014-04-30 2 views
0

나는 이것이 합리적으로 공통적 인 문제라고 가정하고 있으며, 본질적으로 좀 더 학문적 인 해결책이나 이와 같은 일반적인 문제에 사용되는 일반적인 방정식을 요구하고있다. 나는 큰 스파게티 엉망으로 보이는 것을 해킹 한 것으로 보인다. .매트릭스와 생성 된 타일 월드, 어떻게 가장자리를 생성합니까?

타일 월드의 가장자리를 생성하고 싶습니다. 기본 8 가장자리가 있습니다. 내 타일을 나타내는 int 배열이 있습니다. 0은 물, 1은 잔디입니다. 물과 잔디 사이를 전환하는 가장자리를 추가하고 싶습니다. 내 가장자리는 10에서 17 사이입니다.

int edges[3][3] = 
{ 
    {10, 11, 12}, 
    {13, 0, 14}, 
    {15, 16, 17} 
}; 

가장 먼저 생각하는 것은이 것이 행렬과 유사하다는 것입니다. 내 그래픽 라이브러리에 3 행 3 열 개체가 있다는 것을 알고 있습니다. 매트릭스를 사용하거나 마스크를 사용하여 타일에 영리하게 가장자리를 적용하는 표준 작업이 있습니까?

가장자리를 병합하는 표준 공식이 있습니까? 예를 들어 오른쪽 하단이 잔디 타일과 겹치면 아마도 값을 변경하지 않을 것입니다. 그러나 오른쪽 하단이 겹치면 왼쪽 타일 하나를 잔디 (0)로 변경하고 싶습니다. 더 많은 개별 시나리오가 있으며 문제는 복잡해집니다.

잔디 타일을 생성 할 때 가장자리를 추가하기 위해 미리보기 기능이 필요하므로 내 타일 배열의 추가 구문으로 가장자리를 생성합니다. 그래서 나는 잔디 패치 가장자리에 가장자리를 추가 할 수있는 솔루션을 찾고 있습니다.

이것은 또한 앤티 앨리어싱을 생각 나게합니다. 해당 필드에 관련 수식이 있는지 궁금합니다.

이상적으로 솔루션이 최적 일 것입니다. 예를 들어, 위와 같은 마스크를 사용하고 배열의 모든 잔디 타일에 추가하여 모서리와면의 고유 한 값을 얻을 수 있으므로 가장자리 이미지로 변환 할 수 있습니다.

답변

1

먼저 논리와 시각화를 구별합니다. 게임 로직을 위해 각 셀이 잔디 나 물이있는 배열을 갖는 것이 좋습니다 (a라고 부름). 그런 다음 셀을 렌더링하는 방법을 저장하고 가장자리를 고려하는 두 번째 배열을 만듭니다 (v).


이 같은 문제를 볼 수 있습니다 a에서 v을 계산하려면 v의 각 셀에 v_ij 당신은 a_ij에 따라와 인접 셀의 값 렌더링하는 방법을 계산합니다.

예 :

논문 a의 값은 다음과 같습니다

0 0 0 
1 0 0 
1 1 1 

어떻게 중간에 셀을 렌더링 할은?

대칭을 고려하지 않고 실제로는 2^8=256 가지 경우가 있습니다.


좋은 빠른 해결책은 당신이 그 상황에 대해 선택한 모서리 중 하나에 256가지 경우 각각의 매핑 조회 테이블을 구축 할 수 있습니다.

8 개의 셀을 거쳐 8 번 0 또는 1이되고 부호없는 정수로 설정하여 해당 조회 테이블에 색인을 가져올 수 있습니다.

예를 들어, 000 100 111 = 39을 얻으므로 조회에서 39 번째 항목을 얻습니다.

+0

이전에 해 보았습니다! 롤, 난 정말 당신의 솔루션을, 덕분에 많이 맘에 들었어, 내가 정수로 비트를 이동에 대한 표준 매트릭스 작업이 있다고 가정? 배열을 사용하고 행렬을 사용하지 않고 행렬에 3x3을 저장하기위한 하드웨어 최적화가 없다고 가정합니다. – user3345413

관련 문제