Zuviele Daten / schnelle Datenreduktion?



  • Ich muss eine riesengrosse 3D-Ebene komplett darstellen. Die Punkte hab ich, doch wie kann ich eine Vorauswahl der benötigten Vertices treffen?
    Progressive Meshes sind leider viel zu langsam.





  • Ich denke für dein Problem ist ein Quad-Tree zusammen mit Frustum-Culling sehr sinnvoll. So brauchst du nur die Vertices im Speicher zu haben, die auch wirklich benötigt werden.

    M.T.


  • Mod

    wenn du nur die sichtbaren haben möchest ist das schnellste quasi mit einem dreiecks algorithmus auf deiner heightmap die richtigen vertices heraus zu picken.
    als nur für den fall dass du ne map benutzt, schneller geht's wohl nicht 🙂

    aber wenn du wirklich performance willst müßtest du ein LOD einbauen.

    rapso->greets();



  • Mir ging es darum, bevor die Daten überhaupt 3D-mässig ausgewertet werden.

    Habe aber eine wie ich denke effiziente Möglichkeit gefunden. Und zwar über Wavelets, welche als Tiefpassfilter eingesetzt werden. Das ist zwar etwas ungenauer als LOD, aber um einiges schneller.


  • Mod

    ehrlichgesagt versteh ich nicht wirklich was du möchtest... schnelles rendern, schnelle datenreduktion? dynamische datenreduktion während des renderns? worauf kommt es dabei an, weniger vertices oder weniger speicherverbrauch? ...?

    wenn du uns genauer sagen würdest wonach du fragst, würden wir auch besser antworten können... it's on you 🙂

    rapso->greets();



  • -schnelles rendern: ja
    -schnelle datenreduktion: ja
    -dynamische datenreduktion während des renderns: nein/ja

    Zu Punkt 3: Da ich die Ebene in jede Richtung Drehen kann, müssten bei jedem Mausmove die Daten reduziert werden. Und das dauert wiederum zu lange.
    Aber wenn an die Ebene gezoomt wird, sozusagen also nur noch ein Teil sichtbar wird, soll mir die 'schnelle' Datenreduktion wieder ein genaueres Bild liefern.
    Also eigentlich optimal etwas für Wavelets 😉


  • Mod

    versteh ich irgendwie nicht so ganz.

    du hast vertices und die transformierst du erst und reduzierst sie dann?

    normalerweise lässt man die grafikkarte die vertices transformieren, dann sind sie aber schon längst reduziert

    was genau meinst du mit reduzieren, weniger vertices oder weniger speicherverbrauch (das hast du noch net beantwortet, ist aber entscheident, weil ich sonst net weiß, was du genau bezwecken möchtest)

    rapso->greets();



  • dann sind sie aber schon längst reduziert

    Genau das war/ist mein Problem. Ich habe ne riesige Menge an Punkten, von denen viele kaum merklich mehr Informationen in die 3D-Darstellung bringen.
    Wie schon gesagt, progressive meshes (quadtree) sind zu langsam. Speicherverbrauch ist letztendlich erstmal nebensächlich.



  • Im Moment sind die Punkte äquidistant. Was erschwerend hinzukommt, ist, dass Punkte undefiniert sein können. Somit darf zu diesen Punkten hin nicht gerendert werden. Die Fläche dort muss also transparent sein bzw. der Hintergrundfarbe entsprechen.


  • Mod

    das was ich am anfang beschrieben habe ist das schnellste um nur die wirklich im frustum befindlichen vertices zu finden.. ob du damit jeden vertex einzeln rauspicks oder cluster von vertices ist ja deine sache 😉
    also schneller als quadtrees und actress meine ich.

    um die vertexmenge bei hocher qualität zu reduzieren ist wohl deine wavelet idee net schlecht, aber wie du das zu poly verbinden möchtest würd ich gern wissen... oder ist das egal?

    rapso->greetS();



  • hast recht, das mit den Polys hab ich ganz übersehen.
    Hab noch 2 Fragen.
    1. Ich benutze D3D9 und verwende Meshes. Hier gebe ich ja eine Indexliste an. Hier kann ich ja um jeden Punkt 4 Dreiecke bilden oder 2. Sicher, mit 2en geht's schneller, aber 4 sehen um einiges besser aus, nach dem ich D3DXCleanMesh aufgerufen habe. Was ist optimal?

    2. Wenn ich innerhalb des Meshs den Vertex an der aktuellen Mausposition bestimmt habe, wie kann ich den am besten highlighten, ohne das gesamte Vertex neu rendern zu müssen?


Anmelden zum Antworten