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

Aktuelle Zeit: Fr Jul 18, 2025 05:59

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



Ein neues Thema erstellen Auf das Thema antworten  [ 65 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 10:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Oha, kann man eine Sprache, kann man doch auch die andere. C++ ist doch nicht viel anders, mal abgesehen von der Syntax. Ne Schleife sieht da fast genauso aus wie in Delphi, und ob da jetzt NULL oder NIL steht spielt doch auch keine Rolle. Und ansonsten schau mal auf delphi3d.net, da hat Tom nen kleinen Artikel veröffentlicht, extra für Leute die was aus C/C++ übersetzen wollen.

P.S. : An deiner Stelle würde ich mich wenigstens ein bisschen mit C++ anfreunden, gibt ja genug freie IDEs. Ansonsten wirst du oft Sachen finden die du gerne machen willst, es aber keine Delphi-Varianten für gibt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 11:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Das Problem liegt am Programm, ich hasse einfach die umgebung in V-C++ die Syntax, ja gut,
habe mir schonmal ein Buch über DirectX in C++ gekauft.
Und auch gelesen :)
Kam ich net mit klar, mit Delphi komme ich viel besser klar.
Nun, aber nun mal so, soll das bedeuten, das ich für meinen Spieler alle Bodys einzelnt createn und dann in meine spielerklasse speichern muss?
Also in der Spielerklasse nen array mit den bodys und dann, ne so net, scheisse ich verstehs net.

Aber du bringst ja sicherlich bald ne Demo mit nem Character raus ^^
Als ich das Auto im gl3ds-feedback sah ;)

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 11:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ein Auto ist aber was komplett anderes als ein Charakter. Und da es noch keine Newton-Version mit Vehikel-Container gibts, gibts auch keine Demo. Und irgendwie find ichs ein wenig arm, einfach zu warten bis jemand anderes ne Demo rausbringt und da dann den Source herholen. Warum probierst dus denn nicht selbst?

Und wie gesagt : Delphi und C++ haben die gleichen Grundkonzepte, halt nur ne andere Syntax. Und VC muss ja nicht sein, gibt die wie gesagt jede Menge kostenlose und auch gute IDEs (Dev-C, dass übrigens in Delphi entwickelt wurde, ist wohl die beste).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 13:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Wer sagt denn das ich solang warte, ich probiers ja, aber ich komm noch net so dahinter.

Code:
  1. CONSTRUCTOR Tspieler.Create();
  2. BEGIN
  3.   model := TAll3dsMesh.Create(nil);
  4.   model.TexturePath := extractfilepath(paramstr(0));
  5.   model.LoadFromFile(extractfilepath(paramstr(0))+'ball.3ds');
  6.  
  7.   Collipart[count] := NewtonCreateSphere(NewtonWorld,0.5,nil);
  8.   SpielerBody[count] := NewtonCreateBody(NewtonWorld,Collipart[count]);
  9.   NewtonReleaseCollision(NewtonWorld, Collipart[count]);
  10.  
  11. END;
  12.  
  13. PROCEDURE TSpieler.render();
  14. VAR
  15.   i:integer;
  16.   m: TMatrix4f;
  17. BEGIN
  18.   for i:=0 to count do
  19.   begin
  20.   NewtonBodyGetMatrix(SpielerBody[i], @M);
  21.   cameraEyepoint := V3(M[3,0], M[3,1], M[3,2]);
  22.   end;
  23.   glTranslateF(cameraEyepoint[0],cameraEyepoint[1],cameraEyepoint[2]);
  24.     model.Render;
  25.   glDisable(GL_CULL_FACE);
  26. END;


Das soll jetzt mal dazu sein, dass er mir nur ne kugel createt und dann immer dort wo die kugel ist eine zeichnet.
Ja, immer M[3,0]=0; und die anderen 2 auch.
Wie bewege ich diese Kugel, bzw. wie mache ich es, das diese "Auf" der map ist.
Momentan erstelle ich den CollisionTree noch mit deiner Procedure aus einer *.3ds

Wieso also geht das net?
Meine Kugel ist noch halb im boden. Also auf 0. Wie änder ich das und wie kann ich die dann steuern, ich steig da net so durch.
Das hab ich jetzt mal so gemacht wie ichs mir gedacht hab.

EDIT: PS: M = ((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1));

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 13:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Kollision für ein Objekt erstellen (du hast da ein paar wichtige Sachen vergessen) :
  • Kollisionsobjekt erstellen : NewtonCreate[Sphere/Cube], was halt auf das Objekt passt
  • Newtonkörper erstellen : NewtonCreateBody(mit obigem Kollisonsobjekt als Parameter)
  • Dann die Matrix des Objektes setzen, in der steht wie es beim Start rotiert bzw. positioniert ist : NewtonBodySetMatrix
  • Callback für physikalische Berechnungen setzen : NewtonBodySetForceAndTorqueCallback
  • Masse und Massezentrum des Objektes setzen : NewtonBodySetMassMatrix
Du hast die 3 letzten Punkte (die ja sehr wichtig sind) komplett vergessen (steht doch alles in meiner Demo drin...)

Und dann in jedem Frame :
  • Newtonwelt aktualisieren : NewtonUpdate (macht man normalerweise am ENDE des Frames)
  • Die von Newton ermittelte Matrix holen (da steht ja alles drin, Rotation und Translation) :NewtonBodyGetMatrix
  • Matrix mit aktueller Objektmatrix multiplizieren : glMultMatrifx


Ausführlicher kann mans nicht mehr erklären. Ist aber doch alles haargenau in meiner Demo so gemacht. Du kannst da doch nicht einfach (siehe Tspieler.Create) die Hälfte weglassen und dich dann wundern warums nicht geht.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Habe nun meine 2 Proceduren oben erweitert und zeige dir nun mal meine 2 Proceduren meiner Engine.
Code:
  1. CONSTRUCTOR TEngine.Create();
  2. BEGIN
  3. NewtonWorld := NewtonCreate(nil,nil);
  4.  
  5. MatWorld  := NewtonMaterialGetDefaultGroupID(NewtonWorld);
  6. NewtonMaterialSetDefaultSoftness(NewtonWorld, MatWorld, MatWorld, 0.05);
  7. NewtonMaterialSetDefaultElasticity(NewtonWorld, MatWorld, MatWorld, 0.4);
  8. NewtonMaterialSetDefaultCollidable(NewtonWorld, MatWorld, MatWorld, 1);
  9. NewtonMaterialSetDefaultFriction(NewtonWorld, MatWorld, MatWorld, 1, 0.5);
  10. NewtonMaterialSetCollisionCallback(NewtonWorld, MatWorld, MatWorld, nil, @GenericContactBegin, @GenericContactProcess, nil);
  11.  
  12.   vLevel := Tlevel.create();
  13.  
  14.   Create3DSCollisionTree(vLevel.Model);
  15.  
  16.   vPlayer1 := TSpieler.Create();
  17.   LoadTexture(extractfilepath(paramstr(0))+'002.bmp',strahl);
  18. QueryPerformanceFrequency(QPCFreq);
  19. END;
  20.  
  21. PROCEDURE TEngine.work();
  22. VAR
  23.   QPCStart : Int64;
  24.   QPCEnd   : Int64;
  25. BEGIN
  26.   QueryPerformanceCounter(QPCStart);
  27.   //-------------------------- START ------------------------------
  28.   glEnable(GL_Lighting);
  29.  
  30.     glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient);
  31.     glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse);
  32.     glLightfv(GL_LIGHT0, GL_POSITION, @light_position);
  33.  
  34.   glEnable(GL_LIGHT0);
  35.       vLevel.render;
  36.       vPlayer1.render;
  37.  
  38.  
  39.   glDisable(GL_LIGHTING);
  40.   glDisable(GL_Cull_Face);
  41.  
  42.   //-------------------------- ENDE  ------------------------------
  43.   QueryPerformanceCounter(QPCEnd);
  44.   UserData := nil;
  45.   //NewtonUpdate(NewtonWorld, ((QPCEnd-QPCStart)/QPCFreq*1000)*0.0015);
  46. END;


In der Vorletzten Zeile (die Auskommentierte) Gibt es einen Fehler wenn sie nicht auskommentiert ist, Zugriffsverletzung.
Kam aber bisher net dahinter warum, genau so hast du die Zeile bei dir doch auch, irgendwas muss bei mir noch fehlen oder?

Das ProjektionsZeugs ist alles wie im template. bzw. es ist es, den Counter muss ich noch da hinsetzen. Aber daran liegts ja net ;)

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 15:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Die Funktion Assigned sollte dir bei dem Problem recht schnell eine Lösung geben. Wirst halt irgendwo auf ne Variable zugreifen die NIL ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 15:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Bei NewtonWorld gibt mir Assigned =True zurück.
Und in den ganzen Zahlen sind auch werte enthalten, und das muss ja innerhalb der Parameterübergabe sein oder?!

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 15:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Alle Debugoptionen an? Bin mir sicher dass der Fehler NICHT in NewtonUpdateWorld liegt, sonder du sonst wo nen Fehler machst. Die Callbacks sind ja auch richtig definiert, und funktionieren auch korrekt, oder?

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 15:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mh, woher soll ich wissen ob die Korrekt funktionieren?!
Ja, die Vom Compiler aus ist alles Debugging zeugs angehakt.
Aber zu den CallBacks, woher soll ich wissen ob sie tuhen was sie sollen, zumindest kommt da kein Fehler.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Was für eine AV ists denn genau, und in welcher DLL findet diese statt? Wenn das in der newton.dll ist, dann hast du vorher wohl einen Fehler gemacht, also evtl. etwas fehlerhaft an Newton übergeben. Also ganz einfach mal nacheinander wegkommentieren und sehen wos liegt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 21:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
So, habe erstmal alles auskommentiert ausser NewtonCreate und NewtonUpdate.
Und tatsächlich es ging.
Nun, nach fleißigem suchen bin ich jetzt auf folgende Zeile gestoßen.

// NewtonReleaseCollision(NewtonWorld, Collipart[count]);

Allerdings sind diese Parameter richtig, denn:

SpielerBody[count] := NewtonCreateBody(NewtonWorld,Collipart[count]);

Funktioniert ja auch.
Aber dieses Collision Realase brauche ich oder?
Denn wenn jetzt mein objekt aufs Level trifft, verschwindet es.

EDIT: Bzw. es muss nichtmal drauf treffen. Vllt. gehts ja danach.

EDIT2: DANKE! Habe deine komische ForceAndTorque-Funktion umgeschrieben ;) Jetzt gehts.
Unterliegt sie damit immernoch der GPL, ja oder?

_________________
www.audi32.de


Zuletzt geändert von Adler am Do Sep 16, 2004 21:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 21:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Dann machst du etwas anderes falsch. NewtonReleaseCollision sorgt nur dafür dass das nicht mehr benötigte Kollisonsobjekt aus dem Speicher verschwindet, sollte also aufgerufen werden wenn du keine Speicherlecks willst. Dein Problem liegt also woanders, denn auch ohne diese Funktion dürften deine Objekte nicht irgendwo durchfallen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 21:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Nun geht alles!
ThX, das gibt nen Credits eintrag *gg*
Öhm. Hatte einen Aufruf 2mal und musste in deiner Funktion was ändern.

Danke, und zum bewegen einfach Mit der Matrix rumspielen?! Das wird kin Problem mehr sein.

Ciao!

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 17, 2004 16:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Und NOCHMAL:

Habe es nun versucht zum laufen zu bekommen, ABER einfach Matrix ändern, ist nicht.
Klappt übrigends mit deiner funktion da auch net so ganz, und ich verstehe auch nicht was du darin machst:
Code:
  1.  
  2. procedure ForceAndTorque(const Body : PNewtonBody); cdecl;
  3. var
  4.  mass       : Single;
  5.  Ixx        : Single;
  6.  Iyy        : Single;
  7.  Izz        : Single;
  8.  Force      : TVector3f;
  9.  Torque     : TVector3f;
  10.  TmpM       : TMatrix4f;
  11.  LateralDir : TVector3f;
  12.  Omega      : TVector3f;
  13.  TorqueDir  : TVector3f;
  14.  TmpS       : Single;
  15.  TmpV       : TVector3f;
  16. begin
  17. NewtonBodyGetMassMatrix(Body, @mass, @Ixx, @Iyy, @Izz);
  18. Force := V3(0, -Mass * 19.8, 0);
  19. NewtonBodySetForce(Body, @Force[0]);
  20. // calculate a rotation matrix from the camera heading
  21. Matrix_SetIdentity(TmpM);
  22. LateralDir := VCross(CameraDir, V3(0,1,0));
  23. TmpS       := LateralDir[0]*LateralDir[0] + LateralDir[1]*LateralDir[1] + LateralDir[2]*LateralDir[2];
  24. TmpM[2,0]  := LateralDir[0] * 1/TmpS;
  25. TmpM[2,1]  := LateralDir[1] * 1/TmpS;
  26. TmpM[2,2]  := LateralDir[2] * 1/TmpS;
  27. TmpV := VCross(V3(TmpM[1,0],TmpM[1,1],TmpM[1,2]), V3(TmpM[2,0],TmpM[2,1],TmpM[2,2]));
  28. TmpM[0,0]  := TmpV[0];
  29. TmpM[0,1]  := TmpV[1];
  30. TmpM[0,2]  := TmpV[2];
  31. // rotate the torque direction to align with the camera
  32. TorqueDir := CameraTorqueVector;
  33. Matrix_RotateVect(TmpM, TorqueDir);
  34. NewtonBodyGetOmega(SpielerBody[0], @Omega[0]);
  35. TmpS   := Omega[0]*TorqueDir[0] + Omega[1]*TorqueDir[1] + Omega[2]*TorqueDir[2];
  36. Torque := V3(TorqueDir[0]*(Ixx*75) - TorqueDir[0]*(2*Ixx*TmpS),
  37.              TorqueDir[1]*(Ixx*75) - TorqueDir[1]*(2*Ixx*TmpS),
  38.              TorqueDir[2]*(Ixx*75) - TorqueDir[2]*(2*Ixx*TmpS));
  39. NewtonBodySetTorque(SpielerBody[0], @Torque[0]);
  40. end;
  41.  


Das ist deine (fast) orginale procedure.
Ich verstehe das aber nicht, was machst du in dieser Funktion, die ist doch auch dafür gedacht, das Objekt zu bewegen oder nicht?
Allerdings verschwindet mein Body wenn ich diese Aufrufe.
Wenn ich das NewtonBodySetTorque; Auskommentiere, funktioniert es wieder, aber mit laufen... is nicht.

Mein Gedanke war jetzt, einfach über die Matrix zu bewegen, aber das geht nicht. er nimmt die Map nicht richtig wahr. Entweder ich laufe auf der Map und kann runter fallen, aber nirgends hochlaufen. Wenn ich nur über die Matrix also SetMatrix meine Position ändere, kann ich laufen und wenn ne Schräge kommt lauf ich durch sie durch kann man fast sagen, wenn ich zu weit laufe fall ich runter, wenn ich "IN" der Schräge stehen bleibe, rutsche ich auch runter, irgendwie komisch, wenn dus net verstehst kann ich dir mal meine exe plus model schicken.

_________________
www.audi32.de


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]