Nieco więcej szczegółów na temat żądanego wejścia i wyjścia może być pomocne.
Na przykład, jeśli próbujesz ustawić wielokąty w trójkąty, prawdopodobnie działa wentylator trójkątów. Jeśli próbujesz wyciąć wielokąt na małe kawałki, możesz zaimplementować jakieś maszerujące kwadraty.
OK, źle się domyśliłem - założyłem, że maszerujące kwadraty będą bardziej podobne do maszerujących kostek. Okazuje się, że to coś zupełnie innego, a nie to, co miałem na myśli ...: |
W każdym razie, aby bezpośrednio odpowiedzieć na twoje pytanie, nie znam żadnej prostej biblioteki, która robi to, czego szukasz. Zgadzam się co do użyteczności CGAL.
Algorytm, o którym myślałem, to w zasadzie dzielenie wielokątów liniami, gdzie linie są siatkowe, więc najczęściej dostajesz quady. Jeśli masz skrzyżowanie z wielokątem, implementacja będzie prosta. Innym sposobem na rozwiązanie tego problemu jest traktowanie wieloboku 2d jak funkcji i nakładanie siatki punktów. Następnie po prostu zrób coś podobnego do maszerujących kostek. Jeśli wszystkie 4 punkty znajdują się w wielokącie, wykonaj quad, jeśli 3 tworzą trójkąt, 2 tworzą prostokąt itp. Prawdopodobnie jest to przesada. Jeśli chcesz mieć nieregularnie wyglądające wielokąty, możesz losowo określić położenie punktów siatki.
Z drugiej strony można zrobić podziały w stylu catmull-clark, ale pominąć wygładzanie. Algorytm polega w zasadzie na dodaniu punktu w środku ciężkości i na środku każdej krawędzi. Następnie dla każdego rogu oryginalnego wielokąta tworzysz nowy mniejszy wielokąt, który łączy środkowy punkt krawędzi przed rogiem, rogiem, następnym środkiem krawędzi i środkiem ciężkości.Spowoduje to wyłożenie przestrzeni i będzie mieć kąty podobne do wielokąta wejściowego.
Tak więc, wiele opcji i lubię burzę mózgów, ale wciąż nie mam pojęcia, co planujesz użyć. Czy to tworzy destruktywne siatki? Czy wykonujesz jakieś przetwarzanie siatki, które wymaga mniejszych elementów? Próbujesz uniknąć cieniowania artefaktów Gourauda? Czy jest to coś, co działa jako proces wstępny lub w czasie rzeczywistym? Jak ważna jest dokładność? Więcej informacji dałoby lepsze sugestie.
Czy to 3D czy 2D? – GManNickG
@Gman: 2D ----- – mpen