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

Aktuelle Zeit: Do Jul 10, 2025 10:43

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



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kollision, Hitbox, Rotation
BeitragVerfasst: Fr Aug 21, 2009 13:00 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
Hallo Freunde der Sonne!

Ich arbeite seit eine gewissen Zeit an einem kleinen Spielchen und bin gerade dabei mir alle Objekte zu schreiben um danach nur noch die Spielmechanik einsetzten zu müssen.

Das Kollisions-tut hatte mir zu erst keine Probleme bereitet (bzw dort prüft man ja nur statische Objekte mit einem Beweglichen - bei mir soll sich alles bewegen)
Dann wollte ich eben um alle meine Objekte eben eine Hitbox drum rum bauen (=falscher Gedanke?).

Und da ist auch schon das Problem wenn ich meine Objekte bewege/drehe muss ich das auch mit meiner Hitbox tun (wie im Tut beschrieben).
Das bewekstellte ich dann indem ich meine eigne Matrix gebaut hab und alle translations/rotations manipulationen auch da mit mache.
Die Translation war einfach und funkt auch einwandfrei aber jetzt zur Rotation:

Die Matritzenverkettung und Abbildungen hab ich mir aus meinem Mathebuch und dem Internet beigebracht aber schaut selber was dabei rauskommt:

Bild


es muss an was Mathematischem liegen denke ich und ich schlicht die Rotationsmatrix (aus wiki) falsch mit meine aktuellen matrix multiplitziere

und noch eine Frage:
Ich wusste nicht welches in Open GL die Identitätsmatrix ist da hab ich einfach die einhaitsmatrix genommen:

1 0 0 | 0
0 1 0 | 0
0 0 1 | 0

€:
ich hab gar nich gesagt wie ich das anstelle, also so mach ichs:

Code:
  1.  
  2.                u1 v1
  3.                u2 v2
  4.  
  5. a1 b1   a1*u1+b1*u2    a1*v1+b1*v2
  6. a2 b2   a2*u1+b2*u2    a2*v1+b2*v2
  7.  

nur eben mit 3x3



Vielen Gruß, Wh0p[/code]

_________________
Wieso kann es nicht einfach funktionieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollision, Hitbox, Rotation
BeitragVerfasst: Fr Aug 21, 2009 13:28 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wh0p hat geschrieben:
und noch eine Frage:
Ich wusste nicht welches in Open GL die Identitätsmatrix ist da hab ich einfach die einhaitsmatrix genommen:

1 0 0 | 0
0 1 0 | 0
0 0 1 | 0


Das ist auch so korrekt. Siehe glLoadIdentity.

Wenn du Matrizen aus OpenGL ausließt, dann sind die Spaltenweise sortiert, nicht Zeilenweise. Nur so als Tip.


Bei OpenGL wird nebenbei auch immer mit 4x4 Matrizen gerechnet.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 14:25 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
Tut mir leid das so sagen zu müssen aber das half mir jetzt nicht bis über den berg :?

Das mit den 4x4 Matrizen bin ich auch noch nicht so dahintergekommen warum...

Aber ich will ja auch keine Matrizen ein oder auslesen. Ich hab meie Matrix selber im Speicher liegen mit der ich mein Punkt abbilden will
und diese Matrix soll jetzt eben genauso manipuliert werden können wie die Open gl matrix.

Das is womöglich unnötig kompliziert aber mir gehts jetzt ums Prinzip... wenn ich das hier: http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml
umrechne kommt wieder die Matrix raus die ich benutz (wenn man das 4x4 nicht beachtet das ich nicht versteh)

Sollte allerdings eine Möglichketi bestehen einen Punkt so mit der aktuellen Modelviewmatrix zu multipliziern, dass ich mit dem dann auch weiterarbeiten kann wärs natürlich auch ganz toll (ich würde trotzdem gerne meinen Fehler wissen wollen).

Wenn die 4x4 Matrix solche Auswirkungen hat bitte ich um Erläuterung (am meisten hängts daran, dass wenn ich ein Punkt mit 3 Koordinaten verrechne kommen danach ja 4 Werte raus).

_________________
Wieso kann es nicht einfach funktionieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 16:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Vielleicht helfen dir die beiden Mathe-Tutorials Lineare Algebra und Nachsitzen dabei, das ganze richtig gestellt zu bekommen.

OpenGL rechnet intern auch mit 4D-Vektoren, daher auch die 4x4-Matrizen [Allerdings wird die w-Koordinate meist auf 1 belassen, da später dadurch geteilt wird ... ich bin mir gerade nicht ganz sicher, in welchem Moment. Irgendwo zwischen ModelViewMatrix und dem Endbild auf jeden Fall. Ich schätze mal, nach der Projektion. Was ich damit sagen will ist nur, dass du w am besten bei 1 belässt, wenn du nicht damit rumspielen willst ;).]

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
Vielleicht helfen dir die beiden Mathe-Tutorials Lineare Algebra und Nachsitzen dabei, das ganze richtig gestellt zu bekommen.

Danke, dass Du eingesprungen bist. Ja, insbesondere das Tutorial "Nachsitzen" wird Dir vermutlich helfen. Das sollte eigentllich den Großteil Deiner Fragen klären. Das ist eines der besten mathematischen OpenGL-Tutorials, die ich kenne.

Die 4x4-Matrix wird "Homogene" Matix genannt und ist erfunden worden, um mit Matrizen nicht nur rotieren, skalieren und scheren zu können, sondern auch zu verschieben. Hier: http://de.wikipedia.org/wiki/Homogene_Koordinaten gibts eine Info drüber, was homogene Matrizen eigentlich sind (weiß jetzt nicht, ob das im Tutorial auch erwähnt ist).

Zitat:
Sollte allerdings eine Möglichketi bestehen einen Punkt so mit der aktuellen Modelviewmatrix zu multipliziern, dass ich mit dem dann auch weiterarbeiten kann wärs natürlich auch ganz toll

Das geht, aber Du bist dann natürlich immer einen Rendervorgang hinterher. Es funktioniert aber auch mit der eigenen Matrix.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 17:51 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
Die Lineare Algebra und das Mathe tutorial hab ich gelesen und das war nicht zu kompliziert, das ichs nicht verstanden hätte,
Nichts desto trotz sollte auch wenn meine Matrix nur 3x3 groß ist nicht so ein müll rauskommen Vektorrechnung und die geschichten aus den Tut behersche ich.

_________________
Wieso kann es nicht einfach funktionieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 18:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Im Tutorial "Nachsitzen" gibt es eine Rubrik "Anwendung der Matrix auf einen Vektor". Dort wird vorgeführt, wie die Multiplikation eines Vektors mit einer Matrix vor sich geht. Das Einzige, was Du machen musst, ist Deine Rechnung mit der dortigen Rechnung zu vergleichen, Was anderes könnte ich Dir auch nicht sagen. Dort steht praktisch Source Code, den man 1:1 ins Programm übernehmen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 19:01 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
Ich glaube duverstehst da was Falsch...
ich WEIß wie ich die Matrix anzuwenden habe. Es Steht nur überall das und das ist die Rotationsmatrix für eine drehung um die x-Achse
verkette ich diese mit meine aktuellen matrix
alss meine Punkte durch die Matrix abilden

theoretisch und auf papier funktioniert das alles perfekt.. aber ich werds ohnehins sowieso selbst herausfinden müssen :roll:

_________________
Wieso kann es nicht einfach funktionieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 19:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Könntest du vielleicht mal ein bisschen Code posten? Ich denke dann könnte man dir leichter helfen.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 19:14 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
Wollte ich so wieso gerade sazuedditieren....also hier:

um xachse drehen:
Code:
  1. s := sin(degtorad(degree));
  2. c := cos(degtorad(degree));
  3.  
  4.         A[1,1] := A[1,1];
  5.         A[1,2] := A[1,2]*c + A[1,3]*s;
  6.         A[1,3] := A[1,2]* -s + A[1,3]*c;
  7.         A[1,4] := A[1,4];
  8.  
  9.         A[2,1] := A[2,1];
  10.         A[2,2] := A[2,2]*c + A[2,3]*s;
  11.         A[2,3] := A[2,2]* -s + A[2,3]*c;
  12.         A[2,4] := A[2,4];
  13.  
  14.         A[3,1] := A[3,1];
  15.         A[3,2] := A[3,2]*c + A[3,3]*s;
  16.         A[3,3] := A[3,2]* -s + A[3,3]*c;
  17.         A[3,4] := A[3,4];
  18.  
  19.         A[4,1] := A[4,1];
  20.         A[4,2] := A[4,2]*c + A[4,3]*s;
  21.         A[4,3] := A[4,2]* -s + A[4,3]*c;
  22.         A[4,4] := A[4,4];


Punkt abbilden:


Code:
  1.   result.X := A[1,1]*v.X + A[1,2]*v.Y + A[1,3]*v.Z + A[1,4];
  2.   result.Y := A[2,1]*v.X + A[2,2]*v.Y + A[2,3]*v.Z + A[2,4];
  3.   result.Z := A[3,1]*v.X + A[3,2]*v.Y + A[3,3]*v.Z + A[3,4];


Es ist nahezu 1:1 kopiert wie ich nachträglich lesen konnte...

_________________
Wieso kann es nicht einfach funktionieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 20:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich arbeite normalerweise nicht mit diesen Konstrukten, wo man jeweils eine bestimmte Matrix braucht, damit man um die X,Y,Z-Achse drehen kann, daher alle Angaben ohne Gewähr:

Die Vertextransformation schaut für mich richtig aus.

Aber Deine Matrix, die Du für eine Rotation um die X-Achse konstruierst, kann nicht richtig sein, denn im Tutorial ist dafür die folgende Matrix angegeben:


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 21:04 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
ich denk mir jetzt einfach mal du meinst die matrix:
Code:
  1. 1    0    0    0
  2. 0    cos -sin 0
  3. 0    sin  cos 0
  4. 0    0    0    1


ja, die hab ich auch genommen, ich verkette die aber vorher mit meiner aktuellen matrix und wenn ich jetzt von mir aus wie im Beispiel noch nix anderes gemacht habe, dann muss ich die mit der einheitsmatrix verketten (denke ich):
Code:
  1. 1  0  0  0                1  0*cos+sin  0*-sin+cos  0
  2. 0  1  0  0   x oben   =   0  1*cos+sin  0*-sin+cos  0
  3. 0  0  1  0                0  0*cos+sin  1*-sin+cos  0
  4. 0  0  0  1                0  0*cos+sin  0*-sin+cos  1


ich will meine matrix ja so oft ich will verändern können, ohne gleich alle meine Punkte da alle durchzujagen, das mach ich erst am schluss wenn die matrix so steht wie ichs brauch.
(ich will danach ja auch noch um y und z achse drehen)

€:
wenn du wahrscheinlich die hier
http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml
benutzt kommste durch umformung ja auch wieder zu der anderen

das wissen mit der Verkettung bezieh ich aus meim Mathebuch (Affine Abbildungen),
aber da ist womöglich auch der Fehler das ich das ganze eben nich verketten darf...??? (sondern irgend was anderes????)

_________________
Wieso kann es nicht einfach funktionieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 21:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Wenn Du mit "Verketten" meinst, dass Du die beiden Matrizen miteinander multiplizieren musst, dann hast Du ganz recht. Nur habe ich Deine Matrix nicht wiedererkannt, denn ich kenne nur die "unbearbeiteten" Rotationsmatrizen. Anders kann man sie ja gar nicht erkennen, denn aktuelle Matrix hängt ja immer davon ab, was Du vorher hineinmultipliziert hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 22, 2009 11:50 
Offline
DGL Member

Registriert: Sa Jun 06, 2009 16:13
Beiträge: 17
Wohnort: Künzelsau
Ooopps, der fehler lag woanders ...

€: @ Lord Horazont: das is doch auch recht treffend :D

_________________
Wieso kann es nicht einfach funktionieren?


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.012s | 17 Queries | GZIP : On ]