![]() |
DelphiGL LocalMatrix
Hallo,
DelphiGL transformiert ja Punkte vom Objekt-Koordinaten zu Weltkoordinaten mit Hilfe der LocalMatrix. Diese wird in TGLBaseSceneObject.RebuildMatrix erstellt.
Delphi-Quellcode:
Da laut DelphiGL OpenGL ein rechtshändiges Koordinatensystem verwendet (was auch auf anderen Seiten bestätigt wird), wundere ich mich dass der erste Vektor im obigen Code LeftVector, und nicht RightVector ist.
procedure TGLBaseSceneObject.RebuildMatrix;
begin if ocTransformation in Changes then begin VectorScale(LeftVector, Scale.X, FLocalMatrix^.X); VectorScale(FUp.AsVector, Scale.Y, FLocalMatrix^.Y); VectorScale(FDirection.AsVector, Scale.Z, FLocalMatrix^.Z); SetVector(FLocalMatrix^.W, FPosition.AsVector); Exclude(FChanges, ocTransformation); Include(FChanges, ocAbsoluteMatrix); Include(FChanges, ocInvAbsoluteMatrix); end; end; Schaut man sich den Code von LeftVector an:
Delphi-Quellcode:
tut er was man erwarten würde, um eine korrekte Transformationsmatrix zu erstellen (von Objektkoordinaten zu Eltern/Weltkoordinaten).
function TGLBaseSceneObject.LeftVector: TVector;
begin Result := VectorCrossProduct(FUp.AsVector, FDirection.AsVector); end; Allerdings berechnet LeftVector die positive X-Achse die in Richtung rechts zeigt, also warum wird er LeftVector genannt? Namensfehler? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz