Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi GLScene Bild verschieben (https://www.delphipraxis.net/207464-glscene-bild-verschieben.html)

Schuby 26. Mär 2021 17:03

GLScene Bild verschieben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bekomme es einfach nicht hin das ich mit der rechten Maustaste das
Bild in GLScene verschieben kann, also den Null Punkt nach links oder rechts o/u verschieben kann.

Mit GLSceneViewer1MouseWheel kann ich Zoomen
Mit GLSceneViewer1MouseMove kann ich überall hin drehen.

Aber verschieben, das bekomme ich nicht hin.

Kann mir jmd von euch einen Tipp geben ?

Mfg Schuby

Delphi-Quellcode:
//================================================
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mx:= x;
  my:= y;
end;

//================================================
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Shift=[ssLeft] then
  Begin
    GLCamera1.MoveAroundTarget(my-y,mx-x);
  end;

{  if Shift=[ssRight] then
  Begin
    ?????????????
  end; }
  mx:= x;
  my:= y;
end;

//================================================
procedure TForm1.GLSceneViewer1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var step: Double;
begin
  if GLCamera1.FocalLength >= 20 then
  begin
    xx:= (WheelDelta / 20);
    GLCamera1.FocalLength:= GLCamera1.FocalLength + (step); //
    Edit1.Text:= FloatToStr(GLCamera1.FocalLength);
  end else
  begin
    GLCamera1.FocalLength:= 21;
  end;
end;

mmw 26. Mär 2021 17:45

AW: GLScene Bild verschieben
 
vielleicht hilft das 'GLNavigator'

https://www.youtube.com/watch?v=nP2KQElG2XE

Ydobon 26. Mär 2021 20:27

AW: GLScene Bild verschieben
 
Bei mir funktioniert es so.
Delphi-Quellcode:
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if shift=[ssRight] then
  begin
    mx:=x;
    my:=y;
  end;
end;

procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var xx, yy: Single;
    pl: TGLCoordinates3;
begin
  if shift=[ssRight] then
  begin
    xx:=GLCamera1.Position.x;
    yy:=GLCamera1.Position.y;
    GLCamera1.Position.x:=xx+(my-y)/20;
    GLCamera1.Position.y:=yy+(mx-x)/20;
    mx:=x;
    my:=y;
  end;
end;

Schuby 27. Mär 2021 13:41

AW: GLScene Bild verschieben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ydobon,
mit DummyCube2 gehts bei mir.
Ich denke ich habe die Camera nicht richtig eingestellt.

mfg


Delphi-Quellcode:
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 // mx:= x;
 // my:= y;

  if shift=[ssRight] then
  begin
    mx:=x;
    my:=y;
  end;
end;
//==============================================================================
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var xx, yy: Single;
    pl: TGLCoordinates3;
begin
//  if Shift=[ssLeft] then
//  Begin
//    GLCamera1.MoveAroundTarget(my-y,mx-x);
//  end;
  if shift=[ssRight] then
  begin
    xx:=GLDummyCube2.Position.x;   //GLDummyCube2  GLDummyCube2    GLCamera1
    yy:=GLDummyCube2.Position.y;
    GLDummyCube2.Position.x:=xx+(my-y)/20;
    GLDummyCube2.Position.y:=yy+(mx-x)/20;
    mx:=x;
    my:=y;
  end;
end;

mmw 27. Mär 2021 18:15

AW: GLScene Bild verschieben
 
eine Möglichkeit wäre noch


Delphi-Quellcode:
 private
    { Private-Deklarationen }
   picked_object:TGlBaseSceneObject;
Delphi-Quellcode:
procedure TForm39.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
picked_object:=GLSceneViewer1.Buffer.GetPickedObject(X,Y);
end;

procedure TForm39.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

var pp:TVector3f;

begin
if (Assigned(picked_object)) and (Shift=[ssRight]) then begin
        pp:=GLSceneViewer1.Buffer.ScreenToWorld(x,y);
        picked_object.Position.x:=pp.x;
        picked_object.Position.y:=pp.y;
        end;
end;

procedure TForm39.GLSceneViewer1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
picked_object:=nil;
end;

end.

Schuby 27. Mär 2021 20:04

AW: GLScene Bild verschieben
 
@mmw

var pp : TVector3f; <== damit komme ich nicht klar, kannst du helfen ?


mfg

mmw 27. Mär 2021 20:08

AW: GLScene Bild verschieben
 
hallo,

die Unit ist

GLS.VectorTypes


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf