Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Da habe ich mir überlegt, dass beim Generieren des "Terrains" überprüft wird, ob ein Würfel von 6 anderen umschlossen wird, und wenn ja, dass dieser dann gar nicht gezeichnet wird. Hierbei handelt es sich ja nicht um eine Überprüfung in der Echtzeit.Nun, jeden Würfel einzeln zu cullen (und ich hoffe nicht, dass du Würfel/Flächen zeichnest, die im Inneren liegen und somit eh nicht sichtbar sind) dürfte fast mehr Performance fressen als sie einfach zu zeichnen. Daher ist zumindest eine Gruppierung definitiv sinnvoll, auch wenn es nicht unbedingt ein Octree sein muss.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Da habe ich mir überlegt, dass beim Generieren des "Terrains" überprüft wird, ob ein Würfel von 6 anderen umschlossen wird, und wenn ja, dass dieser dann gar nicht gezeichnet wird. Hierbei handelt es sich ja nicht um eine Überprüfung in der Echtzeit.
Eine zweite Frage: Das Culling der Innenseiten (also das, was man dank Clipping eh nicht sieht) muss ich nicht übernehmen oder? Denn ich habe mal gehört, dass man auch die Würfel einfach Face per Face zeichnet und von Anfang an nicht sichtbare Faces ausschließen kann.
Bisher habe ich alle im Frustum liegenden Würfel gerendert und dabei auf die Funktion Mesh->DrawSubset(0); zurückgegriffen. Diese Funktion rendert ja den gesamten Mesh. Wie kann ich nun aus diesem Mesh bestimmte Faces rauslassen?Man kann sogar einzelne Seiten der Würfel weglassen, welche an einen anderen angrenzen. Kann ja durchaus sein, dass von einem Würfel nur eine Seite sichtbar ist, ähnlich wie bei Kopfsteinpflaster auf einer Straße.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Ja, dass die Würfel-für-Würfel Methode ineffizient ist, war mir durchaus bewusst, ich wollte es erstmal nur zum Laufen bringen. Ich habe das Gitter nochmal in Chunks (16 x 16 x 128) unterteilt (so wie es das Original macht), sodass ich dann Chunk für Chunk rendere, also für jeden Chunk einen VertexBuffer anlege.Jup. Einmal 100 Würfel zu rendern ist deutlich schneller als hundert mal einen einzelnen.
Da wirst Du vermutlich ähnlich viel Performance rausholen wie Du mit Deinem Frustum-Culling erreichen willst. Eine Umstellung Deiner gesamten Geometrie wäre also von Vorteil.
Wie Jonathan sagte wäre es vermutlich klug, große Teile des Levels (die Du dann separat cullen kannst) in einem VBO abzulegen statt jeden Würfel einzeln.
Werbeanzeige