Entwickler-Ecke

Multimedia / Grafik - GLScene: GLCamera1 Problem


mimi - Do 26.12.02 19:21
Titel: GLScene: GLCamera1 Problem
Hallo,
ich möchte bei meiner GLCamera1 die ansicht ändern.
und zwar wenn ich auf denn buton vor drücke soll es nach vorne gehen.
ich habe eine Plane und auf diese Plane schaut die GLCamera1.
Wie geht das am beseten ?
ich will nur das er nach vorne hinten nach oben nach unten gehe wenn man die tasten bzw. die buttoen dafür drückt.
Wie geht das ????

MFG
mimi


tommie-lie - Do 26.12.02 19:56
Titel: Re: GLScene: GLCamera1 Problem
mimi hat folgendes geschrieben:
Hallo,
ich will nur das er nach vorne hinten nach oben nach unten gehe wenn man die tasten bzw. die buttoen dafür drückt.
Wie geht das ????

"Was heißt das"?!?!?

Willst du mal von vorne, mal von hinten auf die Plane gucken? Dann wäre das einfachste eine zweite Camera, das nächst-schwierigere eine Positionsänderung der Camera (auf die neue Position auf der anderen Seite des Planes).


mimi - Do 26.12.02 20:06

also:
ich habe ne plane nun will ich mich diese planer nähern.
aus diesm projekt will ich Skyroads machen.
Aber wie veränder ich denn blick winkel der Kamera
Die plane ist etwas größer als das Form.
Bitte mit beispiel antworten(in deutsch)

MFG
mimi


MathiasH - Fr 27.12.02 10:25

dafür sind die ganzen variablen von glCamera zuständig soweit ich mich erinnere musst du einfach die position der Kamera ändern wenn du sie auf dein Objekt fokusiert hast "schaut" sie dann automatisch in die richtige Richtung

MathiasH


tommie-lie - Fr 27.12.02 11:17

ah so.
Winkeländerung...
Schwierig und Mathe...
Aber für den Anfang könntest du die Position der Kamera auf einer Achse verändern.
Wenn die Plane also auf der Z-Achse (durch den Raum, vorne nach hinten) liegt (0;0;0) und die Kamera ein bisschen weiter hinten ist (auf der Z-Achse) und höher als das Plane liegt, sehen die Koorinaten der Kamera so aus: (0;5;-10). Wenn Camera.Target das Plane ist, schaust du jetzt schräg auf die Plane. Um den Winkel zu ändern reicht es, den Y-Wert der Kamera zu ändern, sie also näher zum Plane auszurichten. Dank Target richtet sich die Kamera dann von alleine wieder auf das Plane aus. Also würde folgendes dann gehen:

Quelltext
1:
2:
3:
4:
5:
procedure Timer1.Timer
begin
  GLCamera1.Position.Y := GLCamera1.Position.Y - 0.1;
  GLCamera1.TransformationChanged;
end;

So. Wenn der Timer ... 5mal in der Sekunde (?) ... aktiviert wird, wird die Kamera jedesmal ein bisschen weiter nach unten geschoben. Wenn man das lange genug macht, ist man natürlich auf der anderen Seite des Planes, also muss man sich selbst darum kümmern, wie weit man gehen darf und will.
Allerdings ist das keine wirkliche Rotation um das Target. Dafür gibt's die Funkion

Quelltext
1:
GLCamera1.MoveAroundTarget(PitchDelta, TurnDelta);                    

der man die Winkel (ich glaube in Grad, wenn nicht mit DegToRad umrechnen) übergibt. Damit dreht man sich dann wirklich um das Objekt, was aber imer noch nicht verhindert, plötzlich auf der anderen Seite der Plane zu sein, dafür geht 180° weiter wieder zurück auf die ursprüngliche Seite.
"Ranzoomen" geht auch, und zwar mit

Quelltext
1:
GLCamera1.AdjustDistanceToTarget(Ratio);                    

Übergeben wird der Faktor (Ratio) um den die Entfernung zum Objekt geändert werden soll. 0,5 würde also eine Halbierung, 2 eine Verdoppelung der Distanz bewirken.
Somit hätte man eigentlich alles, was man braucht, um den User einen beliebigen Blickwinkel zu erlauben.
Übrigens ändert jede dieser Funktionen die Position der Kamera. Geht auch nciht anders. Höchstens beim Zoomen könnte man SceneScale oder FocalLength nehmen, um die Position der Kamera beizubehalten und gleichzeitig in die Szene zu zoomen...