Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

Drahtgitteroptimierung evtl. mit Baumstruktur. Wie?

  Alt 14. Jan 2004, 17:32
Hallo liebe Leut'.

Folgendes Problem: Ich muss ein 3D-Drahtgitter optimieren. Bisheriges Problem ist, dass mein Programm zwar ein 3D-Objekt bzw. die Koordinaten der Flächenpunkte erfolgreich errechnet, allerdings werden bei z.B. 2 zusammenhängenden Flächen die gemeinsamen Punkte doppelt hinterlegt. Dies möchte ich gerne verhindern!
Als Beispiel mal im .obj-Stil (.obj = 3D-Dateiformat als ASCII, ähnlich .dfx (Autocad)) wie es dann ausschaut:

Delphi-Quellcode:
Vertices:
1 : 0 / 0 / 0
2 : 10 / 0 / 0
3 : 0 / 10 / 0
Face 1: 1 / 2 / 3 <---- gibt an, aus welchen Punkten (Vertices) die Fläche besteht

Vertices:
4 : 10 / 0 / 0
5 : 0 / 10 / 0
6 : 10 / 10 / 0
Face 2: 4 / 5 / 6
Man sieht: Die Punkte (Koordinaten) 2/3 und 4/5 sind redundant und unnötig. Optimiert würde das etwa so aussehen:
Delphi-Quellcode:
Vertices:
1 : 0 / 0 / 0
2 : 10 / 0 / 0
3 : 0 / 10 / 0
4 : 10 / 10 / 0
Face 1: 1 / 2 / 3
Face 2: 2 / 3 / 4
Ich kenne bei der Berechnung der Puntke sowohl seine Koordinaten, als auch seine Flächenzugehörigkeit. Ein Weg, den ich mir vorstellen könnte, wäre eine Baumstruktur, die man dann beim Schreiben in die Datei rekursiv ausliest. Jedoch wurschtel ich hier schon gut rum, bekomm aber keine ordentliche unproblematische Struktur auf die Beine

Was auch zu beachten wäre: Es sind nicht selten > 1.000.000 Punkte!!! die es zu verwalten gilt. Also muss das Teil auch noch sehr schnell sein UND zu allem Überfluss auch noch speicheroptimiert sein.


Wie würdet IHR an sowas herangehen?
(Ist übrigends mein erstes Problem dieser Art. Mir fehlt wohl etwas Übung...)

Nochwas: Dieses Programm hat mit DirectX oder OGl nix zu tun. Von daher (falls es solche Methoden dort überhaupt gibt) wären Verweise in diese Richtung nicht sonderlich hilfreich. Das wäre dann nochmal Neuland für den kleinen dizzy

Ganz dick danke schonmal!
Herzlichen Gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat