Autor Beitrag
jjturbo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Mi 10.08.11 11:48 
Moin Forum,

in einem Beispielprogramm lade ich ein paar STL-Dateien in meine GLScene:
ausblenden 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:
ausblenden 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
Einloggen, um Attachments anzusehen!
_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
jjturbo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: 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.

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."