Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 23:00

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Feb 12, 2006 18:38 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Hi all,

sorry das ich auch schon wieder belästige, aber ich habe da ein kleines Problem mit Timebased Movement. Ich habe mir den Artikel im Wiki durchgelesen und das Prinzip zwar verstanden, allerdings habe ich keine Ahnung wie ich das jetzt auf mein Programm anwenden soll (wie geben ich die Ursprungsposition und die Geschwindigkeit an?).

Ich habe ein Programm geschrieben, was ein Dreieck erzuegt und es nach rechts bewegt. Natürlich läuft das viel zu schnell, daher wollte ich es mit Timebased Movement umschreiben. Schaut es euch mal bitte an:

Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglOpenGL;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.     procedure Render;
  15.     procedure OnIdle(Sender: TObject; var Done: Boolean);
  16.   private
  17.     { Private declarations }
  18.  
  19.   public
  20.     { Public declarations }
  21.   end;
  22.  
  23. var
  24.   Form1: TForm1;
  25.   DC, RC :HDC;
  26.   i :integer;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. procedure TForm1.FormCreate(Sender: TObject);
  33. begin
  34. InitOpenGL;
  35. DC:=GetDC(Handle);
  36. RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  37. ActivateRenderingContext(DC, RC);
  38. glClearColor(0.0, 0.0, 0.0, 0.0);
  39. Application.OnIdle:=Onidle;
  40. i:=0;
  41. end;
  42.  
  43. procedure TForm1.FormDestroy(Sender: TObject);
  44. begin
  45. DeactivateRenderingContext;
  46. DestroyRenderingContext(RC);
  47. ReleaseDC(Handle,DC);
  48. end;
  49.  
  50. procedure TForm1.Render;
  51. begin
  52.   glMatrixMode(GL_PROJECTION);
  53.   glLoadIdentity;
  54.   glViewport(0, 0, ClientWidth, ClientHeight);
  55.   gluPerspective(60, ClientWidth/ClientHeight,1, 128);
  56.   glMatrixMode(GL_Modelview);
  57.   glLoadIdentity;
  58.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  59.   glTranslatef(-1.5+i, 0,-6);
  60.   glBegin(GL_TRIANGLES);
  61.   glColor3f(1, 0, 0); glVertex3f(-1,-1, 0);  
  62.   glColor3f(0, 0, 1); glVertex3f( 1,-1, 0);
  63.   glColor3f(0, 1, 0); glVertex3f( 0, 1, 0);
  64. glEnd;
  65. i:=i+1;
  66. SwapBuffers(DC);
  67. end;
  68.  
  69. procedure TForm1.Onidle(Sender: TObject; var Done: Boolean);
  70. begin
  71. Render;
  72. Done:= false;
  73. end;
  74. end.
  75.  


Danke im Voraus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 18:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ne idee wäre folgendes.

Du machst dir ne Variable XPos. Die initialisierst du mit dem start wert.
Dann willst du nen Faktor haben, um den sich XPos sagen wir pro Sekunde bewegen soll. z.B. 1.5.

Bei jedem renderdurchlauf misst du wie lange du benötigt hast. sagen wir mal du hast 0.01 Sekunden benötigt. Dann addierst du auf XPos den Wert (benötigt/Zielzeit)*1.5 also (0.01/1)*1.5 = 0.015;

Um zu checken, ob dein TBM funktioniert, kannst du in deiner Renderschleife ja mal ein sleep einbauen, welches zufällig variert. Eigentlich sollte die Bewegung gleichmäßig bleiben.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 21:11 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Danke jetzt funzt alles!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]