Hallo =)
Bin bei einer nächtlichen Programmieraktion auf ein Phänomen gestoßen, wo ich mich jetzt Frage ob ich das richtig interpretiere.. Was zur folge hätte, dass ich einen ganzen Programmteil nochmal aufreißen müsste =)
Also ich hab folgendes gemacht.. :
Ich fuckel gerade mit ganz simplen OpenGl Sachen rum. Ich hab mir also Typen angelegt, die meine grafischen Objekte verwalten und auch zeichnen.
Diese Objekte haben jeweils 2 Listen. Zum einen eine Vertexliste, zum anderen eine Liste mit den Dreiecken.
Die Dreiecke verweisen dann auf die Vertexliste.
Gut, funktioniert soweit, die OpenGL Darstellung ist auch nicht das Problem bzw eigentlicher Inhalt meiner Frage =)
Beide Listen sind zur Zeit dyn. Arrays und sowohl der Vertex als auch der Dreieckstyp sind Records.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TVertex = record x,y,z: Single; end; type PVertex = ^TVertex;
type TTriangle = record V1,V2,V3 = PVertex; end;
type TVertexList = Array of TVertex; type TTriangleList = Array of TTriangle; |
Wenn ich jetzt ein neues Dreieck hinzufüge, weise ich den Eckpunkten ( V1, V2, V3 ) direkt die Pointer auf die Vertices zu.
Also Adressen die sich in einem dynamischen Array befinden. ( In der Tat.. ein wenig hart

)
Delphi-Quelltext
1: 2: 3:
| TriangleListe[TriangleIndex].V1 :=@(VertexListe[VertexIndex]); TriangleListe[TriangleIndex].V2 :=@(VertexListe[VertexIndex]); TriangleListe[TriangleIndex].V3 :=@(VertexListe[VertexIndex]); |
Anfürsich funktioniert das auch.. Aber habe jetzt weiter an meinem Programm rumgefuckelt..
Wenn ich jetzt noch andere Objekte nachträglich hinzufüge, spinnt die OpenGL-Anzeige. Beim nachforschen hat sich dann rausgestellt, dass die Werte in der TriangleListe nichtmehr stimmen.
Für mich sieht das danach aus, dass Delphi dynamische Arrays im Speicher hin und herschiebt, sobald ein Adressraum anders verwendet werden könnte.
Daher meine Fragen:
1. Stimmt diese Annahme? =) 2. Falls das so ist, kann man die Adressierung fixieren?
Sonst bleibt mir keine andere Wahl, als mit Objekten zu Arbeiten, was ich bisjetzt aus Geschwindigkeits und Speichergründen bei den Vertices nicht gemacht hab.
Gruß
Alle Rechtschreibfehler schieb ich auf die nächtlichen Wurstfinger
