Ich las über DynamicVertexBuffer, und wie es besser für Daten sein soll, die sich häufig ändern. Ich habe eine Welt, die aus Würfeln besteht, und ich muss die Ecken der Würfel in diesem Puffer speichern, um sie auf den Bildschirm zu ziehen.Verwenden von DynamicVertexBuffer in XNA 4.0
Allerdings haben nicht alle Würfel Scheitelpunkte (einige sind Luft, die transparent ist) und nicht alle Flächen der Würfel müssen auch gezeichnet werden (sie sind einander zugewandt), also wie behalte ich die Scheitelpunkte im Auge wo im Puffer gespeichert? Außerdem müssen bestimmte Flächen zuletzt gezeichnet werden, nämlich diejenigen mit Transparenz (wie Glas oder Blätter), und diese Flächen müssen auch in einer Reihenfolge von vorne nach hinten gezeichnet werden, um die Alpha-Vermischung nicht zu stören.
Wenn alle diese Scheitelpunkte willkürlich in diesem Puffer gespeichert sind, woher weiß ich, welche Scheitelpunkte wo sind?
Auch die Anzahl der Scheitelpunkte kann sich ändern, aber der DynamicVertexBuffer scheint mir nicht sehr dynamisch zu sein, da ich seine Größe überhaupt nicht ändern kann. Muss ich den Puffer jedes Mal neu erstellen, wenn ich Flächen hinzufügen oder entfernen muss?
Ich glaube, du meintest "ignoriere alle Gesichter in der -ve x Richtung". Wie auch immer, danke für diese Info. Die Texturen stammen alle aus der gleichen Textur, also ist das kein Problem. Aber sag, dass ich der Welt einen Würfel hinzufüge, und dieser Würfel wird irgendwo platziert, damit er gerendert werden muss. Wo füge ich die Eckpunkte hinzu? Wie kann ich die GPU über diesen neuen Würfel informieren, ohne die Größe des Ortes zu ändern, an dem alle anderen Knoten gespeichert sind? Ich werde Octree Rendering nachschlagen, ich habe Quadtrees und Octrees erwähnt. – Bevin
Ich meine, alle Würfel in der -ve x Richtung zu ignorieren, vorausgesetzt, dass Würfel eine höhere Ebene der Datenstruktur als Flächen sind. Wenn Sie einen Cube ignorieren können, können Sie automatisch alle 6 Flächen ignorieren. Es ist also schneller, Würfel zuerst zu entfernen. Wenn Sie dann potentiell sichtbare Cubes gesetzt haben, versuchen Sie, Flächen zu entfernen. –
Sie denken immer noch über Vertexpuffer, die über Frames hinweg persistent sind. In den meisten Motoren sind sie nicht. Sie füllen die Vertex-Puffer von Grund auf jeden Frame. Sicher können Sie Speicherplatz zuweisen - aber Sie erstellen die Daten neu. Die potenziell sichtbare Gruppe von Gesichtern ändert sich bei jedem Bild. Wenn Sie darüber nachdenken, könnten Sie eine Welt mit Millionen von Würfeln haben, aber jedes Bild, das Sie so wenig wie möglich darstellen wollen - vielleicht nur Hunderte -, besteht darin, die Größe der Eckenpuffer so klein wie möglich zu machen Rahmen. –