Binären Baum füllen



  • Wo soll ich beginnen einen Binären Baum zu füllen? ich lade ein MD2 Model. Ich will die Primitive in einem Baum speichern. Doch wo soll ich anfangen zu sortieren? Und wie?



  • Du könntest den Raum immer an einer möglichst mittigen Ebene Spalten, so wie man BSP-Levels aufbaut (ein gutes Tutorial gibt s auf zfx.info), jedoch wird dies mit heutigen Grafikkarten eher langsamer sein. Du könntest aber auch über die BoundingBoxen den Mesh immer mittig teilen und die jeweiligen Vertices in einem Array speichern ...

    M.T.


  • Mod

    wähle die koordinate mit der größten ausdehnung, sortier die polys dann anhand dieser koordinate und unterteil sie dann in der mitte... und das rekursiv.

    ich frage mich aber, wozu der baum, culling? collision? radiosity? ...?

    rapso->greets();



  • ich frage mich aber, wozu der baum, culling? collision? radiosity?

    Man kann es doch für culling und collision verwenden? Oder gibt es da unterschiede?

    Noch was. Nehmen wir an ich habe ein langes Raumschiff. Im Spiel könnte dieses Raumschif auch senkrecht in den Sichtbereich eintauchen. Wenn ich das Objekt jedoch in seiner Länge sortiert habe, was dann?
    Oder soll ich erst in der Länge teilen, danach diese geteilten Stücke noch einmal in der vertikalen teilen? Und so weiter?


  • Mod

    weil durch das alleinige aufteilen in einen binärbaum noch garnichts gewonnen ist, man fragt sich dann, ob du bounding volumes drumrum machst, und welche du machst hängt auch davon ab ob collision oder culling.

    bei der collision von 2 objekten mußt du das eine objekt in den space des anderen transformieren, somit alle bounding volumes eventuell auch. da sind kugeln im vorteil, weil du nur den mittelpunkt transformieren mußt (es sei den du nutzt scaling *fg*), bei boxen müßtest du das center und die extends transformieren.

    wenn du allerdings culling machst, dann ist die akkurarität (gibt's das wort?) die du durch boxen bekommst wichtiger, da kugeln eventuell unnütz das X-fache an renderaufwand machen könnten.

    aber wozu teilst du eigentlich ein model auf, normalerweise zeichnet man das in einem einzigen aufruf, oder ist es so gross (das raumschiff) dass du da durchlaufen willst?

    und den zweiten absatz, da versteh ich das problem nicht... und ja, in jeder rekursion jeweils in der ausgedehntesten ackse sortieren und teilen.

    rapso->greets();



  • Man sollte bedenken, wie oft überhaupt der Fall eintritt, das man nur eines Teil des Objektes sieht, so das der Baum (egal was für einer), überhaupt was bringt. Wenn man z.b. auf dem Raumschiff rumläuft, dann hat man wahrscheinlich durchschnittlich 1/4 des Schiffs im Frustrum. Ist es jedoch ein Raumschiff, das man in 10km sieht, dann sieht man es meist komplett oder überhaupt nicht. Die Chance, das es grad am Bildschirmrand liegt, ist eher gering. In dem Fall wäre es evtl. sinnvoller VIPM (o.ä.) für das Raumschiff zu benutzen anstatt es in einen Baum zu zerlegen.

    BTW: Heisst das nicht Akkuranz? 😉


Anmelden zum Antworten