Entwickler-Ecke

Multimedia / Grafik - GLScene, GLCamera1.MoveAroundTarget


jjturbo - Mi 10.08.11 11:48
Titel: GLScene, GLCamera1.MoveAroundTarget
Moin Forum,

in einem Beispielprogramm lade ich ein paar STL-Dateien in meine GLScene:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
    for i := 0 to DateiListe.Count-1 do begin

      MyGLFreeForm := GLScene1.Objects.AddNewChild(TGLFreeForm) as TGLFreeForm;
      with MyGLFreeForm do begin
        Tag        := i;
        Name       := 'a_' + IntToStr(i);
//        Position.X := 0;
//        Position.y := 0;
//        Position.z := 0;
        Material.Texture.Disabled := false;
        LoadFromFile(DateiListe[i]);
        Scale.X := 0.01;
        Scale.Y := 0.01;
        Scale.Z := 0.01;
        ShowAxes   := false;
//        TurnAngle  := 0;
//        PitchAngle := 0;
//        RollAngle  := 0;
      end;



Im OnClick-Ereignis des Viewers passiert folgendes:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure THauptForm.GLSceneViewer1Click(Sender: TObject);
begin

  if Assigned(PickedObject) then begin
    PickedObject.Material.FrontProperties.Diffuse.AsWinColor := AlteFarbe;
    PickedObject.ShowAxes := false;
  end;

  PickedObject := (GLSceneViewer1.Buffer.GetPickedObject(LastMouseDown.x, LastMouseDown.y) as TGLCustomSceneObject);
  if Assigned(PickedObject) then begin
    GLCamera1.TargetObject := PickedObject;
    AlteFarbe              := PickedObject.Material.FrontProperties.Diffuse.AsWinColor;
    PickedObject.Material.FrontProperties.Diffuse.AsWinColor := clYellow;
    Caption := DateiListe[PickedObject.Tag];
    PickedObject.ShowAxes := True;
  end;

end;


das heißt, dass das Target-Obejct meiner GLCamera1 gelb markiert wird. Das funktioniert auch, ich habe mir im Debugger angesehen, was das Target-Object ist. Wenn ich aber jetzt GLCamera1.MoveAroundTarget ausführe dann rotiert alles um die Positionen 0,0,0 (Siehe ScreenShots). Egal welches Objekt ich auswähle.

ich hoffe, Ihr könnt mir helfen?

Gruß Oliver


jjturbo - Mi 10.08.11 14:09

Nachtrag:
Jede GLFreeForm scheint an den Koordinaten 0,0,0 plaziert zu sein, obwohl sie im Raum an ganz anderer Stelle zu sehen sind.


Martok - Mi 10.08.11 15:52

user profile iconjjturbo hat folgendes geschrieben Zum zitierten Posting springen:
Nachtrag:
Jede GLFreeForm scheint an den Koordinaten 0,0,0 plaziert zu sein, obwohl sie im Raum an ganz anderer Stelle zu sehen sind.
Das ist schon richtig so: STL ist ja im Prinzip "Bitmap gestapelt". Das hat also auch irgendwo seinen Koordinatenursprung.

Falls du eine BoundingBox bekommst (kenne mich bei GLScene nicht so aus) kannst du deren Mittelpunkt verwenden und der Camera als Bezugspunkt übergeben. Ansonsten müsstest du dir die Box erst aus der Größe des Objekts berechnen.