Einzelnen Beitrag anzeigen

Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#1

OpenGL Bone Animation (Restless) funktioniert nicht?

  Alt 21. Jan 2010, 19:58
Hey DPs,

Ich hab schon wieder ein Problem.
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 ).
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
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat