AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey Image3D Rendering Reihenfolge

Ein Thema von LexLing · begonnen am 3. Mär 2014 · letzter Beitrag vom 9. Mär 2014
Antwort Antwort
Seite 2 von 2     12   
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 14:35
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!).
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat
LexLing

Registriert seit: 3. Mär 2014
15 Beiträge
 
Delphi XE5 Professional
 
#12

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 7. Mär 2014, 14:29
So, Problem gelöst
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:
TRenderingComp = class(TComparer<TControl3D>)
  public
    function Compare(const Left, Right: TControl3D): Integer; override;
end;
Und nun kommt die eigentliche Sortierung.
Delphi-Quellcode:
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;
Ich habe hier nach der z-Reihenfolge sortiert, weil in meinem Fall am wichtigsten ist.
Spezielle TImage3D Objekte, wie der "Untergrund" bekommen von mir einen negativen Tag mitgegeben, damit meine Compare-Funktion diese bevorzugt.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 7. Mär 2014, 19:08
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
  Mit Zitat antworten Zitat
LexLing

Registriert seit: 3. Mär 2014
15 Beiträge
 
Delphi XE5 Professional
 
#14

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 9. Mär 2014, 11:15
Beides richtig
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz