삼각형 메쉬

Triangle mesh
돌고래를 나타내는 삼각형 메쉬의 예.

컴퓨터 그래픽스에서 삼각형 메쉬란 폴리곤 메쉬의 한 종류입니다.공통 모서리 또는 정점으로 연결된 삼각형 세트(일반적으로 3차원)로 구성됩니다.

많은 그래픽 소프트웨어 패키지와 하드웨어 장치는 개별적으로 표시되는 동일한 수의 삼각형보다 메시로 그룹화된 삼각형에서 더 효율적으로 작동할 수 있습니다.이것은 일반적으로 컴퓨터 그래픽스가 삼각형의 모서리에 있는 꼭지점에서 연산을 하기 때문입니다.개별 삼각형의 경우 시스템은 각 삼각형에 대해 3개의 정점에서 작동해야 합니다.큰 메쉬에서는 8개 이상의 삼각형이 하나의 꼭지점에서 만날 수 있습니다.이러한 꼭지점을 단 한 번만 처리하면 작업의 일부를 수행하여 동일한 효과를 얻을 수 있습니다.

많은 컴퓨터 그래픽스 어플리케이션에서는 삼각형의 메쉬를 관리할 필요가 있다.망사 구성요소는 정점, 모서리 및 삼각형입니다.애플리케이션에는 메시 컴포넌트 간의 다양한 접속에 대한 지식이 필요할 수 있습니다.이러한 연결은 실제 정점 위치와 독립적으로 관리할 수 있습니다.이 문서에서는 접속 관리에 편리한 단순한 데이터 구조에 대해 설명합니다.이 데이터 구조만이 가능한 것은 아닙니다.그 밖에도 많은 유형이 존재하며 메시에 대한 다양한 쿼리를 지원합니다.

표현

컴퓨터 메모리에 메시를 저장하고 사용하는 다양한 방법이 가능합니다.OpenGL APIDirectX API를 사용하면 삼각형 메쉬를 그래픽 하드웨어, 삼각형 스트립 및 인덱스 어레이에 전달하는 두 가지 주요 방법이 있습니다.

삼각대

삼각형 간에 정점 데이터를 공유하는 한 가지 방법은 삼각형 스트립입니다.삼각형의 스트립을 사용하면 각 삼각형이 하나의 이웃과 하나의 완전한 모서리를 공유하고 다른 삼각형이 다음 이웃과 다른 삼각형을 공유합니다.또 다른 방법은 삼각팬입니다. 삼각팬은 하나의 중심 정점을 공유하는 연결된 삼각형의 집합입니다.이러한 방법으로 정점은 효율적으로 처리되므로 N개의 삼각형을 그리기 위해 N+2개의 정점만 처리해야 합니다.

삼각형 스트립은 효율적이지만, 단점은 임의의 삼각형 메시를 스트립으로 변환하는 방법이나 편리성이 명확하지 않을 수 있다는 것입니다.

데이터 구조

메시를 나타내는 데이터 구조는 삼각형 삽입과 삼각형 제거라는 두 가지 기본 작업을 지원합니다.또한 삼각형 소멸 방식에서 유용한 모서리 축소 작업도 지원합니다.구조는 정점 위치를 지원하지 않지만, 각 정점에 고유한 정수 식별자(일반적으로 연속된 정점 위치 배열에서 해당 정점의 색인)가 할당된다고 가정합니다.메시 정점은 단일 정수로 정의되며 hvi로 표시됩니다.메쉬 에지는 에지의 끝점에 대응하는 한 쌍의 정수 hv0, v1i로 정의된다.에지 맵을 지원하기 위해 에지는 v0 = min(v0,v1)이 되도록 저장됩니다.삼각형 성분은 삼각형의 정점에 대응하는 정수 hv0, v1, v2i의 3배로 정의된다.삼각형 맵을 지원하기 위해 v0 = min(v0,v1,v2)이 되도록 삼각형이 저장됩니다.hv0, v1, v2i와 hv0, v2, v1i가 서로 다른 삼각형으로 처리되는지 확인합니다.양면 삼각형이 필요한 애플리케이션은 데이터 구조에 두 개의 3중 모두를 삽입해야 합니다.인덱스 순서에 대한 지속적인 주의사항을 피하기 위해 문서의 나머지 부분에서는 (실장에서는 순서를 처리하지만) 정점이 어떤 방식으로든 순서를 지정한다는 의미는 아닙니다.컴포넌트간의 접속성은 삼각형을 나타내는 트리플 세트에 의해 완전히 결정됩니다.삼각형 t = hv0, v1, v2i는 정점 v0, v1 및 v2를 가진다.가장자리 e0 = hv0,v1i, e1 = hv1,v2i 및 e2 = hv2,v0i를 가집니다.역접속도 알려져 있습니다.정점 v0은 모서리 e0 및 e2 및 삼각형 t에 인접합니다.정점 v1은 가장자리 e0 및 e1 및 삼각형 t에 인접해 있다.정점 v2는 가장자리 e1과 e2 및 삼각형 t에 인접해 있다.3개의 엣지 e0, e1, e2는 모두 t에 인접해 있습니다.데이터 구조가 저장하는 정보의 양은 응용 프로그램의 필요에 따라 달라집니다.또한 응용 프로그램은 구성 요소에 추가 정보를 저장하기를 원할 수 있습니다.정점, 모서리 또는 삼각형에 저장된 정보를 정점 속성, 모서리 속성 또는 삼각형 속성이라고 합니다.여기서 설명하는 단순한 데이터 구조에 대한 이러한 추상적인 표현은 다음과 같습니다.

꼭지점)<>integer>// v에지)<, 정수, integer>// v0, v1트라이앵글<>integer,integer,integer>// v0, v1, v2 VData)<>응용 프로그램 관련 꼭지점 data>EData)<>응용 프로그램 관련 가장자리 data>TData)<>특수 용도의 삼각형 data>VAttribute)&lt을 말한다.VData, set<, Edge>, ,set<.Triangle&gt를<>;을 끓여데이터, eset, tset EAttribute)<>.EData, set<.Triangle&gt를<>;//데이터, tset TAttribute = <TDATA>; // 데이터 VPair = 쌍 <Vertex,VAttribute >; EPair = 페어 <엣지,EAttribute >; TPair = 쌍 <트라이앵글,TAttribute >; VMap = 맵 <VPair >; EMap = 맵 <EPair>; TMap = 맵<TPair>; 메쉬 = <VMAP, EMAP, TMAP>; // vmap, emap, tmap

맵은 해시 테이블의 표준 삽입 및 삭제 기능을 지원합니다.항목이 아직 존재하지 않는 경우에만 삽입이 수행됩니다.제거는 항목이 존재하는 경우에만 수행됩니다.

모서리 접기

이 작업에는 가장자리 hvk, vti를 식별하는 작업이 포함됩니다. 여기서 vk는 유지 정점, vt는 슬로 정점이라고 합니다.이 모서리를 공유하는 삼각형이 망사에서 제거됩니다.정점 vt도 메시에서 삭제됩니다.vt를 공유한 모든 삼각형의 정점은 vk로 대체됩니다.그림 1은 삼각형 메쉬와 메쉬에 적용된 세 개의 가장자리 접힘 시퀀스를 보여줍니다.

인덱스 배열

인덱스 배열의 경우 메시는 두 개의 개별 배열로 표현됩니다. 하나는 정점을 유지하는 배열이고 다른 하나는 삼각형을 정의하는 배열로 세 개의 인덱스를 유지하는 집합입니다.그래픽 시스템은 변환된 데이터에 대해 작업하는 인덱스 세트를 사용하여 정점을 먼저 처리하고 삼각형을 렌더링합니다.OpenGL에서는 VBO(Vertex Buffer Object)를 사용하는 경우 glDrawElements() 프리미티브에서 지원됩니다.

이 방법을 사용하면 임의의 수의 정점을 공유하는 임의의 삼각형의 임의의 집합을 중간 처리 없이 저장, 조작 및 그래픽스 API에 전달할 수 있습니다.

「 」를 참조해 주세요.