Entwickler-Ecke

Multimedia / Grafik - GLScene - GLCamera als Child eines Objects + Rotiation


Hybrid - Sa 17.09.05 14:58
Titel: GLScene - GLCamera als Child eines Objects + Rotiation
Hallo erstmal,
ich habe bisher nicht sehr viel (aber auch nicht wenig :wink: ) Erfahrung mit GLScene.
Mich stört und behindert schon seit geraumer Zeit ein großes Problem:

Ich habe in meinem Prog ein 2 Objekte.
z.B. folgende:
Dummycube (Position.Z := 5) <- als Target der Camera
und
GLCube
-GLCamera (Position.Y := 2) <- als Child vom Cube

Wenn ich nun den Cube drehe (z.b. Roll(0.1)) dann dreht sich die Camera nicht mit, sondern nur ihre Positions Koordinaten.
Wie soll man denn mit solch einem Problem ein Standgeschütz mit einer Kamera am Waffenausgang erstellen ?!

Kennt jemand eine lösung des Problems?
-Irgendwie habe ich das Gefühl, dass es dafür eine ganz simple Lösung gibt.

PS: Ich habe das Beispiel mal als Anhang gepostet


mfG Hybrid


tommie-lie - Sa 17.09.05 15:11
Titel: Re: GLScene - GLCamera als Child eines Objects + Rotiation
user profile iconHybrid hat folgendes geschrieben:
Wenn ich nun den Cube drehe (z.b. Roll(0.1)) dann dreht sich die Camera nicht mit, sondern nur ihre Positions Koordinaten.
Das Target-Property der Kamera existiert nicht nur um da zu sein ;-)
Du müsstest schon den DummyCube, also das Target der Kamera, entsprechend der Drehung bewegen. Also Einen GLDummyCube nehmen, den GLCube und den zweiten GLDummyCube rein, GLCamera als Child vom GLCube und als Target den zweiten GLDummyCube. Wenn du jetzt den äußeren GLDummyCube drehst, dreht sich das gesamte System, mitsamt Kamera, Würfel und Target, wodurch sich auf die Blickrichtung der Kamera der Drehung anpasst.


Hybrid - Sa 17.09.05 16:25

Als erstes mal muss ich sagen, dass deine Antwort klingt, als hätte ich das Target der Camera garnicht erst gesetzt, was im angehängten Beispiel richtig gemacht ist (hättes du es dir angesehen, hättest du das auch bemerkt)

Nichts desto trotz habe ich vergessen zu erwähnen, dass ich deinen Vorschlag natürlich auch schon getestet habe:

Scene Objects
-GLDummyCube1
--GLCube1
---GLCamera1
----GLLightSource1
--GLDummyCube2 <- Als Target der Camera

Cadencer:
GLDummyCube1.Roll(0.1);


Und das geht auch nicht. (Siehe Anhang)


tommie-lie - Sa 17.09.05 16:47

user profile iconHybrid hat folgendes geschrieben:
Als erstes mal muss ich sagen, dass deine Antwort klingt, als hätte ich das Target der Camera garnicht erst gesetzt
Nein, ich habe bemerkt, daß du das Target gesetzt hast.
So, wie ich deinen Post gelesen habe, drehst du den GLCube, dessen Child die Kamera ist. Dadurch dreht sich zwar die Kamera mit, jedoch nicht ihre Blickrichtung. Ist das soweit richtig?
So wie ich es verstanden habe blickt sie immer in Richtung DummyCube, den du aber beim Drehen des GLCubes nicht veränderst, deswegen schaut die Kamera in Weltkoordinaten immer auf die gleiche Stelle, selbst wenn sie sich um den GLCube drehen sollte.

Hybrid hat folgendes geschrieben:
(hättes du es dir angesehen, hättest du das auch bemerkt)
Ich habe mir das Beispiel nicht angeschaut, weil ich der Meinung war, alle Informationen aus deinem Post herauslesen zu können. Außerdem habe ich kein Delphi mehr installiert und kann es auch nicht mal eben neu installieren.

Hybrid hat folgendes geschrieben:
(Siehe Anhang)
Könntest du mir bitte mal die Werte für die Eigenschaft Up der Kamera vor und nach dem Drehen angeben und noch ein zweites Objekt im Sichtbereich der Kamera platzieren, das Child der Kamera ist? Ich finde es eigenartig, daß zwar die Position der Kamera verändert wird, sich aber anscheinend das relative Koordinatensystem der Kamera nicht mitdreht. Ich habe eigentlich ein anderes Verhalten in Erinnerung.


Hybrid - Sa 17.09.05 17:11

So...
Ich muss mich erstmal entschuldigen, wenn das etwas agressic klang, aber ich bin im moment etwas gereizt, da mich dieses Problem schon seit geraumer zeit nervt.

ich habe mal einen Screenshot vom jetzigen AUfbau erstellt:
user defined image

Die Sphäre ist nun im Blickfeld, und Koordinatensystem der Camera und dreht sich auch so wie sie sollte
(siehe compilierten Anhang :wink: )

Die Up-Daten werden auch stätig in der Listbox angezeigt, aber ändern sich nie.


tommie-lie - Sa 17.09.05 17:59

user profile iconHybrid hat folgendes geschrieben:
Die Up-Daten werden auch stätig in der Listbox angezeigt, aber ändern sich nie.
Hm, daß sie sich nicht ändern ist normal, aber anscheinend beziehen sie sich auf die weltkoordinaten, nicht auf die relativen des Koordinatensystems der Kamera, was in diesem Fall ziemlich ärgerlich ist.
Du kannst versuchen die Kamera synchron mit dem Würfel mitzudrehen, bzw das Up-Property durch geeignete Vektorarithmetik passend zu ändern, aber sonst fällt mir im Augenblick auch nichts ein.


Hybrid - Sa 17.09.05 18:15

Jup, danke für den Tipp. Hiermit, im Cadencer Progress, geht es jetzt:


Delphi-Quelltext
1:
  GLCamera1.Up.SetVector(GLDummyCube1.Up.AsAffineVector);                    


Vielen Dank! Jetzt kann ich endlich weitermachen :D