Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL Bone Animation (Restless) funktioniert nicht? (https://www.delphipraxis.net/146531-opengl-bone-animation-restless-funktioniert-nicht.html)

Chefx 21. Jan 2010 18:58


OpenGL Bone Animation (Restless) funktioniert nicht?
 
Hey DPs,

Ich hab schon wieder ein Problem. :lol:
ich will mit Bones eine Objekt animieren. Da hab ich mich auf ins WWW gemacht und hab das http://texelviews.delphigl.com/index...peach#restless gefunden.
So jetzt zu mein Problem, wenn ich jetzt die Animation starte bewegt sich der bagger keinen Zentimeter.
Ich hab mir das beispiel angesehen (hab daraus auch die funktionen und das Objekt(den Bagger) her :wink: ).
Hier der Quellcode:
Delphi-Quellcode:
unit skybox1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,dglOpenGL, AppEvnts, GLBmp, StdCtrls, ExtCtrls, glRender,Model,Model3ds,
  ModelObj,ModelX,ModelMsa,glxsys, CategoryButtons, Geometry, restless;


type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Timer1: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    DC  : HDC;
    RC  : HGLRC;
    procedure render;
  end;

  var
  Form1: TForm1;
  Timefactor:real;
  StartTime, LoopTime: Integer;
  glx:Tglx;
  rlsObj : TRLSObject;
  updateTime : Single;
const
  ADVANCE_RATE = 25;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  restlessStartAnimation(rlsObj, 1, 1000);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Dummy : HPalette;
 i:integer;
 TMUs:integer;
begin
  randomize;
  glx:=Tglx.Create(form1);
  glx.Parent:=self;
  glx.Align:=alclient;
  glx.GLXini(DC,RC);
  glx.extfilepath:=extractfilepath(paramstr(0));
  //glx.GLXcreateSkybox('seiten', 'seiten', 'unten', 'oben', 'seiten', 'seiten',1000, 1000, 1000,list[0]);
  glClearColor(0,0,0,0);

  // restless initialisieren
  restlessInit();

  // objekt erstellt
  rlsObj := restlessCreate();

  //objekt laden
  restlessLoadFromFile(rlsObj, PChar(glx.extfilepath + 'objects/Kran.rlsobj'));

  //objektanimation laden
  restlessAddAnimationFromFile(rlsObj, PChar(glx.extfilepath + 'objects/Kran.rlsani'));


end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeActivateRenderingContext;
  wglDeleteContext(RC);
  ReleaseDC(Handle, DC);

  //animation wieder freigeben
  restlessDestroy(rlsObj);

  glx.Free;
end;

procedure TForm1.render;
var i:integer;
begin
  glMatrixMode(GL_MODELVIEW);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glLoadIdentity;

  glRotated(90,0,1,0);
  gltranslatef(10,-1,1);
  glRotated(90,0,1,0);
  glPushMatrix();

  glColor3f(1.0,0,0);
 
  restlessRender(rlsObj); // objekt rendern


  glClear(GL_DEPTH_BUFFER_BIT);
  glColor3f(0,1.0,0);
  For i := 0 to restlessGetBoneCount(rlsObj) do
    restlessRenderBone(rlsObj, i, true); //bones rendern
  glPopMatrix();

  SwapBuffers(DC);

end;

procedure TForm1.FormResize(Sender: TObject);
begin
  glx.GLXhandleResize;
end;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  LoopTime := gettickcount-starttime;
  TimeFactor := LoopTime*0.00000000001+1;
  StartTime := gettickcount;

      // Update Restless:
    updateTime := updateTime + TimeFactor;
    If (updateTime > ADVANCE_RATE) then
    Begin
      restlessAdvanceAnimation(rlsObj, updateTime);
      updateTime := updateTime - ADVANCE_RATE;
    End;

  Render;

  glx.SetFocus;
end;


end.
Hab ich da noch was vergessen oder falsch gemacht ?

Ich danke für alle antworten

MfG
Chefx

Chefx 24. Jan 2010 19:11

Re: OpenGL Bone Animation (Restless) funktioniert nicht?
 
was nehmt ihr zur Bone Animation?

Namenloser 24. Jan 2010 23:24

Re: OpenGL Bone Animation (Restless) funktioniert nicht?
 
Ich kenn mich damit zwar nicht aus, aber die Zeile
Delphi-Quellcode:
  TimeFactor := LoopTime*0.00000000001+1;
kommt mir etwas seltsam vor. Hast du es mal mit höheren Werten probiert? Du sagst ja, dass sich bei dir nix bewegt. Vielleicht bewegt es sich ja schon, aber einfach so langsam, dass du keine Bewegung erkennst. :mrgreen:

Chefx 25. Jan 2010 15:05

Re: OpenGL Bone Animation (Restless) funktioniert nicht?
 
funktioniert leider nicht,
auch mit 2 geht es nicht :mrgreen:
(die kleinen zahlen laufen sonst gut :stupid: )

Chefx 31. Jan 2010 13:27

Re: OpenGL Bone Animation (Restless) funktioniert nicht?
 
Ich hab es jetzt hin bekommen (mit hilfe der DGL :mrgreen: )

es lag hier dran das ich noch die Deklaration vergessen hab (in OnCreate):
Delphi-Quellcode:
StartTime := gettickcount;
und was NamenLozer noch gesagt hat:
Delphi-Quellcode:
Timefactor:=gettickcount-StartTime;
StartTime := gettickcount;
drotzdem danke :thumb: :thumb: :thumb:

MfG
Chefx


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

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