Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: So 13.04.03 00:21 
Hi,

so.. nun kommt der 2te Teil ;)

Bewegung im 3D-Raum

Ich zeige euch diesmal wie ihr euch mit den Pfeiltasten durch eine 3D Landschaft bewegen könnt :)

Als erstes solltet ihr eure scene aus dem ersten Tutorial wieder laden, bzw eine neue leere OpenGL Scene erstellen.

Fangen wir also an..

Kümmern wir uns erstmal um die "Landschaft", und erstellen uns eine Procedure "DrawLandscape":
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.DrawLandscape;
var
  j, i: Integer;
  r, wi, w, x, y: Double;
begin
  wi:=360/40;
  glColor3f(0.01.00.0);
  glBegin(GL_LINES);
  for i:=1 to 40 do begin
    w:=(PI/180)*(wi*i-(wi/2));
    x:=(-5/2)+(5/2+cos(w)*(5+5)/2);
    y:=(5/2)+(-5/2+sin(w)*(-5-5)/2);
    glVertex3f(0.0, -0.40.0);
    glVertex3f(x, -0.4, y);
  end;
  glEnd;
  r:=0;
  for j:=1 to 11 do begin
    glBegin(GL_LINE_LOOP);
    for i:=1 to 40 do begin
      w:=(PI/180)*(wi*i-(wi/2));
      x:=(-r/2)+(r/2+cos(w)*(r+r)/2);
      y:=(r/2)+(-r/2+sin(w)*(-r-r)/2);
      glVertex3f(x, -0.4, y);
    end;
    glEnd;
    r:=r+0.5;
  end;
end;


Ich weiß, das sieht jetzt ziemlich verwirrend aus, aber kopiert sie erstmal nur mit Copy&Paste rein, ruft sie in der DrawScene-Procedur auf, startet das programm und seht euch an wie die Landschaft aussieht... ;)

Ihr solltet jetzt lauter kreise sehen die durch linien vom mittelpunkt zum äussersten Kreis verbunden sind. Und nichts anderes tun wir in der Procedure, das was da jetzt für den ein oder anderen vieleicht verwirrend aussieht ist die berechnung der Eckpunkte des Kreises.

In der ersten For-Schleife werden die Linien vom Mittelpunkt nach aussen gezeichnet (GL_LINES), in der Zweiten die Kreise ansich (GL_LINE_LOOP).
Aber genug dazu.. hier geht es darum wie man sich nun bewegt, nicht wie man Kreiskoordinaten ausrechnet ;)

Ok, überlegen wir uns erstmal wie wir rauskriegen wollen ob eine Taste gedrückt wurde, und wie wir das dann verarbeiten..
Natürlich mit dem OnKeyDown-Event, aber.. jeder der das schonmal benutzt hat um eine Bewegung zu erziehlen wird wissen, das es zwischen dem Drücken der taste, und der dauerhaften bewegung eine verzögerung gibt.

Ein beispiel hierfür wäre z.B. ein Panel das man mit jedem druck auf die Leertaste um 1Pixel nach rechts schiebt. Drückt man nun die Leertaste, und hält sie gedrückt, rutscht das Panel 1 Pixel nach rechts, bleibt dort erstmal einen moment, und fährt dann fließend weiter nach rechts. Tastenverzögerung eben ;)

Nun, da wir aber damit nichts anfangen können, müßen wir uns etwas einfallen lassen... eine Boolean-Variable.
Wir setzen sie True wenn die Taste gedrückt wird, und false wenn sie losgelassen wird. Und damit wir nich für jede Taste eine Variable brauchen, nehmen wir einen Array:

ausblenden Delphi-Quelltext
1:
2:
var
  Keys: Array[0..255of Boolean;


0..255 daher, weil es auf der Tastatur 256 Tasten gibt, und wir somit für jede Taste die man drücken kann eine Variable haben ;) (Ok, wenn das Spiel nur 2 Tasten brauch wäre ne überlegung 2 Variablen zu benutzen nich verkehrt.. *g*)

Aber ok.. lassen wir das ganze erstmal so. Jetzt müßen wir nurnoch im OnKeyDown und OnKeyUp die entsprechende Variable auf True/False setzen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Keys[Key]:=true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Keys[Key]:=false;
end;


Ganz einfach ;) Denn Key ist ja die Nummer der Taste die gedrückt wurde, und da die höchste Nummer nunmal auch die letzte Taste ist, ist Key maximal 255.

Als nächstes brauchen wir eine Procedur in der wir überprüfen ob eine Taste gedrückt ist, und was passieren soll wenn sie gedrückt ist. Also schreiben wir eine Procedure CheckKeys:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Form1.CheckKeys;
begin

end;


Für den anfang reicht uns erstmal die Rotation, für welche wir nur 2 Tasten benötigen: Die linke + rechte Pfeiltaste. Doch zu allererst brauchen wir eine globale Variable "Rotate" vom Typ Single, in der wir die aktuelle Rotation speichern.

ausblenden Delphi-Quelltext
1:
2:
var
  Rotate: Single;


In unserer CheckKeys Procedure prüfen wir nun ob die linke (VK_LEFT) oder rechte (VK_RIGHT) Pfeiltaste gedrückt ist, und erhöhen bzw. verringern unseren Rotationswert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if Keys[VK_LEFT] then begin
    Rotate:=Rotate - 0.5;
    if Rotate<0 then
      Rotate:=Rotate + 360;
  end;
  if Keys[VK_RIGHT] then begin
    Rotate:=Rotate + 0.5;
    if Rotate>360 then
      Rotate:=Rotate - 360;
  end;


Wie immer auch hier die überprüfung ob der Winkel >360 oder <0 ist.
Ich denke bis hier sollte alles klar sein, kümmern wir uns nun darum das unsere Scene sich auch dreht, wenn wir die Taste drücken. Hierzu müßen wir als erstes mal die CheckKeys Procedur am anfang der DrawScene Procedur aufrufen, also jedesmal wenn unsere Scene gerendert wird.
Nun noch ein glRotate rein, wo wir unsere Scene um den Winel Rotate auf der Y-Achse drehen.

Nun sollte die DrawScene-Procedur so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.DrawScene; 
begin 
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 
  glLoadIdentity; 

  CheckKeys;
  glRotate(Rotate,0,1,0);
  DrawLandscape;

  SwapBuffers(h_DC); 
end;


Wenn ihr euer Programm nun startet, solltet ihr euch mit den Pfeiltasten nach links/rechts drehen können. Jenachdem was ihr für einen PC habt, kann das nun rasend schnell sein, oder sehr sehr langsam... denn bisher ist unsere Bewegung noch FPS-Abhängig, also jedesmal wenn unsere Scene gezeichnet wird, wird Rotate um 0.5 erhöht (sofern die Taste gedrückt ist), schafft der PC es nun die Scene 500 mal pro Sekunde zu zeichnen, wird Rotate pro sekunde um 250 erhöht... (also fast eine ganze umdrehung), schafft der PC aber z.B. nur 10 FPS (FPS = Frames per second = Bilder pro Sekunde), würde sich Rotate nur um 5 pro Sekunde erhöhen..

Was machen wir also?? Genau, das ganze FPS unabhängig! ;)
Um das zu realisieren müßen wir erstmal rausbekommen wieviel FPS unser PC schafft, bedienen wir uns für den anfang mal eines einfachen TTimer.

Erstmal aber 2 neue Variablen.. RealFPS und FPS vom Typ Integer. In RealFPS speichern wir die FPS die unser PC schafft, FPS ist ein counter.. er zählt die frames, also wird bei jedem DrawScene aufruf um 1 erhöht.

ausblenden Delphi-Quelltext
1:
2:
3:
var
  RealFPS: Integer = 100;
  FPS: Integer;


RealFPS wird mit 100 Initialisiert, da es sonst in der ersten Sekunde ein FPS Rate von 0 gäbe, was später bei der Rechnung doofe nebeneffekte hätte ;)

Klickt euch nun einen TTimer auf euer Form und stellt den Intervall auf 1000. Ein doppelklick auf den Timer bringt euch in das OnTimer-Event wo ihr folgende Zeile reinschreibt:

ausblenden Delphi-Quelltext
1:
2:
  RealFPS:=FPS;
  FPS:=0;


FPS ist also der Counter, der bei jedem DrawScene Aufruf erhöht wird. Jede Sekunde wird nun der Counter zurück auf 0 gesetzt, denn wir wollen ja wissen wieviel FPS wir in einer Sekunde schaffen.
In RealFPS steht nun also die FPS-Zahl die wir brauchen ;)

Wie wenden wir das ganze nun auf unsere Rotation an?
Nehmen wir mal an, unser Programm hätte bei 100 FPS die Optiomal geschwindigkeit.

Bei 100FPS würde Rotate um 50 / Sek erhöht werden.
Bei 200FPS würde Rotate um 100 / Sek erhöht werden...

Damit jetzt bei jeder FPS Zahl Rotate um den gleichen wert / Sekunde erhöht wird benutzen wir FPS als Faktur:

ausblenden Delphi-Quelltext
1:
Rotate:=Rotate + (0.5 * (100 / RealFPS))					


wäre FPS nun 200, würde Rotate um 0,25 erhöht werden... bei 50 FPS würde es um 1 erhöht werden ;)
Das gleiche macht ihr nun noch für die andere Pfeiltaste (einfach anstelle + nen - ) und fertig ist unsere FPS unabhängige drehung :D


Kümmern wir uns nun darum das wir auch vorwärts und rückwärs laufen können. Hierfür benötigen wir 2 weitere Variablen:

ausblenden Delphi-Quelltext
1:
2:
var
  PosX, PosZ: Single;


In diesen beiden wird unsere aktuelle X, bzw Z Position gespeichert.
Nun fügen wir in unserer CheckKeys Procedur noch diese paar Zeilen hinzu:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  if Keys[VK_UP] then
    PosZ:=PosZ + 0.1 * (100 / RealFPS);
  if Keys[VK_DOWN] then
    PosZ:=PosZ - 0.1 * (100 / RealFPS);


Wird die Nachoben-Pfeiltaste gedrückt wird PosZ um 0.1 ( * Faktor) erhöht. PosZ daher, weil wir ja in den Bildschirm hineinlaufen wollen und uns somit auf der Z-Achse bewegen.

Noch kann es aber nicht funktionieren, denn uns fehlt noch die Zeile in der wir uns um PosZ bewegen.. nämlich welche...?? Genau, glTranslate :)

ausblenden Delphi-Quelltext
1:
  glTranslate(PosX,0,PosZ);					


Die Zeile gehört zwischen glRotate und DrawLandscape. Ich denke mal hierzu brauche ich nichts weiter zu sagen.. wir verschieben unsere Scene um den Wert von PosX auf der X-Achse und um den Wert von PosZ auf der Z-Achse.

Wenn ihr das Programm nun startet, solltet ihr mit den Pfeiltasten etwas rumlaufen können.

Bisher bewegen wir uns aber nur auf der Z-Achse, also egal wie wir uns drehen, wir laufen immer nur auf einer geraden entlang.
Hier kommt nun wieder ein kleinwenig Mathe in's spiel, wir müßen nämlich anhand unserer aktuellen PositionsKoordinaten und dem Winkel in den wir gucken berechnen, in welche richtung wir laufen.

Für vorwärts (VK_UP) sähe das so aus:

ausblenden Delphi-Quelltext
1:
2:
  PosX:=PosX + Sin(-Rotate * (PI / 180)) * (0,1 * (100 / RealFPS));
  PosZ:=PosZ + Cos(-Rotate * (PI / 180)) * (0,1 * (100 / RealFPS));


Im grunde eine einfach SinusFunktion.. Das PI/180 brauchen wir, da die Sin() Funktion einen Wert im Bogenmaß erwartet.

Das ganze noch für die Pfeiltaste nach unten, und unsere CheckKeys Procedur sollte so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.CheckKeys;
begin
  if Keys[VK_LEFT] then begin
    Rotate:=Rotate - 2 * (100 / RealFPS);
    if Rotate<0 then
      Rotate:=Rotate + 360;
  end;
  if Keys[VK_RIGHT] then begin
    Rotate:=Rotate + 2 * (100 / RealFPS);
    if Rotate>360 then
      Rotate:=Rotate - 360;
  end;
  if Keys[VK_UP] then begin
    PosX:=PosX + Sin(-Rotate * (PI / 180)) * (0.1);
    PosZ:=PosZ + Cos(-Rotate * (PI / 180)) * (0.1);
  end;
  if Keys[VK_DOWN] then begin
    PosX:=PosX - Sin(-Rotate * (PI / 180)) * (0.1);
    PosZ:=PosZ - Cos(-Rotate * (PI / 180)) * (0.1);
  end;
end;


Wir ihr seht habe ich den Wert beim Rotate von 0.5 auf 2 erhöht, da mir 0.5 einfach zu langsam war ;)

Wenn ihr nun aber euer Programm startet, solltet ihr euch mit den 4 Pfeiltasten hin und her bewegen können.

Nun bastelt ihr euch eine kleine schöne landschaft drumherum, und fertig ist das erste.. äh... das erste... na, macht einfach mal :P

Au'revoir,
Aya~~

_________________
Aya
I aim for my endless dreams and I know they will come true!


Zuletzt bearbeitet von Aya am Fr 18.04.03 17:14, insgesamt 1-mal bearbeitet
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Di 15.04.03 02:52 
Erste Erfolgserlebnisse bei diesem (Dem x.) Versuch, mit OpenGL anzufangen. :)
www.philiplb.de/1a.zip
SammySan
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 15.04.03 07:57 
Super gemachtes Tuturial, leicht vertständlich, und auch gut geschrieben


aber falls du noch ein weiteres Tuturial verfasst wär es nett wenn du ein bisschen mehr auf die Texturen eingehst, so das die texturen immer richtig rum sind und auch auf einer langen wand gleich aussehen wie auf einer kurzen etc ...
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 15.04.03 08:01 
Find das Tut auch super, die Kreisberechnung versteh ich zwar nicht so ganz aber das werd ich mir auch nochmal genauer anschauen!

Den Tip von SammySan mit den Texturen find ich gut, weil irgendwie versteh ich den Sinn von denen nicht so ganz. Aber hab ja auch noch net so viel damit gemacht.

Also mach bitte weiterhin so einfache Tuts!

Gruss Andi

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Di 15.04.03 09:21 
Ich finde das Tutor auch klasse!, endlich mal eins das man versteht :wink:

hier mein erster versuch für einen raum in dem man sich bewegen kann (tastatur+maus)
www.members.aol.com/...etyardrat/raum3d.zip
(ich wollte zwar noch einen zweiten raum hinzufügen aber ich weiß noch nicht ganz wie ich die kollisionen realisieren kann :?
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 15.04.03 10:26 
huhu,

ok... dann schieb ich erstmal ein kleines Textur-Tutorial dazwischen nachher.. ;) Dannach gibt's dann Schriftdarstellung. (siehe OffTopic diskussion :) )

Freut mich aber das euch das Tutorial so gut gefällt :)

Au'revoir,
Aya~

PS:
@Phantom1 CollisionDetection ist nen ziemlich umfangreiches Thema... viel Mathe kram *g*

_________________
Aya
I aim for my endless dreams and I know they will come true!
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 15.04.03 20:12 
So,
bin gerade mal am probieren.

Aber oben steht doch

Zitat:

Ich weiß, das sieht jetzt ziemlich verwirrend aus, aber kopiert sie erstmal nur mit Copy&Paste rein, ruft sie in der DrawScene-Procedur auf, startet das programm und seht euch an wie die Landschaft aussieht...


Wenn ich das mache sehe ich nur nen schwarzen Hintergrund und eine grüne linie von links nach rechts oder umgekehrt :D Was mach ich da schon wieder falsch?

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 15.04.03 20:17 
Hi,

ne grüne linie würde drauf hindeuten das du direkt auf blickhöhe der fläche bist...

hast du evtl irgendwo ein glTranslate wo du den Y-Wert änderst drin???

Au'revoir,
Aya~

PS: kannst mir deine *.pas datei auch shcicken, dann guck ich mal nach dem fehler ;)

_________________
Aya
I aim for my endless dreams and I know they will come true!
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Di 15.04.03 20:24 
ok, habs dir mal geschickt, viel spass damit :-)

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 18.04.03 15:35 
He Aya,
eins versteh ich nicht ganz, warum verwendest du hier:

ausblenden Quelltext
1:
Rotate:=Rotate + (0.5 * (100 / FPS))					


die Variable FPS und nicht die RealFPS als Faktor?? Wäre die RealFPS nicht viel besser geeignet???

Ich habs in meinem Prog so eingebaut:

ausblenden Quelltext
1:
Rotate:=Rotate + (0.5 * (100 / RealFPS))					


Oder lieg ich da mal wieder falsch??

Cu Andi

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Fr 18.04.03 17:13 
ups.. du hast recht, schreibfehler von mir, sorry :oops:

_________________
Aya
I aim for my endless dreams and I know they will come true!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 24.04.03 18:19 
egal, welche varirate ich eintze immer der gleiche fehler: er geht zu schnell:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  if Keys[VK_LEFT] then begin
    Rotate:=Rotate - 0.5;
    if Rotate<0 then
      Rotate:=Rotate - (0.5 * (100 / RealFPS))
  end;

  if Keys[VK_RIGHT] then begin
    Rotate:=Rotate + 0.5;
    if Rotate>360 then
      Rotate:=Rotate + (0.5 * (100 / RealFPS))
  end;

  if Keys[VK_UP] then 
    PosZ:=PosZ + 0.1 * (100 / RealFPS);
     
  if Keys[VK_DOWN] then 
    PosZ:=PosZ - 0.1 * (100 / RealFPS);

warum, ??? der anfang geht, normal, aber wenn man den kreiß weiter befegen will, siht man nichts :(

Könnte mir noch jemmand bitte ein beispiel für ein 3D Würfel geben ?
wo ich mich drinen befeinde ??

_________________
MFG
Michael Springwald, "kann kein englisch...."
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: So 24.08.03 17:02 
Hallo!

Schöner 2ter Teil, kommt noch ein 3ter???
Wenn ich mal gedreht hab bin, kann ich mich nicht mehr uf die Mitte stellen :(

warum dreht sich das denn so im Großen Bogen und nicht auf dem Standpunkt?

Falls es jemanden nach genau 4 Monaten noch interessiert, warum mimi nichts mehr sieht: :lol:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.DrawScene;
...
inc(FPS)
...


Stefan

_________________
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 24.08.03 17:31 
Zitat:

Falls es jemanden nach genau 4 Monaten noch interessiert, warum mimi nichts mehr sieht:

ich fange doch nicht mit puren openGl an sondern mit GLScene bzw. mit GLXTreem....

_________________
MFG
Michael Springwald, "kann kein englisch...."
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: Mi 27.08.03 20:33 
das du das weißt, denk ich mir schon, aber andere, die das auch machen...

_________________
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
Kugelfutter
Hält's aus hier
Beiträge: 12

Win 2000
D6 Pers
BeitragVerfasst: So 07.09.03 18:45 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.DrawScene;
...
inc(FPS)
...


Was passiert da denn??

_________________
#666da @ quakenet
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 07.09.03 18:47 
da werden einfach die FPS hochgezählt, damit man ne FPS anzeige hat, oder was meinst du genau ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
Kugelfutter
Hält's aus hier
Beiträge: 12

Win 2000
D6 Pers
BeitragVerfasst: So 07.09.03 21:44 
Mein problem war das gleiche wie oben beschrieben. wenn ich das prog starte und vorwärts oder rückwärts laufe, geht alles prima. aber bei einem seitwärtsversuch wird alles schwarz!
Seit ich jetzt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.DrawScene; 
... 
inc(FPS) 
...

drinhabe gehts. ich würd gerne verstehen wieso!

_________________
#666da @ quakenet
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: Mo 08.09.03 12:32 
Weil die Bewegung über die FPS ausgerechnet wird, und wenn die null ist...

ausblenden Delphi-Quelltext
1:
2:
RealFPS:= FPS;
FPS:= 0;


ausblenden Delphi-Quelltext
1:
Rotate:=Rotate + (0.5 * (100 / RealFPS))					


an den 2en liegst :wink:

Stefan

_________________
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)