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

Aktuelle Zeit: Fr Jul 18, 2025 11:54

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Neu bei Newton und gleich Probs
BeitragVerfasst: Di Jul 19, 2005 18:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Hi,
ich bin jetzt mal bei Newton eingestiegen, weils einfach an der Zeit war. Leider schaff ich aber ned mal des erste Tutorial aus der Newton SDK. Mein derzeitiger Code schaut folgendermaßen aus:

Init:
Code:
  1.  
  2.  NewtonWorld:=      NewtonCreate(nil, nil);
  3.  CollisionBox:=       NewtonCreateBox(NewtonWorld, 2, 2, 2, nil);
  4.  RigidBody:=          NewtonCreateBody(NewtonWorld, CollisionBox);
  5.  NewtonReleaseCollision(NewtonWorld, CollisionBox);
  6.  
  7.  NewtonBodySetMassMatrix(RigidBody, 1, 1, 1, 1);
  8.  
  9.  NewtonBodyGetMatrix(RigidBody, @matrix[0,0]);
  10.  matrix[3,0] := 0;
  11.  matrix[3,1] := 1;
  12.  matrix[3,2] := 0;
  13.  NewtonBodySetMatrix(RigidBody, @matrix[0,0]);
  14.  
  15.  vector[0]:= 5;
  16.  vector[1]:= 5;
  17.  vector[2]:= 5;
  18.  NewtonBodySetOmega(RigidBody, @vector[0]);
  19.  


Rendern:
Code:
  1.  
  2.  NewtonUpdate(NewtonWorld, 12/1000);       //wird später noch besser getimet!
  3.  
  4.  NewtonBodyGetMatrix(RigidBody, @position[0,0]);
  5.  
  6.  glLoadIdentity;
  7.  glPushMatrix;
  8.  glTranslatef(0, 0, -3);
  9.  glMultMatrixf(@position[0,0]);
  10.  
  11.   glBegin(GL_QUADS);
  12.     blablabla;
  13.   glEnd;
  14.  


Das Problem ist ganz einfach beschrieben: Es bewegt sich nix! Das Quad ist ganz normal von vorne dargestellt, aber bewegen tut sich einfach nix.
Bitte helft mir, bin - wie so oft - am verzweifeln - auich etliche Demos konnten mir nicht helfen. Wahrscheinlich wieder mal ein grundsätzlicher Denkfehler...
Danke

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 19, 2005 21:59 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
da fehlt irgendwas mit UpdateWorld :lol:

hatte das gleiche problem auch, ist nur 1 zeile code, schau mal im code nach updateworld

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Also das mit NewtonUpdate hab ich schon drin, und was andres in der Richtung hab ich ned gefunden. Vielleicht hast du des übersehen?

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
EDIT: Es ist noch komplizierter, als ich dachte. Anscheinend bauen alle Funktionen nur noch sch****e. Sorry für die Wortwahl, aber ich dreh im Moment grad durch.

Also, folgendes: Sascha Willems hat eine ganz einfache Demo programmiert, die auch wunderbar funktioniert, und bei der mir auch alles klar ist. Zu finden auf seiner Newton-Seite unter dem Namen "Basic Demonstration".
Dort wird durch folgende Funktion in ne Matrix die Identitymatrix geschrieben:
Code:
  1. NewtonBodyGetMatrix(NewtonBody, @Matrix[0,0]);

(Das hab ich überprüft!)
Wenn nun ich in meinem Code die gleiche (!) Funktion aufrufe, liefert die mir eine leere Matrix, also mit allen Werten = 0! Wie kann das sein?
Und so verhält es sich bei einigen anderen Newton-Funktionen auch, die machen auch ganz komische Sachen. Aber es wird der gleiche Header und die gleiche DLL verwendet!

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Problem gelöst, jedenfalls glaub ich das:
Alle "Extended"-Variablen durch "Single" ersetzt!
(Also auch in den Matrizen)
Man lernt täglich dazu. Ich könnt mich echt in den Arsch beissen.
Kann mir jemand den Unterschied erklären zwischen Extended und Single? Ich hab nämlich in meiner ganzen (!) OGL-Karriere noch nie eine einzige Single-Variable verwendet, und hatte auch noch nie Probleme damit...

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 17:47 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
soweit ich weis ist normal kein unterschied zwischen extended und single, nur dass single um einiges schneller ist und extended nur für sehr große zahlen genommen wird

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 18:07 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Könnte sein, dass durch das Benutzen von Single bei deinen Extendetwerten nur die Byts verwendet wurden, die noch unangetatstet waren, und die Bytes die den eigentlichen Wert enthielten weggeschnitten wurden. Wobei Fließkommazahlen ja in ner Besonderen Form in den Bytes liegen (also x Bits Exponent, y Bits, mantisse, z bits Basis). Hab so ein Verhalten noch net gesehn. :roll:

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 19:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
In Newton übergibt man so gut wie alle Werte via Zeigern, z.B. SetMatrix und GetMatrix. Und da du wohl die Single-Version vo Newton nutzt gibts natürlich Probleme wenn man einen anderen Datentyp verwendet (Extended sollte man sich bei GL sparen, ist doch nur Platzverschwendung).

Warum? Einfach : Single hat 4 Byte, Extended 10. Wenn du also nen Zeiger auf eine 4x4-Extendedmatrix übergibst nimmt Newton (in der Single-Version) für jedes Matrizenelement 4 Bytes (=Größe von Single=). Bei einer Extendedmatrix belegt aber z.B. der erste Wert bereits die Bytes 0-9, also nimmt Newton (Zeiger auf eine Matrix, also kann Newton nicht wissen um welchen Datentyp es sich handelt) aus deinem ersten Extendedelement der Matrix 2 "1/2" Werte, Byte 0-3 Single1, 4-7 Single2, 8-10 Single3 und geht dann in den nächsten Extendedwert.

Man sollte sich also durchaus mal mit Datentypen auseinandersetzen, Extended ist nämlich wie gesagt für GL/Newton eine recht sinnlose Sache da man für jeden Wert 6 Bytes wegwirft. Von Newton gibts für größere Genauigkeit übrigens auch eine Double-Version.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 20, 2005 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Ok, vielen Dank für die Aufklärung, jetzt hörts sich auf einmal so logisch an ;)
Es ist nur so, dass uns in dem Kurs, in dem ich damals Delphi gelernt habe, nur Extended kennengelernt habe, und seitdem immer dachte, dass Single und Extended genau das gleiche seien, da ja niemand das Gegenteil behauptet hat, und wie gesagt, bis jetzt ist mir dieser Fehelr noch ned untergekommen. Nochmal danke!

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 22, 2005 09:14 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Sie beiden Typen sind zuweisungskompatibel, d.h.: Du kannst eine Extended-Variable einer Single-Variable zuweisen (die verliert aber dadurch dann Genauigkeit) oder eine Single als Übergabeparameter in einer Funktion übergeben, die einen Extended haben will. Die Umformung zwischen den beiden Typen übernimmt Delphi und macht das im Allgemeinen auch richtig.
In diesem Fall wird aber mit Zeigern gearbeitet und diese können ja unmöglich wissen, daß an der entsprechenden Stelle im Speicher ein anderer Typ abgelegt wurde und darum wird keine Umformumg gemacht.
D.h. Single und Extended sind zwar das Gleiche aber nicht das Selbe.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 22, 2005 11:00 
Offline
DGL Member

Registriert: Sa Mär 20, 2004 22:48
Beiträge: 104
edit: sorry, im falschen Thread gepostet

_________________
Der Bump Mapping User ist nur zu faul, selbst eine Wand mit Tesselation zu erstellen ;-)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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