아이소 메트릭 뷰 플래시 게임에서 드로우 순서를 어떻게 결정합니까?


12

이것은 등각 투영 뷰가있는 플래시 게임용입니다. 그림을 그릴 때 z 버퍼 검사가 필요하지 않도록 객체를 정렬하는 방법을 알아야합니다. 이것은 쉬워 보이지만 또 다른 제한이 있습니다. 장면에는 10,000 개 이상의 객체가있을 수 있으므로 알고리즘을 O (n ^ 2) 미만으로 실행해야합니다. 모든 오브젝트는 직사각형 상자이며 장면에서 3-4 개의 오브젝트가 이동합니다. 가장 좋은 방법은 무엇입니까?

최신 정보

각 타일에는 객체 만 있습니다 (객체는 서로 쌓을 수 없음을 의미합니다). 오브젝트 맵과 오브젝트 모두에 대한 액세스 권한이 있습니다.

업데이트 2

이 수치를보십시오 :

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

처음에는 첫 번째 파란색 오브젝트를 그린 다음 녹색을 그린 다음 빨간색을 그려야합니다. 두 번째로 당신은 그것들을 역순으로 그려야합니다. 먼저 빨간색을 그린 다음 녹색을 그리고 마지막으로 파란색 객체를 그려야합니다. 보시다시피 파란색과 빨간색 물체의 위치에는 차이가 없으며 카메라와 거리가 다릅니다. 그러나 녹색 상자에 대한 상대 위치로 인해 두 이미지 사이에서 그리기 순서를 변경해야합니다. 이것이이 문제를 혼란스럽게 만듭니다.

참고 사항 : 모든 객체가 직사각형 프리즘이므로 문제 요구를 충족시키기 위해 최소한 하나의 그리기 순서가 있음을 수학적으로 증명할 수 있습니다.


2
자세한 정보를 게시해야합니다. 객체를 쌓을 수 있습니까 (3d)? 객체에 위치가 있거나지도에 객체가 있습니까? 등
kaoD


@Tetrad 예,하지만 장면에 넣은 오브젝트에는 약간의 차이가 있습니다.
Ali1S232

@Gajet (업데이트 후) 객체는 1 * X 및 X * 1 또는 X * Y 만 될 수 있습니까? 객체를 여러 하위 객체로 분할 할 수 있습니까? (녹색이 4 개의 녹색 하위 오브젝트 인 것처럼) 오브젝트의 방향이 고정되어 있습니까?
kaoD

또한 : 물체의 높이가 몇 개의 인접 타일에 가려 집니까?
kaoD

답변:


8

객체가 등각 타일과 일치하는 경우 실제로 매우 간단합니다. 이 이미지를 살펴보십시오.

등각 투영 도면 순서

먼저 빨간색 위치에 오브젝트를 그린 다음 파란색, 녹색, 노란색, 마젠타 등으로 오브젝트를 그려야합니다. 보드에 오브젝트 대신 오브젝트가있는 경우이를 구현하는 방법이 상당히 분명해야합니다. 속성으로서의 위치를 ​​갖는 것. 그렇지 않은 경우 별도의 데이터 구조를 유지하여 객체가 움직일 때마다 업데이트해야합니다 (매우 쉬워야합니다).

여기에는 새로운 문제가 있습니다. 복잡도가 O (N)이고 여기서 N이 보드 크기 ( N=W*H) 인 방법을 쉽게 알 수 있습니다 . 이 문제를 극복하려면 구조의 각 인덱스가 지정된 깊이와 일치하는 새 선형 데이터 구조를 만들어 개체의 깊이가 변경 될 때마다 업데이트하십시오.

객체가 단일 타일과 일치하지 않는 경우는 좀 더 어려우므로 질문을 업데이트하자마자 필요한 경우 게시합니다.


이 알고리즘도 처음으로 떠 올랐지 만 업데이트를 확인하면 변경없이 사용할 수 없습니다.
Ali1S232

1
@Gajet 그리고 그것은 당신이 처음에 당신의 질문에 게시 해야하는 종류입니다 : P
kaoD

3
이것은 갈 길입니다. '타일'에서 큰 부분을
나누십시오.

2

이 주제에 대한 특별한 지식은 없지만 여기에 생각이 있습니다.

각 셀을 "그리지 않음"으로 표시하여 시작하십시오. (또는 동등하게 배열을 사용하여 셀의 각 "가까운 선"또는 집합 등에서 가장 가까운 "그린"물건의 위치를 ​​나타냅니다.) 그런 다음 각 셀에 대해 kaoD 순서 설명) : 해당 셀이 그려 졌는지 확인하십시오. 그려지지 않았고 개체가 포함되어 있으면 해당 개체에 의해 가려진 각 셀이 그려 졌는지 확인하고 반복적으로 그리지 않으면 확인하십시오. 필요한 경우 해당 셀에 포함 된 객체를 그립니다. 해당 셀과 해당 오브젝트가 차지하는 모든 셀을 "그린"으로 표시하십시오.

셀이 있으면 그 안에있는 객체에 셀을 빠르게 매핑 할 수 있다고 가정합니다. 나는 O (n) 시간이라고 생각하지만 큰 스택을 만들 수 있습니다 (스택 공간 부족에 대해 걱정하는 경우 링크 된 목록으로 전환 할 수 있음).

목록이 실제로 필요한 경우 그리기 대신 목록에 추가 할 수 있습니다. 나는 주로 분류 된 목록으로 시작하는 것이 도움이되지 않는다고 생각합니다.


이 알고리즘은 문제에 적합한 형태의 위상 정렬 로 볼 수 있다고 생각합니다 . 나는 그 방향을 막연하게 가리 키려고했다. 위상 정렬은 대부분의 주문 / 종속성 문제에 대한 솔루션입니다.
Kevin Reid

1

카메라에서 가장 먼 셀로부터의 택시 거리와 함께 화가의 알고리즘 을 사용하여 카메라에 가장 가까운 셀을 먼저 그린 다음 바깥쪽으로 이동합니다.

편집 : 각 셀의 내용을 개별적으로 그릴 수 없으면 작동하지 않습니다.


이것은 작동 할 수 있지만 byte56 또는 kaoD 제안 알고리즘과 어떻게 다른지 알 수 없습니다. 나에게 그것은 여전히 ​​내 두 번째 편집에서 설명한 것과 같은 문제가있는 것 같습니다.
Ali1S232

1

“문제 요구를 충족시키기 위해 최소한 하나의 추첨 순서가 있다는 것이 수학적으로 입증 가능하다”고 믿는 것은 무엇입니까? 다음은 z 정렬 객체에 의존 할 수없는 간단한 반례입니다.

여기에 이미지 설명을 입력하십시오


호기심 때문에 ... 반대의 예를 자세히 설명해 주시겠습니까? 그리드가 아닙니다.
kaoD

각 타일에는 객체가 하나만 있고 객체는 하나 이상의 타일을 차지할 수 있지만 평면에는 항상 직사각형 투영이 있습니다. 이 두 조건은 그 진술을 증명하기에 충분합니다.
Ali1S232

자, 이러한 제한 사항과 그리드가 평평하다는 사실에 대한 해결책이 있습니다. 나중에 게시하겠습니다.
sam hocevar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.