Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Hi,
das mit Messer, Gabel und Licht war ein Kindheitstrauma, dabei müsst ihr mir nicht helfen . Bei den Pointern vielleicht.
Also ich hab aus dem BSP Tut von zfx.info meine eigene BSP Klasse entwickelt. Funktionierte perfekt. Jetzt hab ich vor 2 Tagen damit angefangen sie umzuschreiben und dynamisch zu machen: Es funktioniert nicht. Und ich hab keine Ahnung woran es liegt. Zwischendurch gab es ein paar Fehler, die aber z.B. an einer falschen Ebene_von_Poly Funktion lagen. Wäre nett wenn sich das jemand mal ansehen könnte. Auch für Verbesserungsvorschläge (andere Verwaltung der Daten) bin ich offen.
MfG HomerS
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich kann dir nicht genau sagen wo das Problem liegt. Aber mit ist sofort eine Sache in der Methode Ebene_von_Poly aufgefallen. Dort dereferenzierst du deinen Ponter nicht. Ebenso in der Methode Klassifiziere_Punkt. Du solltest dort noch einmal deine Quellen durchschauen und genau darauf achten, ob es sich um einen Pointer handelt und ob das ^ auch benutzt wird. Delphi erlaubt es zwar auch ohne aber ob das dann auch noch 100%tig funktioniert ist so eine Sache. Es kann sein, dass deine Pointer als nichtpointer (also Record) behandelt werden und du überall in fremden speicher rumschreibst.
Vielleicht funktioniert es dann ja schon.
Andern falls müsstest du dich mal von Methode zu Methode hangeln (Debuggen) und schauen, ob deine Daten richtig geladen werden und ob alle Pointer auch vernünftig zugewiesen wurden etc. Als außenstehender ist es nicht unbedingt einfach nur mit Hilfe einer einzelnen Unit und ohne Funktionstest dort einen Fehler zu finden. Das ist bei Pointer immer so eine Sache.
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Ich habs verbessert. Nutzt nichts. Der Fehler muss irgendwo bei einer Zählung der Polygone eines Back-Nodes liegen. Ich habs überprüft. Es wird die Funktion Finde_besten_Splitter bei einem BackNode aufgerufen und dabei gibt es den Fehler.
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Muss mich korrigieren, dass Problem ist das bei dem Node, bei dem der Fehler auftritt gar nichts stimmt.
1. 255 (klingt nach Fehler) Polys- unmögl. 1. Unterteilung der Wurzel 160:161 Polys
2. Keine Poly-Daten vorhanden
Ich seh nicht mehr so recht durch! HIIIIIIIIIIIILLLLLLFE
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Dann musst du dich wohl mal durchhangeln und genau schauen ob auch überall das richtige drin steht.
Habe noch mal in der methode Finde_besten_splitter geschaut.
Folgendes Konstruct ist vollkommen überflüssig.
@Splitter^
Du dereferenzierst dir einen Pointer um dir anschließend wieder dessen Adresse (Pointer) zu holen??? Ein normales "Splitter" sollte ausreichen. Das "@Polyliste^[j]" ist im gegenzug richtig. Du dereferenzierst dein Array und übergibst den Pointer des Elementes j.
Du hattest ja gesagt, dass du bis vor zwei Tagen eine Funktionierende Version davon hattest. Ich weiß jetzt auch nicht wie du das übersetzt hattest. Also stück für Stück oder gleich alles auf einmal. Wenn du letzteres getan hast dann rate ich dir dringenst. Nimm dir noch mal die funktionierende Version und ändere das nur Stückchenweise. Und sobald du etwas geändert hast, dass du es dann gleich testen kannst. Somit kannst du Fehlerquellen sehr gut eingrenzen. Weil wenn es vorher funktioniert hat, dann kann der Fehler nur in einem kleinen Teil der Quellen sein.
So wie es jetzt ist kann es sein, dass du in Array eine Stelle zu viel schreibst und dir dadurch alles nachfolgende Zerschießt. So etwas hatte ich nämlich gerade.
Pointer sind was so etwas angeht sehr heimtückisch.
PS: hab gerade dein letzten Post gesehen und rate dir dringenst es Stück für Stück neu zu machen. Sonst wird das nie was.
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Erst hat ich die Hau-Ruck Methode genommen, doch nach 15min hab ich eingesehen, dass das nichts wird. Also alles gelöscht und nochmal Stück für Stück. Denkst du, ich könnte die Hilfmethoden behalten? (Ebene_von_Poly, ...). Die hab ich ordentlich getestet, gingen alle soweit. Die einzigen wo's Probleme gab war die Erstelle_BSP_BAUM und die Split_Poly, werde die zwei löschen und die anderen nochmal überprüfen.
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bestimmt. Wenn du diese schon einmal erfolgreich getestet hast dann sollte das kein Problem darstellen. Und Ebene_von_Poly ist ja auch nicht so die komplexe Methode. Also die Methoden kannst du auf jeden Fall behalten.
Was ich gerade noch gesehen habe. Wo gibst du denn eigentlich die TGLBMP's wieder frei???
Du lädst die zwar immer schön fröhlich in deinen Texturmanager aber die Klassen gibst du nie wieder frei. Du solltest des Destructor bzw. BeforeDestruction überschreiben und dort alles restlos sauber machen.
Das Nächste was mir dabei aufgefallen ist. Sind die Pointer an der Stelle wirklich nötig? Intern verwendest du so wie so richtige Records. Und wenn du als Parameterprefix ein const schreibst, dann übergibt Delphi intern auch nur den Pointer des Records. Wenn du es verändern möchtest, dann solltest du var nehmen. Dann kannst du dessen Inhalt auch ändern.
Wäre evtl mal ne Überlegung wert.
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Hab pointer genommen, weil ich meinen RAM schonen wollte. Und das Freigeben ist erstmal egal. Was nutzen mir die schönen Texturen, wenn ich gar nicht soweit komme, um sie auch zu benutzten
Aber das const und var ist sicherer. Klingt gut, werde das jetzt einbauen
Danke
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Hätte ich z.B. die eine ganze TNode - Variable übergeben, Größe ca. 500 Byte. Die wird dann ja als richtige Variable neu angelegt. Pointer 1 Byte groß
--> 500 mal kleiner oder?
Hab nicht an das const und var gedacht
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ah so meinst du das. Ja. Delphi (C++ übrigens auch) erzeugen eine Kopie der Variable und übergeben diese an die Methode. Mit Pointern, Var und Const kann man so etwas ganz gut verhindern.
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Kann sich vielleicht jemand mal die Ebene_von_poly Methode ansehen. Es steht so bei zfx. Aber es funktioniert nur richtig wenn man das minus bei result.normal := (-) wegmacht. SO wie beim Download. Aber bei zfx steht es mit Minus, es kommen dann aber falsche Ergebnisse raus.
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Nachdem ich jetzt alles umgeschrieben hab und das nichts genützt hat hab ich eine Theorie: Ich denke das der Fehler in dem Node_Pool liegt. Wenn da ein neuer Node hinzugefügt wird, irgendwelche Polys gelöscht werden und so weiter. Habt ihr vorschläge, dass ganze anders zu organisieren? z.B. einfach Back und Front im TGLNode als TGLNode zu deklarieren funktioniert ja nicht.
WÄre über Vorschläge glücklich
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Kennt jemand ein gutes Zeiger-Tutorial, wo erklärt wird, was das ^vor und nach einer Variable zu bedeuten hat? Und was es mit dem @ auf sich hat.
Ansonsten zu dem Problem mit den Nodes: Sorry, aber ich hab keinen blassen Schimmer, wovon ihr da redet *g*. Würde ja echt gern helfen, kann aber nur empfehlen zur Bug-Suche Sämtliche Optionen des Debuggers zu aktiviern und sich dann mit F7 und F8 durchzuhangeln.
Mitglieder in diesem Forum: Majestic-12 [Bot] und 2 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.