2010-08-20 6 views
9

삼각형 스트립을 나타내는 꼭지점이있는 배열이 있습니다. 다각형으로 변환해야합니다. 그 반대의 해결책은 많지만 위의 문제를 찾지 못했습니다. 아니면 너무 쉬울 수도 있고 그냥 볼 수도 없습니다. 도와주세요.삼각형 스트립의 꼭지점을 다각형으로 변환하는 알고리즘

OpenGL을 = 호환, http://en.wikipedia.org/wiki/Triangle_strip

예를 참조하십시오 을이 스트립에 대한 I 출력 ABDFEC 또는 ACEFDB

필요 http://en.wikipedia.org/wiki/File:Triangle_Strip_Small.png
+1

? 삼각형으로 구성된 임의의 모양입니까? 아니면 더 구체적인 무엇인가? –

+0

이미지를 포함 할 수 있습니까? –

+0

이것은 "삼각형 스트립"이 아닌 "삼각형 스트립"용입니다. tristrip은 nTriangles + 2 꼭지점을 사용하는 삼각형 목록을 지정하는 데이터 형식입니다. 첫 번째 삼각형 이후의 각 삼각형은 이전 삼각형의 마지막 두 꼭지점을 사용하기 때문입니다. –

답변

0

당신의 형상은 특히 구조가 간단하지만 만약 일반적으로, 바로 가기가있을 수 있습니다 다음과 같이하고 싶습니다.

  • 삼각형 목록에서 정점과 가장자리 목록을 만듭니다. 여기에는 공유 된 점을 감지하는 것이 포함됩니다 (정확하게 일치하는 것이므로 일종의 퍼지 검색을 필요로하지 않고 해시로 찾을 수 있기를 바랍니다) 그리고 공유 된 선 (공유 된 꼭지점의 동일한 쌍 사이에 두 개의 모서리를 그리지 마십시오) .
  • 왼쪽 상단의 점을 찾습니다.
  • 가능한 한 왼쪽 상단으로 이동하고 반 시계 방향으로 엣지를 찾습니다.
  • 다음 정점으로 이동하십시오.
  • 가능한 한 이전 크기에서 두 배가되는 다음 가장자리를 찾습니다.
  • 왼쪽 상단의 점을 다시 칠 때까지 계속 이동하십시오.
6

나는 다음과 같은 일을해야 믿습니다 정점의 목록을

워크. 다각형에 첫 번째 점을 추가합니다. 스택의 두 번째 점을 누릅니다. 다각형에 세 번째 점을 추가합니다. 스택의 포인트를 밀어 넣고 목록의 끝까지 도달 할 때까지 다각형에 추가합니다. 목록의 끝에 도달하면 스택의 포인트를 팝하고 다각형에 추가합니다.

+0

내 생각에 이것이 내부 점을 설명하지 않는다고 생각합니다. 그거야? –

+0

@ belisarius : 삼각형 스트립의 윤곽과 정확하게 일치하는 다각형을 생성하려고하는 경우 다각형을 "단순화"하려고하지 않습니다. (예를 들어) 표면을 여러 개의 주위를 감싸는 긴 삼각형 스트립으로 테셀레이션 한 경우 똑같은 방식으로 주위를 감싸는 다각형을 생성합니다. 적어도 3 차원을 사용한다면 훨씬 많은 것을 할 수는 없습니다. 내부 점은 종종 Z 값이 다르므로 보존해야합니다. –

+0

예. 나는 그게 OP의 의도라고 생각 했어. 나는 틀릴지도 모른다. Tnx. –

1

alt text

나는 당신의 삼각형 스트립은 항상 (내가 OpenGL을위한 사실이라고 생각) 같은 방법으로 연결되어 가정합니다.

  • 은 "바닥"정점은 항상 두 개의 떨어져 : A, C, E는 ...
  • 은 "최고" 정점은 항상이 떨어져 : B, D, F, ...

"하단"목록을 가져와 "상단"목록의 역순으로 추가하십시오. (예에 대한 ACEFDB)


또는 더 직접적으로, 문자 대신 0부터 시작하는 인덱스를 사용하여 : 당신이 "삼각형 스트립"무엇을 의미합니까

// do "bottom" 
for (i = 0; i < N; i += 2) 
    addVertex(i) 

// do "top" 
largestOddNumberLessThanN = N % 2 == 0 ? N - 1 : N - 2; 
for (i = largestOddNumberLessThanN; i >= 0; i -= 2) 
    addVertex(i)