Mam w swoim kodzie kilka obiektów Spline2D, z których każdy ma metodę Position, Velocity i Acceleration, która zwraca wektor określonej ilości w określonym czasie. Używam tych wektorów do budowy geometrii w celu utworzenia pociągnięć gradientowych dla krzywych, ale mam problemy z samozakrojem na stromych krzywych. Na przykład, oto jedna krzywa, na której mam to miejsce:
Model szkieletowy: http://twitpic.com/2zplw1/full
Wypełniony: http://twitpic.com/2zpmnt/full
Jak widać, na drugim zakręcie wewnętrzna część przecina się, co powoduje ten brzydki artefakt. Czy istnieje dobry algorytm / metoda obrysu krzywych bez powodowania tego przecięcia się?
EDYCJA : Bardziej ekstremalne przykłady plus makieta tego, co chciałbym osiągnąć:
Model szkieletowy: http://twitpic.com/2ztwzi/full
Wypełniony: http://twitpic.com/2ztwkt/full
Ideal Outcome (makieta): http://twitpic.com/2ztxa8/full
Odpowiedzi:
Jeśli renderujesz je za pomocą GPU i dowolnego nowoczesnego interfejsu 3D (np. OpenGL / D3D), wydaje mi się, że możesz się tego pozbyć dzięki testom głębokości. Jeśli przypiszesz swoje zewnętrzne wierzchołki do z = FAR, a wewnętrzne do z = NEAR, testowanie głębokości powinno zapobiec wyświetlaniu nakładania się. Z OpenGL:
Zastrzeżenie emptor: to nie zadziała, jeśli potrzebujesz półprzezroczystych pociągnięć.
źródło
„Poprawka” będzie zależeć od tego, jak ma wyglądać wynikowy wynik. Problem nie został tu wystarczająco dobrze zdefiniowany: jak to ma wyglądać?
Sugeruję, aby najpierw spróbować zrobić jeszcze bardziej ekstremalny przykład usterki, a następnie użyć Photoshopa / farby do naprawy, by znaleźć inspirację dla rozwiązania.
Czy chcesz to złożyć? Nakładasz się na krawędź? Wciągać, dopóki się nie nakłada?
źródło