ich beschäftige mich in meiner knappen Zeit gerade mit dem Rendern von Planeten via Heightmaps (Perlin Noise). als ersten Wurf habe ich eine Displayliste verwendet, was bei 500.000 Elemente großen Maps mir zwar deppert vorkommt, aber dennoch brauchbar funktioniert. Aber ich will's gern ein bisschen intelligenter lösen und ein dynamischer Detaillevel ist bestimmt nichts schlechtes.
Am cleversten scheint mir für diesen Zweck der geometrical mipmap-Algorithmus zu sein. Zur Darstellung würde ich wir gesagt nicht wie bisher Displaylisten, sonder VBO nutzen. Ich vermute, dass es am gängigsten ist, alle Vertices des Planeten in einer VBO zu laden. Oder?
Doch nun zum eigentlichen Problem. Wenn sich nun der Detaillevel eines Patches der Heightmap verringert, sollte ich ja die nicht mehr benötigten Vertices entsorgen, oder? Wie lösche ich ein eingetragenes Vertex aus dem VBO? Oder muss ich die ganze Liste neu laden?
Danke für's Lesen. Weiterführende Hinweise wären der Hammer schlechthin. Grüße, DNA
_________________ Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich denke das dürfte nicht nötig sein. Bzw. wenn du aus einem VBO ein Vertex löschen möchtest, dann hast du keine andere Wahl es den Buffer neu aufzubauen. Aber vielleicht musst du es ja nicht löschen sondern kannst es einfach überspringen. Bei einem VBO ist es normal so, dass du einen Vertex und einen Indexbuffer hast. Was hindert dich daran lediglich in dem Indexbuffer das ein oder andere Element zu entfernen. Damit wird dann automatisch der VertexBuffer übersprungen. Allerdings weiß ich nicht wie der Algorythmus arbeitet. Wenn der zum Beispiel zwischenschritte interpoliert dürfte es schon spannender werden.
Aber bei VBOs zwingt dich natürlich niemand immer das ganze zu rendern. Du kannst auch einzelne Dreiecke aus ihm herraus rendern. Irgendwo gabs auch mal eine PDF (von NVidia glaube ich) in dem der effiziente Umgang mit VBOs beschrieben wurde. Da es teilweise mehrere Möglichkeiten für ein und den Selben weg gibt ist das dann nicht unwichtig.
PS: Ich hoffe du hast deinen VBO dann auch so erstellt, dass es dynamisch ist, damit es speziell optimiert werden kann. Weiß nicht obs tatsächlich auch was bringt.
[edit] Ach ja. Zum Löschen. Du kannst ein VBO in den Arbeitsspeicher mappen und dann wie jeden anderen Pointer bearbeiten (dessen Daten) und dann auch bereiche Kopieren oder überschreiben. Aber evtl ist das ja auch nicht nötig.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.