Registriert: Mi Jan 05, 2011 14:55 Beiträge: 47
Programmiersprache: Delphi, C++,C
Ich hab jetzt das nächste Problem. Da ich zu faul bin eine eigene Kollisionskontrolle zu schreiben, dachte ich ich nehme Newton. Da es auf Sascha's Homepage einige gut Demos gibt dacht ich, es sollte kein Problem sein und hab mir die Demos angeschaut. Doch leider, als ich versucht habe es umzusetzten kommt immer ein Zugriffsfehler innerhalb der DLL und Delphi spuckt keine Fehlermeldung aus. Ich hab es schon mit älteren importunits und den dazugehörigen Newton DLL's versucht. Ich hab alle DLL's im SDK probiert doch immer mit dem gleichen Ergebinss. Nun ist einmal meine Frage, welche DLL überhaupt zu benutzen ist und ob mein Code falsch ist.
Hier mal der Code
Code:
procedure TFormMain.ErstellNewtonMap; var VTmp : array[0..3] of TVector3f; MTmp : TMatrix4f; Min : TVector3f; Max : TVector4f; i : integer; begin Collider := NewtonCreateTreeCollision(NewtonWorld, 0); NewtonTreeCollisionBeginBuild(Collider); for i := 0 to Length(polygons)-1 do begin VTmp[0] := Vertex2Vector3f(polygons[i].[0]); VTmp[1] := Vertex2Vector3f(polygons[i].[1]); VTmp[2] := Vertex2Vector3f(polygons[i].[2]); NewtonTreeCollisionAddFace(Collider, 3, @VTmp[0], SizeOf(TVector3f), 1); end; NewtonTreeCollisionEndBuild(Collider, 1); NewtonBody := NewtonCreateBody(NewtonWorld, Collider); Matrix_SetIdentity(MTmp); NewtonBodySetMatrix(NewtonBody, @MTmp[0,0]); NewtonCollisionCalculateAABB(Collider, @MTmp[0,0], @Min[0], @Max[0]); NewtonSetWorldSize(NewtonWorld, @Min[0], @Max[0]); NewtonReleaseCollision(NewtonWorld, Collider); end;
polygons ist ein Array aus einem Record welcher aus 3 Singlevariablen besteht.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wo genau tritt denn der Fehler auf, und v.a. welcher? An sich sieht der Quellcode korrekt aus. Und zur DLL : Immer die aktuellste, die gibts neuerdings hier. Alternativ kannst du mal die Optimierung beim Bauen der Treecollision abstellen, also den letzten Parameter von NewtonTreeCollisionEndBuild auf 0.
Aber wie gesagt kann man ohne Fehlermeldung und Stelle an der die auftritt wenig zu deinem Problem sagen. Wenn der Debugger von Delphi nicht anspringt (was sehr eigenartig ist, sollte bei Newtonfehlern wie bei jedem anderen Fehler auch passieren) dann musst du evtl. mal eingrenzen, also schrittweise ausklammern bis du an die Stelle kommst wo es kracht.
Registriert: Mi Jan 05, 2011 14:55 Beiträge: 47
Programmiersprache: Delphi, C++,C
Danke für die Antwort. Sobald ich zu Hause bin schick ich den genauen Fehler. Allerdings liegert Delphi den Fehler nachdem die Prozedur durchlaufen wurde.
Zuletzt geändert von nuclear am Di Mär 01, 2011 15:01, insgesamt 1-mal geändert.
Registriert: Mi Jan 05, 2011 14:55 Beiträge: 47
Programmiersprache: Delphi, C++,C
So jetzt mal dei genaue Fehlermeldung: Im Projekt Engine.Exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung:'Zugriffsverletzung bei Adresse 10016E83 in Modul 'Newton.dll'. Lesen von Adresse 0000098C'. Auch die Verbesserung beim Erstelen der Trees bring nichts. Wie gesagt, tritt der Fehler erst nach der Prozedur auf.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Newtonwelt initialisiert? Geh mal Schritt für Schritt durch. Kann gut sein dass da irgenwo ne ungültige Matrix oder so bei einem deiner Objekte vorliegt und es dann im NewtonUpdate kracht. Klammer das mal aus und auch das Erstellen des Trees und schau ob der Fehler immernoch da ist, oder poste mal Code. Denn dass da oben ist korrekt, ich aktualisier grad ne Demo auf die neuste Newtonversion und da ist auch ein Collisiontree drin und es funktioniert.
Registriert: Mi Jan 05, 2011 14:55 Beiträge: 47
Programmiersprache: Delphi, C++,C
JA eigendlich hab ichs initaliesiert NewtonWorld := NewtonCreate(nil, nil); is doch richtig oder?
Edit : Ach ja is bisjetzt nur ne landschaft aus ne heigthmap und benutze ich eigendlich den code aus dem tutorial halt nur leicht abgewandelt mit displaylisten.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du sagst der Fehler tritt NACH der Prozedur die du gepostet hast auf? Dann poste mal bitte den Codeteil in der sie aufgerufen wird, evtl. liegt der Fehler ja garnicht in der Erstellung des Trees, der Code stammt ja 1:1 aus meinen Demos, der ist also 100%ig korrekt.
Registriert: Mi Jan 05, 2011 14:55 Beiträge: 47
Programmiersprache: Delphi, C++,C
Ok hab den Fehler gefunden. Ich hab vergessen die Prozedur aufzurufen, wo newton initialisiert wird. Danke nochmal für die Hilfe war ein dummer Fehler.
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.