Wpis z mikrobloga

Pytanie do WPF 3D. Zrobiłem sobie dwie obracające się bryły (obracam je z częstotliością 25Hz). Czego jak odpalę symulacje obrotu tych dwóch brył zżera mi to większe pół procka? Przecież wpf korzysta z DirectX (mam DX 11) więc grafika w wpf powinna być wykonywana na karcie graficznej

Szczególy:
1.mam funckje która tworzy trojkąt płaski: czyli tworze MeshGeometry3D i uzupełniam. Z tej funkcji zwracam GeometryModel3D (bo jeszcze materiał tam dodaje)
2. funkcja do tworzenia cube'a: w funkcji tworzę Model3DGroup i uzupełniam o trójkąty z powyższej funkcji (12) i zwracam taki uzupełniony Model3DGroup.
3. Na koniec powyższy Model3DGroup przypisuje do ModelVisual3D i to jest mój ostateczny prostopadłościan.
3 Z częstotliwością 25 Hz dla obydwóch prostopadłościanów (czyli 2x ModelVisual3D) tworze nowe Transform3DGroup i dodaje do 'children' RotateTransform3D i TranslateTransform3D (obrót z przesunięciem). Na koniec te dwa nowe obiekty Transform3DGroup przypisuje to własności 'Transform' prostopadłościanów.

Nie bardzo rozumiem czego symulacja (punkt 3) zżera tyle procka.

#programowanie #csharp #wpf #grafika3d #pytanie
  • 7
@PanCogito: Visual Studio 2015 ma profilera do WPF-a. Nie bawiłem się WPF-em 3d, ale najgorsze problemy z wydajnością miałem po ręcznym sterowaniu drzewem wizualnym. Może da się do Transform3DGroup/RotateTransform3D zbindować coś, żeby nie tworzyć następnych DependencyObject-ów.
@boo007: no może, ale nie wydaje mi się żeby to tak wpływało na wydajność. Ciekawe jak to jest z korzystaniem z direct x podczas transformacji. Czy wyliczanie nowej pozycji punktów po przypisaniu do własności 'Transform' odbywa się na procku czy na karcie graficznej? Bo rozumiem że samo wyświetlanie obiektu na ekranie (światło, odbicie kamera itp) to już zadanie karty graficznej. Nawet gdyby obrót był wyliczany przez procek to czy możliwe jest
@boo007: ciężko mi pokazać wszystko bo mam to już obudowane w pewną koncepcje.
kod jest tu (sry jak forma pokazania kodu #!$%@?) : http://wklej.org/id/1760263/

Wyjaśnienia do kodu:
- To jest klasa która obudowuje obiekt ModelVisual3D.
- Celem klasy jest to żeby obiekt 3d zachowywał się jak część 'łancucha'
- Mogę łączyć ze sobą obiekty tej klasy za pomocą metody join. Obiekty łączą sie tak że początek drugiego jest dołączany do końca
@boo007: w sumie to nie jest nic krytycznego (jeszcze prawie połowa procka zostaje na inne zadania więc jakoś przeżyje póki co( ͡° ͜ʖ ͡°) ). Jak Ci się chce możesz rzucić na to okiem. Nie chce mi się trochę wyłuskiwać z aplikacji tylko tej części odpowiedzialnej za obrót. ( ͡° ͜ʖ ͡°). Jak Ci się coś rzuci w oczy w powyższym to możesz