[C++, DirectX] rendering setek tyś punktow

0

Hej..
Chce wyświetlić elementy punktowe,
mam ich około 850.000...
Korzystam z DirectX-CustomVertex.PositionColored...DrawUserPrimitives
Punkty wyświetlają się, ale strasznie wolno to wszystko działa(zamula mi kompa)...
Jak zoptymalizować rendering?

P.S Jestem początkujący z DirectX (na Windows7) wiec za każda wskazówkę z góry dzięki...

0

direct'a słabo znam, nie wiem czy rysujesz coś w 2D czy w 3D, jak w 3D to do redukcji ilości wyświetlanych obiektów stosuje się :

Back face culling - http://www.gamedev.net/reference/articles/article1088.asp
Frustrum culling http://www.cescg.org/CESCG-2002/DSykoraJJelinek/index.html
LOD - level of details - http://www.free3dtutorials.com/art-theory/3d-max/level-of-detail.php
PVS - http://www.tml.tkk.fi/Opinnot/Tik-111.500/2003/paperit/MikkoLaakso.pdf
Oct tree - http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter37.html zarówno dla modeli jak i map.

Przy czym dwa pierwsze na pewno są zaimplementowane tylko trzeba je włączyć. Pozostałe możesz pisać sam albo skorzystać z jakichś bibliotek. Jak nie o to chodziło to do sprecyzuj.

0
m_laszkiewicz napisał(a)

Hej..
Chce wyświetlić elementy punktowe,
mam ich około 850.000...
Korzystam z DirectX-CustomVertex.PositionColored...DrawUserPrimitives
Punkty wyświetlają się, ale strasznie wolno to wszystko działa(zamula mi kompa)...
Jak zoptymalizować rendering?

P.S Jestem początkujący z DirectX (na Windows7) wiec za każda wskazówkę z góry dzięki...

nie używaj DrawUserPrimitive - ta funkcja przepycha wszystkie wierzchołki przez AGP/PCIe podczas każdego rysowania, dlatego nie uzyskasz nią dobrej wydajności przy takiej liczbie punktów. 85000044 = ~13MB per frame (850k * (x,y,z +kolor)*4bytes) do przesłania przez szynę - to dużo.

W zamian stwórz statyczny VertexBuffer (DXSDK) - wrzuć do niego raz wierzchołki - zostaną one umieszczone w pamięci karty i rendering przebiegnie tak szybko na ile pozwoli wydajność GPU.

1 użytkowników online, w tym zalogowanych: 0, gości: 1