Einzelnen Beitrag anzeigen

Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#5

Re: GLScene auch bei MouseEvents rendern.

  Alt 21. Aug 2006, 18:43
Zitat von 3_of_8:
Ne, das geht nicht.

Delphi-Quellcode:
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
         if ssLeft in Shift then
      GLCamera1.MoveAroundTarget((MousePos.Y - Y) / 2,(MousePos.X - X) / 2);
           MousePos.X := X;
           MousePos.Y := Y;
end;
Da muss nach dem then ein begin end.

Ein MousePos gibt es nicht, nur Mouse.CursorPos und meine Variable startpos.

MousePos.X:=X funktioniert gar nicht, da X die Position innerhalb des betroffenen Controls zuweist, außerdem hätte ich den Mauszeiger immer gerne in der Mitte des Controls, daher auch das
mouse.cursorpos:=
glsceneviewer1.clienttoscreen(Point(glsceneviewer1 .Width div 2, glsceneviewer1.Height div 2));

Also das Problem ist genauer gesagt jetzt: Es wird gar nichts mehr gedreht und gerendert auch nicht.

Hmm... vieleicht hast du was falsch verstanden, hier mal der Quellcode meines Versuches.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GLScene, GLObjects, GLMisc, GLWin32Viewer, GLCadencer;

type
  TForm1 = class(TForm)
    GLScene1: TGLScene;
    GLSceneViewer1: TGLSceneViewer;
    GLCamera1: TGLCamera;
    GLLightSource1: TGLLightSource;
    GLCube1: TGLCube;
    GLCadencer1: TGLCadencer;
    procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
      newTime: Double);
    procedure GLSceneViewer1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  MousePos: TPoint; //Mausposi für Weltendrehung
implementation

{$R *.dfm}

procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
begin
 glcube1.Turn(deltatime*45);
end;

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
       //Daten erforderlich für die Drehung des Weltsystems
  MousePos.X := X;
  MousePos.Y := Y;
 Screen.Cursor:=crSizeAll;
  end;

procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
 GLCamera1.MoveAroundTarget((MousePos.Y - Y) / 2, (MousePos.X - X) / 2);
 MousePos.X := X;
 MousePos.Y := Y;
end;
end.
Bis auf das Problem mit "Mauszeiger immer gerne in der Mitte" funktioniert das Tadellos.

Mfg Net7
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat