ich arbeite momentan bissl mit Pointern und komm damit irgendwie nicht klar
polygons[].v is ein Pointer auf den typ TVertex
VertexArray is ein array aus TVertex ..
da dachte ich , dass ich ein @ schreiben muss .. aber da kommt die meldung
Inkompatiple Typen TVertex und Pointer. ????? häh ?
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hm.
Jetzt hast Du geschrieben:
Code:
PPolygon =record v :array[0..2]of^TVertex ;
Polygons :ArrayOf PPolygon ;
Vorher hast Du geschrieben:
Code:
PPolygon =^TPolygon ;
TPolygon =record v:array[0..2]of TVertex;end;
polygons :arrayof PPolygon ;
Welches nimmst Du jetzt? Die Polygons von oben sind gar kein Zeiger, sondern ein Array von Records, die unteren sind schon Zeiger (ein Array von Zeigern).
In der unteren Version musst Du vorher ein GetMem machen.
Übrigens: Deine zweite Version (wo die Polygons gar keine zeiger sind) gefällt mir viel besser. Aber ich weiß natürlich nicht, ob Du die Zeiger für VBOs oder so etwas brauchst. Die VBO-kundigen mögen mir verzeihen. Ich kenn mich da nicht aus.
Zuletzt geändert von Traude am Do Mär 15, 2007 00:24, insgesamt 1-mal geändert.
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
also ich würde es so definieren:
Code:
PPolygon =^TPolygon;
TPolygon =record
V:array[0..2]of TVertex;
end;
dann kannst du immer schön mit den Pointern von den Polygonen schaffen. So wie ich mir den Quellcode ansehe, ist dies wahrscheinlich das Octreetutorial. Und eben solches habe ich so gelöst, was auch wirklich gut funktioniert.
Kurze Frage am Rande, weil ich das grad mehrfach gesehen hab. Macht diese Recorddefinition eigentlich sinn? Denn ich nutze ja nur eine Variable im Record, da kann ich doch direkt ein Array nehmen:
Code:
PPolygon =^TPolygon;
TPolygon =array[0..2]of TVertex;
Oder hat das irgendwelche Vorteile, ausser dass man MeinPolygon.V[0] statt MeinPolygon[0] schreiben muss?
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich denke es hat was damit zu tun, wie der Code anschliessend aussieht.
Du hast natürlich recht, wenn Du sagst, dass Deine Definition kürzer ist.
Aber wenn Du dann einen Vertex ansprechen willst, dann sieht das bei der kürzeren Form so aus:
Code:
Type
TVertex =Record X,Y,Z:Single;End;
TPolygon =Array[0..2]Of TVertex;
Var
MyPolygon: TPolygon;
Begin
SetLength(MyPolygon,1);
MyPolygon[0].X:=1;
MyPolygon[0].Y:=2;
MyPolygon[0].Z:=3;
........
Dabei sieht man den Vertex gar nicht, er fällt irgendwie "unter den Tisch". Das könnte man als Nachteil ansehen, wenn man deutlich programmieren möchte.
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
Der Unterschied ist vor allem, dass ein Polygon bei mir noch materialeigenschaften und evtl ebenengleichungen besitzt. Somit ist es durchaus gescheit einen Record zu machen.
Ich verwende für PPolygon dann halt immer new(), was dann auch ganz gut geht. Dann muss man nur daran denken, das ganze mit dispose wieder freizugeben.
Irgendwie werd ich aus den Pointern nid schlau^^ ..
Also jetzt hab ich ne variante gefunden , wo ich keine Fehlermeldung bekomm. Aber irgendwie bekomm ich vom Octree nichts zu sehen. Habe gedacht es läge vielleicht daran, dass ich außer sichweite bin . Aber das dürfte ja eigentlich nicht sein. oder ? .. Also meine Kamera liegt bei 0,0,0. Da dürfte ja die Map anfange. Naja .. aber vielleicht liegt es ja daran dass ich falsche Speicher oder so benutzt habe.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Also, ich fürchte, bei diesem Quellext muss ich passen. Mein Rat ist, schau Dir mit dem Debugger an, ob Du überhaupt Daten reinbekommst. Und dann sieh Dir die Renderprozedur an, da kann schliesslich auch eine ganze Menge passieren:
1) Stichwort Culling,
2) Deine Kamera ist auf 0/0/0, was ist, wenn sich das ganze Zeug im positiven Z-Bereich befindet, und Du hast Zentralperspektive eingeschaltet?
Mitglieder in diesem Forum: 0 Mitglieder und 9 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.