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

Aktuelle Zeit: Fr Jul 18, 2025 03:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Mär 18, 2006 21:04 
Offline
DGL Member

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

sorry das ich auch mal wieder belästigen muss, allerdings habe ich da ein kleines Problem mit einem meiner Programm. Es rendert ein Dreieck, was sich nach rechts bewegt, vom Rand abprallt und die Richtung ändert, usw. Dabei soll das Dreieck eigentlich innerhalb von vier Sekunden kommplett schwarz werden und dann wieder auftauchen. Das tut es auch, allerdings scheint das TBM da fehlerhaft zu sein. Auf meinem Rechner ist es mir nicht aufgefallen aber auf einem Schnellerem habe ich dann bemerkt, dass das Dreieck immer schneller fadet.

Schaut euch mal bitte den Code an und sagt mir worans liegt.

Code:
  1.  
  2. procedure TForm1.Render;
  3. begin
  4.   glMatrixMode(GL_PROJECTION);
  5.   glLoadIdentity;
  6.   glViewport(0, 0, ClientWidth, ClientHeight);
  7.   gluPerspective(60, ClientWidth/ClientHeight,1, 128);
  8.   glMatrixMode(GL_Modelview);
  9.   glLoadIdentity;
  10.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  11.     if posX > 3 then
  12.    Faktor:=-0.5;
  13.    if PosX < -3 then
  14.     Faktor:=0.5;
  15.   PosX:=PosX+(Zeitfaktor/1)*Faktor;
  16.   glTranslatef(PosX, 0,-6);
  17.   glBegin(GL_TRIANGLES);
  18.   glColor3f(i, 0, 0); glVertex3f(-1,-1, 0);
  19.   glColor3f(0, 0, i); glVertex3f( 1,-1, 0);
  20.   glColor3f(0, i, 0); glVertex3f( 0, 1, 0);
  21. glEnd;
  22. if i<=0 then
  23.  j:=j+(Zeitfaktor/1)*0.25;
  24. if i>=1 then
  25.  j:=j+(Zeitfaktor/1)*-0.25;
  26. i:=i+j;
  27. SwapBuffers(DC);
  28. end;
  29.  
  30. procedure TForm1.Onidle(Sender: TObject; var Done: Boolean);
  31. const Frequenz = 1000;
  32. var aktuellezeit :longword;
  33.  begin
  34. aktuellezeit:=GetTickCount();
  35. Zeitfaktor:=(aktuelleZeit - Berechnungszeit)/Frequenz;
  36. Render;
  37. Berechnungszeit:=aktuellezeit;
  38. Done:=false;
  39. end;
  40.  
[/i]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 19, 2006 16:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Du addierst auf j jedes Frame den Zeitfaktor drauf und auf i jeden Frame j. Das sollte dir schon spanisch vorkommen.
Im ersten Frame mag noch alles klappen aber im zweiten besteht i bereits aus dem Zeitfaktor des ersten Frames und plus j (also Zeitfaktor des ersten Frames und des zweiten Frames). Im dritten Frame geht der Zeitfaktor des ersten Frames bereits 3 mal in i ein...
Warum passt du i nicht direkt an sondern gehst den Umweg über j?

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 19, 2006 21:42 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Ein Freund und ich habe das Programm vor ungefähr zwei Wochen geschrieben und wir haben damals j verwendet, weil das Ganze mit nur i nicht funktioniert hat. Jetzt habe ich aber herasugefunden warum: die Codezeile
i:=i+(Zeitfaktor/1)*-22.5; wird von Delphi warum auch immer nicht ausgeführt. Ändert man das ganze zu
i:=i+(Zeitfaktor/-1)*22.5; dann geht alles.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 21, 2006 12:52 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Mär 04, 2006 22:54
Beiträge: 32
Das versteh ich nun wieder nicht ganz, was soll den in der Zeile "i:=i+(Zeitfaktor/1)*-22.5" das (Zeitfaktor/1) ergeben :?:
Zeitfaktor ist doch gleich (Zeitfaktor/1) oder habe ich jetzt was verpaßt :-) ?

_________________
Schönen Gruß, Sky.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 21, 2006 13:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Deine Berechnung ist irgendwie komisch.

Die typische Berechnung bei TimeBasedMovement ist so, dass sagst es soll sich 200 Pixel pro Sekunde bewegen. Und dann sieht die Berechnung so aus, dass du sagst. X := X + 200 * Zeitfaktor. Dein berechneter Zeitfaktor sollte so eigentlich stimmen. Nur die eigentliche Berechnung mit dem Faktor würde ich umstellen.

Der Zeitfaktor sollte sich ja im Bereich von 0 und 1 (1 Sekunde) bewegen. Wenn du jetzt 10 Bilder in der Sekunde schaffst dann hast du einen Faktor von 0.1. 200 * 0.1 wären also 20. Das würde einer Division von 10 entsprechen. Und wenn du jetzt 20 + 20 + 20 usw rechnest kommst du nach 10 mal auf genau 200.

Das musst du jetzt nur für deinen Fall umsetzen. In welchem Bereich und mit welchen Maßen (Pixel, Farbwerte) spielt keine rolle. Das prinzip ist überall das Gleiche.


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 7 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.008s | 17 Queries | GZIP : On ]