![]() |
AW: Firemonkey Image3D Rendering Reihenfolge
Liste der Anhänge anzeigen (Anzahl: 1)
Zur Sortierung noch:
Die Sortierung vom reinen Abstand Kamera-Objekt kann es ja nicht sein. Du musst doch nach der Länge des Lots von Sprite-Position zur Ebene der Kamera nehmen (siehe Abbildung: Grün ist länger als rot, aber blau ist kürzer als rot!). |
AW: Firemonkey Image3D Rendering Reihenfolge
So, Problem gelöst :-D
Ich habe die TViewport3D Komponente einfach kopiert und angepasst. Komischerweise wurde die sort-Funktion dort nicht verwendet, was alle Probleme lösen würde. Eine eigene Prozedur für den neuen Viewport (TGameScene), die die Möglichkeit bietet sich selbst zu aktualisieren, sollte da helfen.
Delphi-Quellcode:
procedure TGameScene.update;
var comp: TRenderingComp; begin comp := TRenderingComp.Create; try FRenderingList.Sort(comp); finally comp.Free; end; Self.Repaint; end;
Delphi-Quellcode:
Und nun kommt die eigentliche Sortierung.
TRenderingComp = class(TComparer<TControl3D>)
public function Compare(const Left, Right: TControl3D): Integer; override; end;
Delphi-Quellcode:
Ich habe hier nach der z-Reihenfolge sortiert, weil in meinem Fall am wichtigsten ist.
function TRenderingComp.Compare(const Left, Right: TControl3D): Integer;
begin // Zuerst kommen alle Elemente mit kleinerem Tag if left.Tag < right.Tag then begin Result := -1; exit; end else if left.Tag > right.Tag then begin Result := 1; exit; end; // Haben 2 Elemente den selben Tag, dann entscheidet die Z-Position if left.Position.Z > right.Position.Z then Result := 1 else if left.Position.Z < right.Position.Z then Result := -1 else if left.Position.X > right.Position.X then Result := 1 else if left.Position.X < right.Position.X then Result := -1 else Result := 0; // gleiche X und Z-Koordinaten end; Spezielle TImage3D Objekte, wie der "Untergrund" bekommen von mir einen negativen Tag mitgegeben, damit meine Compare-Funktion diese bevorzugt. |
AW: Firemonkey Image3D Rendering Reihenfolge
Deinem Bild nach zu urteilen willst du doch so einen Sidescroller mit Parallaxe-Effekt machen, oder? Dann wäre stumpf nach Z zu sortieren ja auch richtig :-)
|
AW: Firemonkey Image3D Rendering Reihenfolge
Beides richtig :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 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