상자, 원뿔 및 인용 한 모든 것과 같은 기본 모양의 모서리와면을 생성하는 방법은 정점을 만드는 동시에이를 생성하는 것입니다. 실제로, 정점과면을 계산하기 쉽도록 논리적으로 정점을 만들어야합니다.
공간에 점 집합을 입력으로 취하고 그 위에 소위 " 점 집합 삼각 분할 "을 계산하는 알고리즘이 있지만 점 집합 삼각 분할 문제는 NP-complete 이므로 모서리와면을 더 빨리 만들 수 있습니다. 정점을 계산하고 알고리즘이 작동하도록하는 것보다 이 솔루션이 존재한다는 것을 알려 주기만하면됩니다.
이 비효율적 인 솔루션 외에도 다음 예제에서와 같이 기본 방식으로 만 기본 요소를 처리 할 수 있다고 생각합니다.
메쉬는 꼭짓점과면 입니다. 메쉬에면을 구성하지 않는 선이 포함되어 있지 않으면 모서리는면에 대한 설명 내에 포함됩니다. 꼭짓점은 3 개의 부동 소수점 좌표의 튜플입니다. 가장자리는 단순히 정점에 대한 참조 쌍이지만 다시는 꼭 필요하지 않습니다. 예를 들어 정점이 인덱스 배열에 있다고 가정하십시오. 그럼 당신의 모서리는 그 배열의 지표 쌍이 될 수 있습니다. 면은 인덱스 배열의 경우 정점 또는 인덱스의 삼중 참조에 대한 삼중 참조 입니다.
이러한 기본 도형을 구성하는 꼭짓점, 모서리 및면을 계산할 수 있어야합니다. 왜냐하면 그것들을 계산할 수 있다는 것은 객체의 속성을 이해한다는 것을 의미합니다. 우리가 볼 다른 도구.
원뿔
n + 2 꼭짓점, 3n 모서리 및 2n 면이 있는 원뿔의 경우 :
- 두 개의 꼭지점을 만듭니다.
- 정점 중 하나 (기본 정점) 주위에 원을 만듭니다. 즉, 첫 두 정점 사이의 세그먼트에 수직 인 평면 내에 있습니다. 희망적으로 삼각법을 사용하여 원을 만들 수 있습니까? 그것은 이미 원뿔의 모든 정점입니다. 그것은 또한 모든 모서리의 1/3입니다 ( 원 에는 n 개의 모서리가 있고 총 3n 이 있습니다).
- 기준 꼭지점에서 원 의 n 꼭지점 까지 n 모서리를 만듭니다 . 그렇게하면 얼굴의 절반 ( n 개의 얼굴)을 만들 수 있습니다.
- 팁 꼭지점에서 원 의 n 꼭지점 까지 n 모서리를 만듭니다 . 그렇게하면 다른 절반의면 (즉, n 개의 면)을 만들 수 있습니다.
1)
2)
3)
4)
최종 결과 :
원을 만드는 루프를 실행할 때 모서리와면을 작성할 수도 있습니다. 같은 복잡성, 같은 것. 원에 하나의 꼭짓점을 만들어 정점 배열에 저장하고 원하는 경우 인덱스 쌍 배열에 해당 가장자리 (지수 쌍)를 추가 한 다음 마지막으로 세 쌍의 색인 배열에 해당면을 추가하십시오 . 다음 정점으로 넘어갑니다.
실린더와 튜브 : 동일한 작업을 두 번하지 않고 쿼드
다시, 튜브의 경우 원통의 상단 또는 하단 디스크의 중심이 될 정점과 원으로 시작합니다.
- 꼭짓점을 만드십시오.
- 정점 주위에 원을 만듭니다. 원의 연속 정점과 중심 정점과 각 원 정점 사이에 모서리를 추가합니다 (가장자리를 원할 경우). 중심 정점으로 만들어진 각 정점의 정점과 원에있는 두 개의 연속 정점 사이에면을 추가합니다.
- 이 모든 것을 복제하고 원하는 원통의 길이만큼 방금 만든베이스에 수직 인 방향으로 사본을 번역하십시오.
- 상단과 하단을 연결하십시오.
상단과 하단을 연결하려면 서로 마주 보는 정점 쌍 사이에 쿼드를 만들어야합니다. 앞서 생각하고 왜 자신을 4 개의 꼭짓점에서 2 개의 삼각형면을 만드는 함수로 만들지 않겠습니까?
끝난. 이번에는 동일한 구조 (원 + 중심)가 원통에 두 번 나타나서 바로 가기를 사용한다는 사실을 사용합니다. 우리 는 꼭 필요한 원뿔과 반대로 모든 정점, 가장자리 및면을 손 으로 만들 필요는 없습니다 .
이 게으름 원리에 따라 원의 1/4을 만들고 복제하는 것이 가능하며 매우 간단한 변형으로 원을 만들 수도 있습니다 (원과 마찬가지로 원이 유효합니다). 그렇게 복잡한 모양은 아닙니다.
객체를 쉽게 만들려면 항상 객체의 기하학적 속성을 사용해야합니다 . 즉, 그들의 대칭 과 불변 .
원통의 경우 기본 정점을 만들지 말고 원을 만들고 복제하고 사본을 번역하고 쿼드를 완성하십시오.
구체와 캡슐 : 복잡성 추가, 여전히 동일한 작업 두 번
캡슐을 만들려면 UV 구체를 만들어 두 개의 절반으로 나누고 첫 번째 절반을 번역 한 다음 두 가지를 캡슐의 측면과 연결하십시오.
다시 한 번 구의 여덟 번째 (!!)를 만든 다음 복제하고 뒤집은 다음 다른 축을 제외하고 결과를 복제하고 뒤집어 4 단계로 전체 구를 얻을 수 있습니다 (여덟 번째 , 복제 및 세 번 반전). 아마도 과잉이지만 원의 경우보다 적습니다.
간단한 UV 구 :
우리는 실제로 그것의 절반 만 (예를 들어) 만들고, 그 절반을 복제하고, 사본을 뒤집어 캡슐 길이로 번역합니다.
우리는 상단과 하단을 연결합니다 :
실제 (어떤) 어려운 일은 구체를 만드는 삼각법에서 비롯됩니다. UV 구체에 속하는 모든 정점 세트는 다음 형식의 모든 점 세트로 설명 될 수 있습니다.
여기서 R 은 구의 반지름이며 특정 양의 정수 N의 경우 상수가 있습니다.
θ = × π / N ,
K 및 n은 함께 정수 K의 다양한에서 0 까지 2N-1 및 N 으로부터 다양한 -N / 2 에 + N / 2 .
구의 반구 또는 8 구를 만들려면 k 및 n에 의해 취해지는 값 세트를 제한해야합니다 .
경우 k는 실수뿐 아니라 정수 숫자했다, 당신은 전체 구 표면에 단지 정점을 얻을 것입니다. 여기서 우리가 한 것은 프리미티브의 표면 방정식을 래스터 화하는 것 입니다.
다시 말하지만, 더 많은 삼각법, 더 많은 정점, 더 많은 쿼드, 더 많은 대칭, 더 많은 불변량 ... 더 많은 형상! 원환 체의 표면에 대한 방정식을 찾고, 적절하게 "래스터 화"하고, 원환 체의 (명백한) 대칭을 사용하여 문제를 단순화 한 다음, 방금 정의한 정점 세트를 반복하여 가장자리와면을 만듭니다. 가다!
보다? 완전히 간단합니다.