Einzelnen Beitrag anzeigen

Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#1

DelphiGL LocalMatrix

  Alt 5. Nov 2020, 21:06
Hallo,

DelphiGL transformiert ja Punkte vom Objekt-Koordinaten zu Weltkoordinaten mit Hilfe der LocalMatrix.
Diese wird in TGLBaseSceneObject.RebuildMatrix erstellt.

Delphi-Quellcode:
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;
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.

Schaut man sich den Code von LeftVector an:
Delphi-Quellcode:
function TGLBaseSceneObject.LeftVector: TVector;
begin
  Result := VectorCrossProduct(FUp.AsVector, FDirection.AsVector);
end;
tut er was man erwarten würde, um eine korrekte Transformationsmatrix zu erstellen (von Objektkoordinaten zu Eltern/Weltkoordinaten).

Allerdings berechnet LeftVector die positive X-Achse die in Richtung rechts zeigt, also warum wird er LeftVector genannt? Namensfehler?
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat