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

Aktuelle Zeit: Mi Jul 16, 2025 21:36

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



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
BeitragVerfasst: Do Mär 22, 2012 14:38 
Offline
DGL Member

Registriert: Mi Feb 29, 2012 18:46
Beiträge: 10
Wohnort: H, MD, DD
Programmiersprache: Delphi XE
die inverse Matrix berechne ich (angelehnt an dies) wie folgt:

Code:
  1.  
  2. class function TGLMathMethodProvider.GetInverseMatrixOf(const AMatrix:
  3.   TGLMatrixd4): TGLMatrixd4;
  4. var
  5.  i, k: Integer;
  6.  LV1, LV2: TVector3double;
  7. begin
  8.   for i := 0 to 2 do
  9.     for k := 0 to 2 do
  10.       Result[k, i] := AMatrix[i, k];
  11.  
  12.   LV1 := TVector3double.Create(-AMatrix[3, 0], -AMatrix[3, 1], -AMatrix[3, 2]);
  13.  
  14.   LV2 := TVector3double.Create(
  15.     LV1.X * Result[0, 0] + LV1.Y * Result[1, 0] + LV1.Z * Result[2, 0],
  16.     LV1.X * Result[0, 1] + LV1.Y * Result[1, 1] + LV1.Z * Result[2, 1],
  17.     LV1.X * Result[0, 2] + LV1.Y * Result[1, 2] + LV1.Z * Result[2, 2]);
  18.  
  19.   Result[3, 0] := LV2.X;
  20.   Result[3, 1] := LV2.Y;
  21.   Result[3, 2] := LV2.Z;
  22.  
  23.   Result[0, 3] := 0.0;
  24.   Result[1, 3] := 0.0;
  25.   Result[2, 3] := 0.0;
  26.   Result[3, 3] := 1.0;
  27.  
  28.   LV1.Free;
  29.   LV2.Free;
  30. end;
  31.  


habe es jedoch noch nicht ausreichend getestet...sollte es so nicht funktionieren, werde ich später noch die Korrektur posten
lieber Gruß!
Q

_________________
*WUSCH* meine Signatur ist unsichtbar!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 22, 2012 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
habe es jedoch noch nicht ausreichend getestet...sollte es so nicht funktionieren, werde ich später noch die Korrektur posten

Deine Methode funktioniert nur mit orthonormalen Matrizen. D.h. du verlässt dich darauf das die Basisvektoren orthogonal zueinander liegen und die Länge 1 haben. Die Matrix darf ausschließlich Translation und Rotation beinhalten. Sobald du eine Skalierung, Scherung oder Projektion brauchst fliegt dir das um die Ohren. Häufig reichen aber Translation und Rotation völlig aus und dies ist eine legitime Performance-Optimierung.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 22, 2012 18:59 
Offline
DGL Member

Registriert: Mi Feb 29, 2012 18:46
Beiträge: 10
Wohnort: H, MD, DD
Programmiersprache: Delphi XE
Oh ja... genau das hab ich übersehen! Abermals großen Dank! Das erklärt meine Probleme, denn ich habe eine Skalierung. Dann werde ich wohl doch die allgemeine Form mit Determinantenbildung benutzen müssen. Ich melde mich dazu wieder.
lg
Q

_________________
*WUSCH* meine Signatur ist unsichtbar!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Apr 17, 2012 11:17 
Offline
DGL Member

Registriert: Mi Feb 29, 2012 18:46
Beiträge: 10
Wohnort: H, MD, DD
Programmiersprache: Delphi XE
Abschluss:

Die Inverse berechne ich nun wie es auch in der CoolMathLib passiert (in einer für meine Zwecke leicht modifizierten Variante).
Der o.a. Code scheint für einige Fälle falsche Ergebnisse zu liefern!
Statt zu debuggen habe ich mich für den einfacheren und stabileren Weg entschieden diese allgemeine Lösung zu benutzen.

Thema erledigt! =)

lg
Q

_________________
*WUSCH* meine Signatur ist unsichtbar!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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 ]