Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Positionierung GLScene (https://www.delphipraxis.net/165972-positionierung-glscene.html)

Salmiak 24. Jan 2012 14:09

Positionierung GLScene
 
Sehr geehrte Delphi-Gemeine,

mein Problem ist vermutlich mehr als trivial, trotzdem finde ich keine Lösung.
Ich habe in eine GLScene Scene zwei DummyCubes.
Dummycube1 enthält hierbei noch mehrere Childs (Freeform).

Ich weise nun Dummycube1 dem Dummycube2 als Child hinzu, somit entsteht folgende Hierarchie:
Delphi-Quellcode:
Dummycube2
|
|___________Dummycube1
             |
             |__________ n Freeforms im Dummycube1


Die Positionierung (also optisch für den Benutzer) der Freeforms soll sich nicht ändern. Durch das Zuweisen des Dummycubes1 als Child des Dummycubes2 wird aber die Position relativ zum Dummycube2 neu dargestellt.

Ziel des ganzen:
Ich möchte Dummycube2 über Pitch um eine bestimmte Gradzahl drehen. Hierzu setze ich den Dummycube2 an eine bestimmte Position um eine Effekt ala (drehen um eine Gelenk) zu erhalten. Anschließend möchte ich das Parent des Dummycubes1 wieder zurücksetzen, da Dummycube1 durch das Pitch des Dummycube2 gedreht wurde, wurden auch die Childfreeforms des Dummycubes1 mit gedreht. Wenn ich das Parent des Dummycubes1 zurücksetzte sollten die Freeforms also an der neuen Stelle stehen.

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.

Herzlichen Dank für Eure Antworten.

Uwe Raabe 24. Jan 2012 16:32

AW: Positionierung GLScene
 
Das wird so nicht gehen! GLScene positioniert die Objekte anhand der Baumstruktur. Die jeweiligen Transformationen der Hierarchie addieren sich und das geschieht dynamisch. Wenn du ein Objekt in einen anderen Parent verschiebst, erbt es die Transformation. Ziehst du es wieder raus, verliert es diese wieder. Du musst dir wohl ein anderes Konzept überlegen.

Salmiak 25. Jan 2012 11:02

AW: Positionierung GLScene
 
Danke für die Antwort, das war mir so leider nicht bewusst "Asche auf mein Haupt".
Welche "einfache Möglichkeit" habe ich, die Rotation und Bewegung vor der "Entnahme" des Parents diese umzurechen?.


1000 X Danke für Ihre Antworten

Uwe Raabe 25. Jan 2012 12:43

AW: Positionierung GLScene
 
Delphi-Quellcode:
var
  matrix: TMatrix;
  saveParent: TGLBaseSceneObject;
begin
  DummyCube2.ResetRotations;
  DummyCube2.Position.SetToZero;
  saveParent := DummyCube1.Parent;
  DummyCube1.Parent := DummyCube2;
  DummyCube2.PitchAngle := 30;
  matrix := DummyCube1.AbsoluteMatrix;
  DummyCube1.Parent := saveParent;
  DummyCube1.AbsoluteMatrix; // wegen eines Bugs in GLScene muss hier die Matrix neu aufgebaut werden
  DummyCube1.AbsoluteMatrix := matrix;
end;
Besser wäre es aber, du baust das Drehgelenk gleich fest in die Hierarchie ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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