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

Aktuelle Zeit: Mi Jul 16, 2025 10:40

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 40 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: [Newton] Bodenhaftung ändern.
BeitragVerfasst: Di Nov 30, 2004 20:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hallo!

Das eine Tutorial über "Materials" habe ich gelesen, da ich dachte, dass ich da auch die Bodenhaftung evtl einstellen kann.
So versuchte ich es.

Code:
  1.   Snow_ID := NewtonMaterialCreateGroupID(NewtonWorld);


Also Snow_ID createt.

Code:
  1.   NewtonMaterialSetDefaultFriction (NewtonWorld, Snow_ID, Snow_ID, 0.5, 0.2);


Friction Wert gesetzt, der ist doch dafür verantwortlich, dass man so rutscht oder? ;)

Nun habe ich den "Körper" für den das gilt Createt.
Das wars, muss ich da noch irgendwas anderes machen? :-/

So hatte ichs verstanden.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 30, 2004 21:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das stimmt so schon, es sei denn deine Szene (auf der sich der Körper bewegt) liegt in einer Treecollision vor, dann musst du pro Face im passenden Callback Materialen festlegen. Du musst dann natürlich auch für alle Körper die "kollidieren" als Material SnowID setzen, da du ja sonst nicht das von dir festgelegte Verhalten bekommst (du hast nur das Interaktionspaar SnowID<->SnowID gesetzt). Klappt etwas nicht?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 30, 2004 21:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Joa, es liegt als TreeCollision vor.
Dann muss ich also ein MaterialienCallback setzen?

Code:
  1. NewtonMaterialSetCollisionCallback (nWorld, levelID, characterID, &metal_level, GenericContactBegin, CharacterContactProcess, GenericContactEnd);


Das ist ja im Tutorial.
In der SDK kann ich das aber leider auch nicht besser erkennen.
Also
nWorld, ist klar, dass ist meine Welt.
Character ist auch klar, das ist mein SpielerObjekt.
&metal_level das ist mir völlig unklar.
Die anderen drei sind dann halt die CallbackProceduren.

Soweit stimmts doch oder? aber diese eine Variable da...

PS: Woher weiß ich eigtl. genau was für parameter mir bei den Callbacks gegeben werden?
Inder SDK stehen die wohl net :-/ und in den Tutorials auch net? zumindest diese nicht oder?

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 30, 2004 21:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
levelID und characterID sind deine Material-IDs. Du musst ja festlegen für welches Materialpaar die Callbacks gelten. &metal_level sind Nutzerdaten (siehe Hilfe), auf die du dann im Callback zugreifen kannst.

Die Callbacks sind momentan noch undokumentiert, aber ich habe den Macher von Newton schon darauf hingewiesen, die werden also bald auch dokumentiert. Allerdings sollte in den meisten Fällen ein Blick in den Header reichen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 30, 2004 21:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Achso, ein & ist ja in C ein Pointer.
Nungut, dann geh ich erstmal meinen Kopf qualmen lassen.
Danke schonmal.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Entschuldige, aber ich verstehe nicht warum da "Not enough actually parameters" kommt.
Habe so die Proceduren und Functionen deklariert. (Ausem Newton Header)
Code:
  1. function GCB( const material : PNewtonMaterial; const body0 : PNewtonBody; const body1 : PNewtonBody ) : int; cdecl;   // Generic Contact Begin
  2. begin
  3.  
  4. end;
  5. function CCP( const material : PNewtonMaterial; const contact : PNewtonContact ) : int; cdecl;   // Character Contact Process
  6. begin
  7.  
  8. end;
  9. procedure GCE( const material : PNewtonMaterial ); cdecl;   // Generic Contact End
  10. begin
  11.  
  12. end;


Müsste ja stimmen.
So nun kommt bei

Code:
  1.   NewtonMaterialSetCollisionCallback(NewtonWorld, SNOW_ID, SNOW_ID, @SpielerData[count], GCB, CCP, GCE);


Ein "Nicht genügend parameter".
Der Cursor bleibt hinter dem Komma von GCB stehen. weshalb ich das nicht verstehe.
Wenn der nicht genug Parameter hat, sollte der doch am Ende des Aufrufes stehen bleiben?!

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Code:
  1. NewtonMaterialSetCollisionCallback(NewtonWorld, SNOW_ID, SNOW_ID, @SpielerData[count], @GCB, @CCP, @GCE);

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 19:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Zitat:
Das stimmt so schon, es sei denn deine Szene (auf der sich der Körper bewegt) liegt in einer Treecollision vor, dann musst du pro Face im passenden Callback Materialen festlegen.


Daraus verstehe ich, dass ich ein Callback fürs FaceAdden machen kann. ?!
Aber dafür finde ich keins. SDK hilft da net.

oder habe ich dich falsch verstanden?
Denn sonst müsste ich alles fertig haben.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 19:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn du ein Face hinzufügst musst du halt als ID (letzter Parameter) die ID des Materials übergeben.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 19:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mh, habe mal mit den Werten rumgespielt....
Evtl net die richtigen gefunden?!
Ich will volle haftung haben (Also Schuh mit gummisole ^^) Wie wir sie halt anhaben.

Hier mal ne Erläuterung wie ich es gemacht habe.

Code:
  1.  
  2. //Zuerst das hier:
  3.   Snow_ID := NewtonMaterialCreateGroupID(NewtonWorld);
  4.   NewtonMaterialSetDefaultFriction (NewtonWorld, Snow_ID, Snow_ID, 0.1, 0.0);
  5. //Danach alle Faces des Collisions Trees ...
  6.    NewtonTreeCollisionAddFace(CollisionsTree, 3, @PoligonFace[0], SizeOf(T3DPoint), Snow_ID);
  7.  
  8. //Und als Player Callback habe ich dies hier:
  9.   NewtonMaterialSetCollisionCallback(NewtonWorld, SNOW_ID, SNOW_ID, @SpielerData[count], @GCB, @CCP, @GCE);
  10.  
  11.  

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 20:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hat dein Spieler dann auch die SnowID als Material-ID? Und 0.0 bzw. 0.1 für Reibung sind dann doch die total falschen Werte. Ausserdem wäre es sehr hilfreich zu wissen wie dein Callback aussieht. Ganz nebenbei brauchst du auch nur einen Callback wenn du Per-Face-Materialien in nem Tree haben willst, nämlich den Contactprocess an sich.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 20:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
In meinem Callback steht nichts drin.
Soll da was drinne stehen?
Dachte nur um die Snow_ID da zuzuweisen.

Reibungswerte: hatte die erst auf 1.0, 0.9

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 20:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Da steht wirklich nix drin? Du musst im Callback doch die Materialwerte setzen und als Ergebnis 1 zurückgeben, da die Kollision sonst doch ignoriert wird und daher nicht stattfindet...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 20:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mh, führt mich nicht in die Irre.
Die Materialeigenschaften setze ich doch mit

NewtonMaterialSetDefaultFriction ?!

Haste mal nen Beispiel für ins Callback :-/
Wollte diesmal net so dumm da stehen und nix raffen aber irgendwie ...

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 01, 2004 20:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Habs jetzt so hinbekommen... Aber es geht net.
Code:
  1. function CCP( const material : PNewtonMaterial; const contact : PNewtonContact ) : int; cdecl;   // Character Contact Process
  2. begin
  3. NewtonMaterialSetContactFrictionState( material , 1, 1);
  4. Result := 1;
  5. end;

_________________
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  [ 40 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 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.010s | 14 Queries | GZIP : On ]