삼각 스트립

Triangle strip
정점 A, B, C, D, E, F가 있는 4개의 삼각형 도표.

삼각형 스트립삼각형 메시에서 연결된 일련삼각형이며 정점을 공유하여 컴퓨터 그래픽에 보다 효율적인 메모리 사용을 가능하게 한다.그것들은 인덱싱이 없는 삼각형 목록보다 더 효율적이지만, 대개 똑같이 빠르거나 느린 삼각형 목록이다.[1][2]삼각형 스트립을 사용하는 주된 이유는 일련의 삼각형을 만드는 데 필요한 데이터의 양을 줄이기 위해서입니다.메모리에 저장된 정점의 수는 3N에서 N+2로 감소하며, 여기서 N은 그릴 삼각형의 수입니다.이를 통해 디스크 공간을 덜 사용할 수 있을 뿐 아니라 RAM에 더 빨리 로딩할 수 있다.

예를 들어, 다이어그램의 4개의 삼각형은 삼각 스트립을 사용하지 않고 ABC, CBD, CDE, EDF의 4개의 별도 삼각형으로 저장되고 해석되어야 할 것이다.그러나 삼각형 스트립을 사용하면 ABCDEF의 정점 순서에 따라 간단하게 저장할 수 있다.이 시퀀스는 ABC, BCD, CDE 및 DEF에서 정점이 있는 삼각형 집합으로 디코딩될 수 있지만 정점이 판독되는 정확한 순서는 왼쪽에서 오른쪽 순서로 배열되지 않는다. 이는 인접한 삼각형이 교대로 향하는 결과를 낳기 때문이다.

OpenGL 구현

삼각 스트립을 사용하여 OpenGL에서 그린 두 삼각형 모델

OpenGL은 삼각형 스트립에 대한 기본 지원을 가지고 있다.고정 함수 OpenGL(OpenGL 3.0에서 사용되지 않음)은 즉시 모드를 사용하는 삼각 스트립과 glBegin(), glVertex*(), glEnd() 기능을 지원한다.최신 버전은 glDrawElementsglDrawArray를 사용하는 삼각 스트립을 지원한다.

즉시 모드 OpenGL을 사용하여 삼각형 스트립을 그리려면 glBegin() 인수를 통과해야 하며, 이 인수를 통해 OpenGL에 삼각형 스트립이 그리려고 함을 알린다.glVertex*() 함수군은 삼각형 스트립의 각 정점에 대한 좌표를 지정한다.자세한 내용은 The OpenGL Redbook을 참조하십시오.[3]

즉시 모드 OpenGL을 사용하여 다이어그램에 삼각형 스트립을 그리려면 코드는 다음과 같다.

 //아래쪽 수직이 시계 방향으로 있음  //glFrontFace의 기본 설정은 시계 반대 방향임  glFrontFace(GL_CW);   글베긴(GL_TRIangle_STRIP);   글베르텍스3f( 0.0f, 1.0f, 0.0f ); //vmsx 1  글베르텍스3f( 0.0f, 0.0f, 0.0f ); //vmsx 2  글베르텍스3f( 1.0f, 1.0f, 0.0f ); //제곱스 3  글베르텍스3f( 1.5f, 0.0f, 0.0f ); //480x 4  글렌드(); 

두 번째 삼각형을 그리려면 정점 하나만 더 그려야 한다는 점에 유의하십시오.OpenGL에서 정점이 지정되는 순서는 표면 규범이 일관되도록 중요하다.

OpenGL 프로그래밍 가이드에서 직접 인용:

GL_TRIangle_STRIP

Triangles Strip In OpenGL.svg

v0, v1, v2, v2, v2, v2, v2, v2, v2, v2, v3(순서에 유의), v2, v3, v4 등을 사용하여 일련의 삼각형(삼면 다각형)을 그린다.순서는 스트립이 표면의 일부를 올바르게 형성할 수 있도록 삼각형이 모두 동일한 방향으로 그려지도록 하는 것이다.

매뉴얼 페이지에서는 더욱 명확하다.[4]

연결된 삼각형 그룹을 그린다.처음 두 정점 뒤에 제시된 각 정점에 대해 하나의 삼각형이 정의된다.홀수 n의 경우 정점 n, n+1, n+2는 삼각형 n을 정의한다.짝수 n의 경우 정점 n+1, n, n+2는 삼각형 n을 정의한다. N-2 삼각형이 그려진다.

위의 코드 샘플과 다이어그램은 시계방향으로 그려진 삼각형을 보여준다.전면으로 간주되는 이들을 위해서는 glFrontFace(GL_CW)에 대한 선행 호출이 필요하며, 그렇지 않으면 GL_CCW의 초기 값(시계 반대방향으로 그려진 삼각형은 기본적으로 전면으로 표시됨)을 갖는다.[5]이는 백페이스 삼각형이 도태되기 때문에 glEnable(GL_CULL_FACE)glCULLFACE(GL_BACK)가 이미 활성화되어 있는[6] 경우(기본적으로 GL_BACK)[7]에 의미심장하다.

특성 및 시공

삼각형 스트립의 꼭지점 배열도 삼각형 스트립을 나타낸다는 정의에서 따온 것이다.그러나 이 하위 스트립이 짝수(1 기반 카운팅 포함) 정점에서 시작되면 결과 삼각망이 방향을 바꾼다.예를 들어, 하위 문자열 BCDEF는 BCD,CED,DEF 등 삼각형을 나타낸다.

마찬가지로 스트립의 정점이 반전되면 스트립의 정점 수가 짝수인 경우 동일한 삼각형 집합이 된다.(예: 스트립 FEDCBA는 원래 스트립과 동일한 삼각형 FED,ECD,DCB,CAB를 나타낸다.)그러나 스트립에 정점 수가 홀수인 경우 역 스트립은 반대 방향으로 삼각형을 나타낸다.예를 들어 스트립 ABCDE를 반전시키면 삼각형 EDC, DBC, CBA를 나타내는 스트립 EDCBA가 발생한다.

일반 폴리곤 메시를 단일 긴 스트립으로 변환하는 것은 최근까지는 일반적으로 불가능했다.일반적으로 삼각형 스트립은 에지 루프 세트와 유사하며, 모델의 삼각 팬으로 표현된다.Stripe[8] 또는 FTSG[9] 같은 도구는 여러 스트립으로 모델을 나타낸다.삼각형 세트를 순차적 스트립으로 최적으로 그룹화하는 것은 NP 완성이 입증되었다.[10]

또는 완전한 물체는 처리 소프트웨어나 하드웨어가 폐기할 영역 제로 삼각형을 포함하는 퇴보된 스트립으로 설명할 수 있다.퇴보된 삼각형은 스트립에 불연속 또는 "점프"를 효과적으로 도입한다.예를 들어, 다이어그램의 메쉬는 ABCDDFEEDC로도 표현될 수 있으며, 이는 ABC CBD CDD DDF DFF FFED DEC(이탤릭체로 표시된 삼각형 제거)로 해석될 것이다.이 스트립이 처음에 왼쪽에서 두 개의 삼각형을 만든 다음 다시 시작하여 오른쪽에서 나머지 두 개를 만드는 방법에 주목하십시오.

삼각형 스트립의 불연속부는 항상 정점을 재전송함으로써 구현될 수 있지만, API는 때때로 이 기능을 명시적으로 지원한다.IRIS GLSGI 알고리즘과 같은 초기 알고리즘이 의존하는 기능인 스왑(후속 정점 두 개를 스트립에 고정하는 기능)을 지원했다.최근 OpenGL/DirectX는 Primary Restart 기능을 사용하여 퇴보된 삼각형 없이 여러 삼각형 스트립을 렌더링할 수 있다.

삼각형 스트립을 사용한 원곡선 추적

참조

  1. ^ "Documentation Archive".
  2. ^ "The Hacks of Life: To Strip or Not to Strip". 31 January 2010.
  3. ^ 오픈GL 레드북
  4. ^ "GlBegin".
  5. ^ glFrontFace
  6. ^ 글컬페이스
  7. ^ OpenGL FAQ / 10개의 클리핑, 컬링 및 가시성 테스트
  8. ^ 아잔리, 엘비르.2007년 3월 28일에 회수된 스트라이프.
  9. ^ 시앙, 신유.FTSG, 2011년 1월 21일에 검색됨(링크는 더 이상 유효하지 않음)
  10. ^ 레지나 에스트코스키, 조셉 S. B. 미첼, 신유 시앙.다각형 모델을 삼각형 스트립으로 최적의 분해.2002.pp.254~263 url=http://www.ams.sunysb.edu/~jsbm/ft-fdf url=http://portal.acm.org/citation.cfm?id=513431

참고 항목