W poprzednim artykule opisane zostały zagadnienia związane z rysowaniem linii w scenie 3D opartej o WPF. W tym artykule zostaną opisane gotowe rozwiązania umożliwiające kreślenie linii.
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Przedstawiony w poprzednim wpisie opis rysowania linii jako „cienkich” prostokątów odpowiednio obróconych w kierunku kamery może wydawać się skomplikowane. Jednak są oczywiście dostępne rozwiązania, które wykorzystując techniki opisane powyżej, pozwalają na kreślenie linii w scenie 3D. Zaliczyć można
do nich:
- przygotowaną przez Microsoft i opublikowaną na Codeplex bibliotekę 3D Tools i klasą obsługującą kreślenie linii: ScreenSpaceLines3D (kod źródłowy i biblioteka jest dostępna tutaj: http://3dtools.codeplex.com/);
- przygotowaną przez Charles'a Petzold'a, dołączoną do książki „3D Programming for Windows. Three-Dimensional Graphics Programming for the Windows Presentation Foundation ”, opublikowaną na stronie http://www.charlespetzold.com/3D/, biblioteką „Petzold.Media3D library” (dostępną wraz z kodem źródłowym: Petzold.Media3D.zip) i klasą obsługującą kreślenie linii: WireLines.
Wspomniane powyżej biblioteki
wykorzystują opisane w poprzednim wpisie rozwiązania, przez co mogą
pojawiać się problemy o charakterze wydajnościowym (związane z
obsługą zdarzenia CompositionTarget.Rendering). Należy tutaj wspomnieć, że autor WireLines z biblioteki
Petzold.Media3D, czerpał inspiracje z 3DTools, więc WireLines może
działać trochę lepiej. Warto również wspomnieć o zaokrąglaniu
końców linii, które dostępne jest w WireLines:
Moim zdaniem
Przyznam, że spośród tych dwóch bibliotek eksperymentowałem
przede wszystkim ze ScreenSpaceLines3D z biblioteki 3D Tools i mogę
stwierdzić, że używa jej się wygodnie. Linie można rysować
zarówno z poziomu kodu w C# jaki i XAML. Muszę jednak przyznać, że
w przypadku bardziej skomplikowanych scen (z dużą ilością linii)
rzeczywiście problemy z wydajnością są odczuwalne i może to
bardzo limitować wykorzystanie tego rozwiązania w bardziej
zaawansowanych zastosowaniach. Jeżeli chodzi o fakt, że linie
rysowane przy pomocy ScreenSpaceLines3D są „bardziej kanciaste”
i „niezaokrąglone” (patrz rysunek wyżej), to przyznam, że mi
to nie przeszkadza i na pewno „nie rzuca się w oczy”.
Warto przeczytać ...
Na koniec polecam również przeczytanie artykułów:- "Performance
issues with ScreenSpaceLines3D", dostępnego pod adresem:
http://www.ericsink.com/wpf3d/1_ScreenSpaceLines3D_Performance.html
- "The
Petzold.Media3D Library: The "Wire" Classes",
dostępnego pod adresem:
http://www.charlespetzold.com/blog/2007/08/310158.html
Brak komentarzy:
Prześlij komentarz