Bei meinem Rechnen mit Matritzen scheint sich ein denkfehler eingeschlichen zu haben, b.z.w. ich bin nicht fit genug um den fehler zu sehen( Der zustand hält schon länger an( Und nächste woche ist auch noch oktoberfest ) ).
Ich habe 2 verschiedene Matritzen, eine 4x4(A) und eine 4x3(B) matrix ( Um Berechnungen zu sparen ).
Ich möchte ein Object projizieren welches Transformiert, Rotiert, Scaliert werden kann. Zudem ist der FOV dynamisch.
Hier mal die Berechnung die ich anstelle:
Vertex * Transformation(B) * View(A) * Projection(A)
Ich habe zwar eine Projektion die irgendwie auch richtig scheint und kann rotation sowie skalierung anwenden, aber
bewegen (Egal in welche Achse) möchte sich nichts.
Das mag daran liegen das ich solche ViewProjection-Matritzen rausbekomme( 0 * 100 soll ja anscheinend 0 geben habe ich gehört ).
Code:
1000
0100
000 -1
0000
Benutzen tue ich für die Translation M14, M24, M34.
Aus Performancegründen möchte ich bei meiner 4x3 Matrix bleiben.
mfg
Speedmaster
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Also genau andersrum. Und die OpenGL-Matrizen werden ja eigentlich immer in diesem mathematischem Sinn angegeben.
Wenn du dann genau andersrum multiplizieren willst, musst du die Matrizen vorher transponieren.
Da solltest du evtl. mal kontrollieren ob das bei dir alles hinhaut.
Oder übergibst du die Matrizen an OpenGL? Da müssen sie auch transponiert rein.
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Also genau andersrum. Und die OpenGL-Matrizen werden ja eigentlich immer in diesem mathematischem Sinn angegeben. Wenn du dann genau andersrum multiplizieren willst, musst du die Matrizen vorher transponieren. Da solltest du evtl. mal kontrollieren ob das bei dir alles hinhaut.
Bin mir ehrlich gesagt nicht ganz sicher, hatte gestern einen fehler gefunden( View und Projektionmatrix wurden nicht richtig rum multiplitiert. ) Jetzt sehe ich bei 2 Angegebenen Vertices auch 2. Allerdings sind diese obwohl sie in der Z Achse auf unterschiedlichen Positionen sind in X und Y Achse in 2 verschiedene Richtungen verschoben ( Allerdings nur wenn ich einen X oder Y Wert angebe ). Der FOV scheint inzwischen zu stimmen, den wenn ich den Fov verändere zoome ich rein oder raus.
In DirectX werden matritzen im normalfall anderst rum multiplitiert daher bin ich davon ausgegangen das das hier auch so sei.
mfg
Felix
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Ja in DX ist das alles genau andersrum^^
Du müsstest mal deine Matrizen posten, also wie du sie besetzt für eine Rotation z.B.
Wenn du die Besetzung da aus dem DX-Sdk raushast, dann ist deine Reihenfolge da oben richtig! Das ist halt alles nur eine Frage der Ansicht
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Ja in DX ist das alles genau andersrum^^ Du müsstest mal deine Matrizen posten, also wie du sie besetzt für eine Rotation z.B. Wenn du die Besetzung da aus dem DX-Sdk raushast, dann ist deine Reihenfolge da oben richtig! Das ist halt alles nur eine Frage der Ansicht
Die Translationmatrix wird wie folgt zusammengesetzt:
Code:
100 x
010 y
001 z
Als Beispiel für eine Rotationsmatrix ( X Achse ):
Code:
1, 0, 0, 0,
0, c,-s, 0,
0, s, c, 0
Wobei c der cos. von meinem Winkel ist und s der sin. von meinem Winkel ist.
mfg
Felix
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Deine Proj-Matrix sieht nach DX aus, View weis ich jetzt nicht, Rot und Trans-Matrix sind OpenGL-like, oder im "mathematischen" Sinn, wie ich es oben geschrieben habe.
Du musst dich also entscheiden, ob du die Matrizen von links oder von rechts an den Vertex multiplizieren willst und die Matrizen entsprechend anpassen.
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Der Code Projeziert meine Vertices ( Jep, nicht mit einer Matrix ). Dies funktioniert soweit auch wenn mein FOV nicht verändert wird.
Wenn ich den FOV verändere ( 'Rauszoome' ) passiert es das die Vertices die am ausserhalb liegen ( b.z.w. über den Bildschirmrand gehen ),
nicht mehr richtig angezeigt werden( Das liegt daran das alles was hinter mit liegt eine division durch 1 erfährt und nicht durch 'pz' ).
Auf gut Deutsch, sämtliche vertices die hinter mir liegen gehen immer bis zum Rand.
Frage ist wie ich das abfange.
mfg
Felix
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Hm wird wohl auf ein eigenes Clipping am Bildraum hinauslaufen?
Zitat:
Der Code Projeziert meine Vertices ( Jep, nicht mit einer Matrix ).
Warum machst es nicht über Matrizen? Wo gibts denn noch Probleme? Wenn du das ganze in den kanonischen Bildraum überführst geht auch das Clipping einfacher.
Zitat:
Danke für die Antwort, sie hat zwar nicht zu einem sofortigem Ergebniss geführt, aber sie hat zu einem geführt.
Jo das ist irgendwie schwer per Forum zu erklären. Mit Zettel und Stift geht das irgendwie besser^^
Aber wenn du die Matrizen nicht benutzt, weil es noch ein, zwei Unklarheiten gibt: dann frag ruhig weiter!
Evtl. taucht dann auch irgendwann der Nico auf, das Forums-Mathe-Ass
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Jo das ist irgendwie schwer per Forum zu erklären. Mit Zettel und Stift geht das irgendwie besser^^ Aber wenn du die Matrizen nicht benutzt, weil es noch ein, zwei Unklarheiten gibt: dann frag ruhig weiter! Evtl. taucht dann auch irgendwann der Nico auf, das Forums-Mathe-Ass
Es ist nicht so das ich sie garnicht benutze( für Rotation, Translation u.s.w. benutze ich sie immer noch ), allerdings komme ich irgendwie nicht drauf was ich falsch mache, und bräuchte dringend wieder mal einen 'Refresh' in mathe( Siehe meine Thread wegen Buch; Am Programieren happerts nicht ).
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
So nachdem alle Probleme mit Projektionen u.s.w. gelößt sind habe ich ein weiteres und vermutlich letztes Problem( Wobei ich gestehen muss das ich über dieses nicht lange nachgedacht habe, die nerven liegen etwas blank ).
Das Problem kurz beschrieben: Wenn ich mich um die Y-Achse rotiere, rotiere ich um ein gekipptes Koordinatensystem, und nicht um die ursprüngliche Achse.
Zwar gibt es noch eine andere Möglichkeit eine LookAtMatrix zu machen, aber die ist hässlich.
P.s.: Bald gibts vielleicht auch mal ein paar Bilder von der Sache.
mfg
Felix
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.