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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 11:20
Die Zeichenreihenfolge hängt nicht von der absoluten Position des einzelnen Objekts ab, sondern vom relativen Abstand zum aktuellen Betrachtungsstandpunkt.

Je weiter weg, desto früher zeichnen.

Das muss deine Sortierung hinbekommen.

Solange du aber nicht den relativen Abstand in irgend einer Weise hier ins Spiel bringst, wird die Sortierung alles liefern nur nicht das gewünschte Ergebnis.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 4. Mär 2014 um 11:24 Uhr)
  Mit Zitat antworten Zitat
LexLing

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

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 11:40
Die Sortierung mit dem relativen Abstand war auch mein erster Gedanke und habe sie auch schon ausprobiert.
Die sort-Funktion von Firemonkey aber scheint offensichtlich gar nichts zu machen.
Egal, wie ich versuche eine Sortierungsreihenfolge anzuordnen, es passiert gar nichts (es sieht immer aus wie auf dem Bild im Anhang).

Ich scheine Firemonkey keine Reihenfolge durch die sort-Funktion angeben zu können
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 12:42
Ich sehe nur, dass der Kram mit der Sortierung noch aus dem seligen 2011 ist. FireMonkey hat sich ja doch ein paar mal gewandelt. Kann es sein, dass man es ganz anders machen muss?
  Mit Zitat antworten Zitat
LexLing

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

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 12:52
Man sieht auch auf der Seite aus dem Jahre 2011, dass dort die Funktion "sortList" benutzt wurde.
Auf die kann ich heutzutage leider nicht mehr zugreifen.
Wäre sehr gut möglich, dass ein anderer Lösungsansatz nötig wäre.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 13:15
Die Sortierung mit dem relativen Abstand war auch mein erster Gedanke und habe sie auch schon ausprobiert.
Die sort-Funktion von Firemonkey aber scheint offensichtlich gar nichts zu machen.
Egal, wie ich versuche eine Sortierungsreihenfolge anzuordnen, es passiert gar nichts (es sieht immer aus wie auf dem Bild im Anhang).

Ich scheine Firemonkey keine Reihenfolge durch die sort-Funktion angeben zu können
Welche Delphi-Version hast du denn im Einsatz? (ah, gerade im ersten Beitrag gesehen XE5)
Bei XE5 wird die TViewPort3D.FRenderingList auf jeden Fall schon mal von selbst passend sortiert (abhängig von der Kamera).

Damit dürfte das eigene Sortieren wohl ins Leere laufen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 4. Mär 2014, 13: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!).
Angehängte Grafiken
Dateityp: png Unbenannt.png (3,2 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
LexLing

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

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 7. Mär 2014, 13: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.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 7. Mär 2014, 18: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
 
#9

AW: Firemonkey Image3D Rendering Reihenfolge

  Alt 9. Mär 2014, 10:15
Beides richtig
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:48 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