Author Topic: Terrain Optimierung durch Dreiecksminimierung  (Read 9330 times)

Offline Lobby

  • int
  • **
  • Posts: 66
    • View Profile
    • flowersoft
Terrain Optimierung durch Dreiecksminimierung
« on: January 02, 2014, 04:48:34 am »
Wie in einem anderen Thread schon angemerkt arbeite ich zur Zeit etwas mit Terrains. Dabei kam mir die Frage, inwiefern ich das Ganze optimieren kann um möglichst wenige Dreiecke darstellen zu müssen. Ich habe in den zahlreichen Dokumentationen irgendwo gelesen, dass Dreiecke, die dies zulassen, automatisch zu weniger zusammengefasst werden. Stimmt das, und gilt das auch noch, wenn man im Nachhinein mit einem VertexController die Position von ein paar Vertexen manipuliert? (ich kann das Ganze nicht so recht glauben, weil damit ja eine ganze Menge Berechnungen verbunden wären)

Zu guter Letzt: Lohnt sich die Optimierung überhaupt? Konkret würde ich gerne dafür sorgen, dass Bereiche, die weiter von der Kamera entfernt sind, mit weniger Details dargestellt werden. Dies ist aber nur dann sinnvoll, wenn die Berechnungen für diese Optimierung mehr Zeit beim Rendern einsparen als sie selbst verbrauchen.

PS. Ich hätte mir auch gerne mal das Gerenderte als Wireframe anzeigen lassen um die Dreiecke sehen zu können, aber leider kommt beim Versuch mittels world.drawWireframe() eine Meldung, dass ein glPointSize() nicht implementiert sei (und dabei habe ich den pointMode-Parameter auf false gesetzt).
« Last Edit: January 02, 2014, 04:56:08 am by Lobby »

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Terrain Optimierung durch Dreiecksminimierung
« Reply #1 on: January 02, 2014, 01:01:35 pm »
Ich würde sagen, das lohnt sich eher nicht. Diese Ansätze zur dynamischen Geometrieanpassung stammen meistens aus einer Zeit, als die Grafikkarten noch nicht die Geometrieleistung hatten wie heute und als die Geometrie selber auch noch nicht im Speicher der Karte gehalten wurde. Wenn man in der Richtung was machen will, dann besser mittels diskreter Blöcke mit verschiedenen Detailgraden, die man dynamisch wechselt, aber nicht die Geometrie selber ständig umbauen.

Was die Fehler angeht: Ich glaube, das habe ich schon behoben. Probiert mal http://jpct.de/download/beta/jpct.jar.

Offline Lobby

  • int
  • **
  • Posts: 66
    • View Profile
    • flowersoft
Re: Terrain Optimierung durch Dreiecksminimierung
« Reply #2 on: January 02, 2014, 02:25:45 pm »
Gut, wenn es sich geschwindigkeitstechnich ohnehin nicht lohnt hat sich das auch erledigt, danke.

Wegen drawWireframe, ich verwende jpct-ae ;) .

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Terrain Optimierung durch Dreiecksminimierung
« Reply #3 on: January 02, 2014, 02:36:14 pm »
Dann gilt derselbe Link, nur mit dem jpct-ae.jar hinten dran.

Offline Lobby

  • int
  • **
  • Posts: 66
    • View Profile
    • flowersoft
Re: Terrain Optimierung durch Dreiecksminimierung
« Reply #4 on: January 02, 2014, 02:52:07 pm »
Sehr schön, damit kommt schon einmal keine Fehlermeldung mehr. Aber ich bin mir nicht sicher ob das so aussehen soll:

Das ist zweimal die gleiche Szene, oben ohne, unten mit Wireframe - offenbar werden da beim Quader ein paar Dreiecke nicht richtig eingezeichnet. Muss man bei der Objekterstellung vielleicht etwas Besonderes beachten? Ich habe hier die createBox-Methode der ExtendedPrimitives-Klasse verwendet, die ich dir per pn geschickt habe.

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Terrain Optimierung durch Dreiecksminimierung
« Reply #5 on: January 02, 2014, 03:12:55 pm »
Ja, das sieht normal aus. Das liegt daran, dass in der OpenGL ES-Spezifikation etwas weggelassen worden ist, was nötig wäre, um (wie bei der Desktop-Version) vernünftige Drahtgitteransichten auf Basis der vorhandenen Modelle zu rendern. Man müsste theoretisch ein komplett anders strukturiertes Mesh zur GPU schicken, damit das Ergebnis zu 100% korrekt ist. Und das habe ich nicht eingesehen...