2012-06-21 3 views
0

내 모델 뷰어 용 collada loader를 작성했습니다.메쉬 삼각 측량 : 중첩 루프 복잡도

이제 모든 정점과 인덱스를 반복하고, 메쉬를 렌더링 할 수 있도록 버퍼를 만들고 인덱스 및 버텍스를 작성합니다.

모델이 삼각형이 아닌 경우 두 가지 옵션이 있습니다. 나는 그들이 내 버퍼에 쓰여지는 것처럼 색인을 추적 할 수있다 (즉, 삼각형을 만들기 위해 더 많은 색인을 계산하고 추가한다).

또는 버퍼를 작성하고 버퍼 시스템을 그대로두기 전에 전체 메쉬를 트리 거링 할 수 있습니다 (메쉬가 손으로 삼각형 화되었다고 가정합니다).

손을 만들기 전에 모델을 교배시키기 위해 목록 전체를 링크 된 목록 루프에로드하고 새로운 인덱스를 삽입하여 4 개 이상의 폴리곤을 하나의 타일로 해킹해야합니다.

메쉬를 써서 삼각형을 만들었다면 4+ 폴리곤을 쓰고 별도의 버퍼에 넣고 그 버퍼에 전체 4+ 다각형이 있으면 삼각 분할하고 새로운 것을 써야합니다 지수.

이것은 본질적으로 4 + 삼각형을 만날 때마다 트리거되는 for 루프를 추가합니다.

이것은 지금까지 작성한 내용 중 가장 복잡한 내용이며 내 머리를 감싸는 데 정말 힘든 시간을 보내고 있습니다.

하나는 전체 메쉬를 복제하여 사용하고있는 메모리 양을 두 배로 늘려서 처리 할 수 ​​있고, 다른 하나는 네 개의 폴리곤을 만났을 때만 트리거되는 중첩 for 루프를 포함합니다.

둘 모두를 쓰거나 테스트하지 않고도 두 옵션의 복잡성을 어떻게 측정 할 수 있는지 조언 해 줄 수 있습니까?

답변

1

간헐적 인 상황을 처리하기 위해 내부 루프를 추가하는 것이 좋습니다. 문제를 올바르게 이해하면 다각형을 테스트하고 필요에 따라 삼각형을 테스트해야합니다. 조건부로 실행 된 내부 루프는이를 적절하게 반영한 것입니다.

내부 루프가 함수를 너무 길거나 못생긴/읽기 어려운 것으로 생각한다면 내부 루프를 포함하는 별도의 "triangulate_polygon()"함수를 작성하고 조건부로 호출 할 수 있습니다.

관련 문제