sobota, 23 października 2010

[WPF 3D] Linie 3D przy pomocy ScreenSpaceLines3D i WireLines [PL]

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:
Promuj

Brak komentarzy:

Prześlij komentarz

Posty powiązane / Related posts