Ich spiele mit XNA für ein Spielprojekt von mir selbst, hatte zuvor Kontakt zu OpenGL und habe ein bisschen mit Ogre gearbeitet, also versuche ich, die gleichen Konzepte für XNA zum Laufen zu bringen.
Insbesondere versuche ich, XNA einen Szenenmanager hinzuzufügen, um hierarchische Transformationen, Kegelstumpf (möglicherweise sogar Okklusion) und Transparenzobjektsortierung zu handhaben.
Mein Plan war es, einen Baumszenenmanager für hierarchische Transformationen und Beleuchtung zu erstellen und dann einen Octree für das Ausstoßen von Stumpf und das Sortieren von Objekten zu verwenden. Das Problem ist, wie die Geometriesortierung durchgeführt wird, um Transparentfolien korrekt zu unterstützen. Ich weiß, dass das Sortieren sehr teuer ist, wenn es pro Polygon durchgeführt wird, so teuer, dass es nicht einmal von Ogre verwaltet wird. Aber Standbilder von Ogre sehen richtig aus.
Irgendwelche Ideen, wie es geht und welche Datenstrukturen verwendet werden sollen und welche Funktionen sie haben? Ich weiß, dass die Leute in der Umgebung Folgendes verwenden:
- Octrees
- Kd-Bäume (jemand im GameDev-Forum sagte, dass diese weitaus besser sind als Octrees)
- BSP (das die Bestellung pro Polygon abwickeln sollte, aber sehr teuer ist)
- BVH (aber nur für Kegelstumpf- und Okklusions-Keulung)
Vielen Dank
Tunnuz
McCranky deckte erstaunlicherweise alle von Ihnen erwähnten Datenstrukturen ab, aber ich sehe, dass Sie nicht an R-Trees gedacht haben. Das Wissen über diese Strukturen ist riesig und sie eignen sich sehr gut für räumliche Bereichsabfragen (die meisten Arbeiten wurden von Datenbanktheoretikern und -praktikern in den letzten 30 Jahren durchgeführt). Kürzlich hat Sebastian Sylvain von Rare einen Kurs über die GDC gegeben, warum sie auch für Spiele arbeiten (insbesondere auf Konsolen mit in-order-Prozessoren). Sie können mehr aus dem PDF erfahren: http://www.gdcvault.com/play/1012452/R-Trees-Adapting-out-of
Eine naive und einfache Implementierung ist ziemlich einfach, und die Grundstruktur bietet viel Raum für Verbesserungen (bessere Verwaltung der Aufteilungsheuristik, Vorabrufmöglichkeiten, parallele Suche usw.).
quelle
Die Antwort hängt stark von der Anzahl der Modelle ab, die Sie verwenden möchten. Ich habe für XNA nicht wirklich mit solchen Dingen gearbeitet, aber wenn Sie AABBs für die Tests verwenden und nicht zu viele Modelle haben, sind Sie mit einem Brute-Force-Test möglicherweise gut genug. Vielleicht sogar auf einen Faden werfen. Ich bin nicht sicher, wie / ob es SSE / VMX-Optimierungen gibt, die für C # verwendet werden können, aber wenn Sie es schaffen, die AABBs linear im Speicher abzurufen (damit Sie keine Cache-Fehler für die CPU erhalten), sollten Sie in der Lage sein eine große Anzahl von Tests in kürzester Zeit durchzusetzen.
quelle