Thema: Delphi OpenGl-Kurs

Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: OpenGl-Kurs

  Alt 8. Aug 2004, 08:36
@Mr_T
ich habe da auch noch ein kleines problchen:
(ch fange gerade mal wieder mit OpenGL an, zum ca 4 mal oder so)
ich wollte ein kleines spiel schreiben: skyraodes wo man sich nur nach vorne(die camara soll sich mitbewegen) nach hinten und zu seite bewegen können(die camera soll sich nicht mitbewegen)

dazu gabe ich folgenden code:
Delphi-Quellcode:
begin
  fps2 := fps2+1;
  glMatrixMode(GL_PROJECTION); // In die Projektionsmatrix wechseln
  glLoadIdentity; // Identitätsmatrix laden
  glViewPort(0, 50, ClientWidth, ClientHeight); // Viewport an Clientareal des Fensters anpassen
  gluPerspective(60, ClientWidth/ClientHeight, 1, 128); // Perspective, FOV und Tiefenreichweite setzen
  glMatrixMode(GL_MODELVIEW); //In die Modelansichtsmatrix wechseln

  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // Farb- und Tiefenpuffer löschen
  glLoadIdentity; // Identitätsmatrix laden
  if mauspos = 1 then rotation := rotation + 1 * timefactor; //Rechtsdrehen
  if mauspos = 2 then rotation := rotation - 1 * timefactor; //Linksdrehen

  if GetAsyncKeyState(vk_up) <> 0 then begin // Nach oben Taste gedrückt? Ja: Bewegen

    ypos := ypos - cos(degtorad(rotation))*0.1*timefactor
  end;

  if GetAsyncKeyState(VK_Down) <> 0 then begin // Nach Unten Taste gedrückt? Ja: Bewegen
    ypos := ypos + cos(degtorad(rotation))*0.1*timefactor
  end;

// glBindTexture(GL_TEXTURE_2D, tex);

  glRotatef(rotation,0,1,0); //Die entgültige Drehung
  glTranslatef(0, 0, ypos); //Die entgültige Bewegung


  glbegin(gl_quads);
    glvertex3f(-1.4,-0.5,-3);
    glvertex3f(-0.2, 0.5,-3);

    glvertex3f( 0.2, 0.5,-3);
    glvertex3f( 1,-0.5,-3);
  glend;

  glTranslatef(0,1,0);
  glpopmatrix;

  glbegin(gl_quads);
    glvertex3f(-1,-0.2,-6);
    glvertex3f(-0.2, 0.2,-6);
    glvertex3f( 0.2, 0.2,-6);
    glvertex3f( 1,-0.2,-6);
  glend;

  // Hinteren Puffer nach vorne bringen
  SwapBuffers(DC);

  // Windows denken lassen, das wir noch nicht fertig wären
  Done := False;

  // Nummer des gezeichneten Frames erhöhen
  inc(Frames);

  // FPS aktualisieren

  if GetTickCount - StartTick >= 500 then begin
    FPS := Frames/(GetTickCount-StartTick)*1000;
    Frames := 0;
    StartTick := GetTickCount
  end;
doch leider bewegen sich die objekte mit bzw. die position verändern sich
(ich verwende eine vorlage von delphiGL.com)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat