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); Material.Texture.Disabled := false; LoadFromFile(DateiListe[i]); Scale.X := 0.01; Scale.Y := 0.01; Scale.Z := 0.01; ShowAxes := false; 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
jjturbo hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!