구형 맵 표현


19

내 최신 게임은 작은 행성에서 진행됩니다. 구 표면의 셀을 나타내는 데 유용한 데이터 구조를 찾고 있습니다. 삼각형, 사각형, 오각형, 육각형? 어느 것이 가장 스트레칭을 최소화하고 최고의 타일링을 생성합니까?

구형 매핑이 가장 쉽지만 극점의 스트레치는 허용되지 않습니다. Cubemapping도 상당히 쉽지만 여전히 큐브 코너 근처에서 상당히 늘어납니다. 정 이십 면체를 세분화하는 것은 스트레치 측면에서 가장 좋은 것처럼 보이지만 많은 삼각 배열을 인덱싱하고 경계에서 인접 셀을 찾는 데 어려움이 있습니다.

N-gon을 나타내는 단일 선형 배열 점을 사용할 수 있다고 생각합니다. 각각 N 개의 이웃 인덱스가있는 배열이지만 막대한 공간 낭비처럼 보입니다.

이 게임에는 RTS 요소가 있으므로 영향 맵과 같은 것을 저장하고 A * 경로 찾기 및 컨볼 루션을 수행하므로 표현이 효율적이어야합니다.


액터가 한 방향으로 이동하여 결국 시작한 곳이 아닌 맵의 정확한 토폴로지가 얼마나 중요합니까? 가장 간단하고 효율적인 표현은 원환 체 / 도넛입니다.
congusbongus

1
예, 구형 매핑과 기둥의 문제점을 언급했습니다. 표면 주위에 값을 저장하고 싶습니다 .3D 표면 점에서 배열 인덱스까지 가능한 한 적은 스트레칭으로 매핑해야합니다.
DaleyPaley

구를 만들기 위해 사면체를 세분화하려고 시도 할 수 있습니다. 크기는 동일하고 분산 된 삼각형으로 구성됩니다.
thalador

1
@thalador 제안 해 주셔서 감사합니다. 확실하지 않지만 삼각형 경로를 사용하면 정 이십 면체보다 정 십면 체가 더 낫습니다. 그러나 어쨌든 테셀레이션은 문제가되지 않습니다. 나를 귀찮게하는 효율적인 배열 인덱싱입니다.
DaleyPaley

답변:


12

좋아,이 주제에 관심이있는 사람은 이제 내가 선택한 솔루션을 자세히 설명합니다. 대답하고 아이디어를 준 모든 사람에게 감사합니다.

먼저 '최상의'테셀레이션의 경우 잘린 정 이십 면체 를 시작점으로 선택합니다 . 그것을 세분화 하면 곡률을 제공하는 12 개의 오각형이있는 육각형 이 매우 멋지게 테셀레이션 됩니다. 또한 이중 분할을 계속하면 멋진 속성으로 렌더링하기에 매우 좋은 삼각 메쉬가 제공됩니다. 12 개의 오각형 세포에 관하여 : 나는 그것들을 무시하거나 그것들을 특별하게 만들거나 (베이스가 건설 될 수있는 유일한 장소처럼), 또는 풍경 아래에 숨길 수 있습니다.

6 각형 및 5 각형 셀은 인접 및 빠른 순회에 쉽게 액세스 할 수 있도록 반 에지 데이터 구조 로 저장됩니다 . 유일한 까다로운 부분은 주어진 월드 포인트가 어느 셀에 있는지 찾는 것입니다. 그러나 랜덤 셀에서 시작하여 이웃을 통해 포인트를 향해 걸어 가면 가능합니다.

누군가이 정보가 도움이되기를 바랍니다. 나는 많은 것을 배웠고 몇 가지 결과를 기대하고 있습니다.

편집하다:

다음은 하프 에지 데이터 구조를 사용한 정 이십 면체 세분화 및 이중 메쉬 전환의 결과를 보여주는 이미지입니다.

세포 영역을 더욱 균일하게 만들기 위해 몇 번의 이완 반복을 할 수 있습니다.

정 이십 면체


7

질문에서 제안한대로 정 이십 면체를 세분화하여 다소 우아하게 처리하는 방법이 있습니다. 정 이십 면체는 20 개의 정삼각형으로 구성되며,이 삼각형은 5 개의 세트로 그룹화 될 수 있습니다. 여기서 4 개의 삼각형은 평행 사변형 모양을 형성합니다.

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

(개구리가 그려진 4 개의 삼각형 그룹은 내가 말하고있는 평행 사변형입니다. 화살표는이면을 20 면체로 접을 때 서로 붙어있는 가장자리를 나타냅니다.)

이 삼각형을 더 작은 삼각형으로 세분화하면 전체 평행 사변형을 n x 4n 직사각형 배열처럼 인덱스 할 수 있습니다 (이 예에서는 n = 4).

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

각 셀의 숫자는 사각형 배열의 열 번호입니다. 배열 내에서 이웃을 찾는 규칙은 매우 간단합니다. 열 번호는 각각 짝수 또는 홀수입니다.

그러나 한 평행 사변형에서 다음 평행 사변형으로 경계를 교차하는 이웃을 찾기위한 특수 사례 코드를 작성해야합니다. 어떤 곳에서는 평행 사변형의 상단 또는 하단이 다른 쪽의 측면에 연결되거나 상단 및 하단이 그들 사이의 수평 오프셋으로 연결되므로 약간 까다 롭습니다. 평행 사변형에 대해서는 여기에서 유용합니다. 그러나, 적어도 5 개의 평행 사변형 사이에서 관계는 대칭 적이다. 이들은 모두 어느 쪽이 이웃의 다른쪽에 연결되어 있는지와 동일한 패턴을 따른다.


그것은 실제로 아주 좋은 표현입니다. 삼각법에 대한 나의 주요 관심사는 삼각 배열과 모든 스티칭을 유지하는 것이 었습니다. 여기에는 여전히 약간의 스티칭이 있지만 배열은 직사각형입니다. 감사합니다, 알아두면 좋습니다
DaleyPaley

3

흠-스트레치에 대한 의견은 구형 매핑과 평면 매핑 사이를 이동하고 있음을 나타냅니다.

타일을 평평하고 균일하게하려면 정 이십 면체, 특히 잘린 정 이십 면체가 매우 흔하다는 것이 맞습니다.

여기에서 모든 다른 매핑을 찾을 수 있습니다 -Wikipedia의 구면 다면체

면 사이의 관계를 유지하는 한 토폴로지 문제입니다. 날개 달린 모서리 또는 쿼드 모서리가 도움이 될 수 있습니다 (그리고 완전히 새로운 형태의 대수를 충족시킬 수있는 훌륭한 기회를 얻습니다) Winged Edge


아, 잘린 정 이십 면체. 그렇습니다. 정확히 내가 필요한 것입니다. 감사. 또한 날개 달린 모서리를 사용한 적이 없지만 메쉬 조작에 절반 모서리를 많이 사용했기 때문에 해당 영역에 정통합니다. 건배, 나는 해결책에 가깝습니다.
DaleyPaley

2

나는 파티에 조금 늦게 올 것 같지만, 여기에 임의의 크기와 균일 한 외관의 구형 세계를 유지하는 데 사용할 수있는 해결책이 있습니다.

여기서 이해해야 할 중요한 점은 세계가 평평하지 않기 때문에 100 % 균일 한 타일링이 불가능하다는 것입니다 (이것은 소위 Hairy Ball Theorem 에서 따름 ). 일부 불규칙성이 허용되어야하며, 우리가 기대할 수있는 최선은 이러한 불규칙성을 표면 주위에 고르게 분산시켜 가능한 한 작게 만드는 것입니다.

비 결정적 방식으로 실제로 수행하는 것은 매우 쉽습니다. 먼저, 표면 주위에 균일 한 N 개의 임의의 점을 선택하십시오. 이 점들이 실제로 균일한지 확인하십시오 ( 구점 선택 , 공식 9-11 참조). 두 번째 단계에서 우리는 그 점들을 덜 무작위로 만들고 더 균일하게 만듭니다. 모든 점들이 음의 전하를 가지고 서로를 격퇴한다고 가정합니다. 평형 상태로 수렴 될 때까지 여러 단계의 포인트 이동을 시뮬레이션합니다. 점의 최종 구성은 구의 표면 주위에 거의 균일하게 분포 된 메쉬를 제공합니다.


1
나는 털이 많은 공 이론을 들어 본 적이 없습니다. 그것은 매우 흥미 롭습니다. 스스로 농담하는 것을 막아야합니다. 나는 그 전에 구체에 점을 분배했지만 문제는 다각형을 폴리 토프를 세분화하는 것보다 훨씬 느리다는 것입니다. 또한 세포의 모양과 원자가는 내가 좋아하기에는 너무 균일하지 않습니다. 어쨌든 고마워
DaleyPaley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.