Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 23:46

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Fr Okt 24, 2003 08:03 
Offline
DGL Member
Benutzeravatar

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 :lol: . 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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 08:39 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 10:02 
Offline
DGL Member
Benutzeravatar

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 10:20 
Offline
DGL Member
Benutzeravatar

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 10:24 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 10:30 
Offline
DGL Member
Benutzeravatar

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 10:57 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 11:33 
Offline
DGL Member
Benutzeravatar

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 :lol:

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 11:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
HomerS hat geschrieben:
Hab pointer genommen, weil ich meinen RAM schonen wollte.

Die Logik verstehe ich jetzt nicht? In wie fern wolltest du denn damit deinen Speicher schonen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 12:30 
Offline
DGL Member
Benutzeravatar

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 12:42 
Offline
DGL Member
Benutzeravatar

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.

PS: ein Pointer ist 4 Byte groß. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 14:17 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
Ich muss ja sparsam damit umgehen, hab ja so wenig :cry:

Ich dachte immer nur 1 Byte. Wieder was dazu gelernt.

P.S. Bin jetzt bei der Erstelle-Methode angelangt, funktioniert bis jetzt sehr gut

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 15:31 
Offline
DGL Member
Benutzeravatar

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 24, 2003 18:54 
Offline
DGL Member
Benutzeravatar

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"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 25, 2003 12:01 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Ich hasse Pointer.

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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]