AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL Pong

Ein Thema von acidrain · begonnen am 24. Mär 2012 · letzter Beitrag vom 24. Mär 2012
Antwort Antwort
Seite 2 von 4     12 34      
FlatIron

Registriert seit: 22. Mär 2012
13 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:09
Du Veränderst nur die Koordinaten. Aber danach machst du nichts mehr. Die Koordinaten sind jetzt zwar nicht mehr die alten, zumindest im Speicher, aber auf dem Bildschirm betrachtest du immer noch die alte Ausgabe. D.h. du musst deine Grafiken neu rendern! Dies geschieht normalerweise in deiner Rendering-Methode, die du aus deiner Hauptschleife raus aufrufst. In der Rendering-Methode werden deine Objekte mit den neuen Koordinaten auf dem Bildschirm ausgegben. Die Änderungen, die du zuvor nur im Speicher vorgenommen hast, werden nun sichtbar.
Wie das genau funktioniert musst du in diversen Tutorials nachlesen.
Das bügeln wir schon aus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:09
Könntet ihr mir das zumindest irgendwie im Prosatext verdeutlichen, denn ich kenn mich wirklich nicht mit OpenGL aus und hab mir erst vor kurzem ein paar Tutorials angeguckt.

Vielen Dank im Vorraus!
Dann schau doch in den Tutorials nach der procedure meistens GLDraw.

Beispiel!
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
 begin
  GLDraw;
  if Spieler1hoch then
   begin
    s1:= s1+5;
    Spieler1hoch:= false;
 
 if Spieler1runter then
   begin
    s1:= s1-5;
    Spieler1runter:= false;
 end;
 end;
 end;
Delphi-Quellcode:
procedure DrawSchläger
begin
//Spieler 1
   glTranslatef(-60, 0, 0);
   glTranslated (0, s1, 0);
 glBegin(GL_QUADS);
   glColor3f(0, 1, 0); glVertex3f(-1,1,-1);
  glColor3f(0, 1, 0); glVertex3f(-1,-9,-1);
   glColor3f(0, 1, 0); glVertex3f(1,-9,-1);
  glColor3f(0, 1, 0); glVertex3f(1,1,-1);
glEnd;
end;
Delphi-Quellcode:
procedure GLDraw;
begin

  // Clear The Screen And The Depth Buffer
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  // Change Matrix Mode to Projection
  glMatrixMode(GL_PROJECTION);
  // Reset View
  glLoadIdentity;
  gluPerspective(45, (320 / 240), 1, 1000.0);
  // Change Projection to Matrix Mode
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  
  DrawSchläger
  
  // Update the display
  SwapBuffers(h_Dc);
end;
So in etwa aber das varriiert von Anwendung zur Anwendung...

gruss

Geändert von EWeiss (24. Mär 2012 um 13:30 Uhr)
  Mit Zitat antworten Zitat
acidrain

Registriert seit: 18. Mär 2012
17 Beiträge
 
#13

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:12
Also brauche ich zusätzlich noch eine Prozedur, bei der die Bewegung steht, die im Timer derzeit ist und dann im Timer erwähnt wird?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:15
Also brauche ich zusätzlich noch eine Prozedur, bei der die Bewegung steht, die im Timer derzeit ist und dann im Timer erwähnt wird?
Siehe mein kleines Beispiel.

gruss
  Mit Zitat antworten Zitat
acidrain

Registriert seit: 18. Mär 2012
17 Beiträge
 
#15

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:24
Also liegt der Fehler lediglich an der Projektion und nicht irgendwo an der Tastenbelegung oder irgendeinem anderen Fehler, den ich mit OpenGL gemacht hab?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:30
Also liegt der Fehler lediglich an der Projektion und nicht irgendwo an der Tastenbelegung oder irgendeinem anderen Fehler, den ich mit OpenGL gemacht hab?
Du mußt OpenGL Initialisiere.
Den GeräteContext ermitteln
Renderkontext erstellen
Renderkontext aktivieren

Delphi-Quellcode:
  // OpenGL-Funtionen initialisieren
  InitOpenGL;
  // Gerätekontext holen
  h_DC := GetDC(_FNormal.Handle);
  // Renderkontext erstellen (32 Bit Farbtiefe, 24 Bit Tiefenpuffer, Doublebuffering)
  h_RC := CreateRenderingContext(h_DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  // Erstellten Renderkontext aktivieren
  ActivateRenderingContext(h_DC, h_RC);
Dein Timer so wie ich es im Beispiel gezeigt habe mit dem Anstoßen von GLDraw sollte so in Ordnung sein.
Bedenke aber das meine perspektive nicht unbedingt deinen Ansprüchen gerecht wird.

Gruss

Geändert von EWeiss (24. Mär 2012 um 12:32 Uhr)
  Mit Zitat antworten Zitat
acidrain

Registriert seit: 18. Mär 2012
17 Beiträge
 
#17

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:37
Brauche ich dann trotzdem noch den IdleHandler oder kann ich den auslassen, wegen dem Timer?

EDIT: h_DC & h_RC werden bei mir nicht erkannt, hab wohl einen veralteten Header :s

Geändert von acidrain (24. Mär 2012 um 12:42 Uhr)
  Mit Zitat antworten Zitat
FlatIron

Registriert seit: 22. Mär 2012
13 Beiträge
 
Delphi 7 Enterprise
 
#18

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:43
Was dir bei deinem Projekt helfen könnte, wäre ein Blick auf diese Seite:

http://wiki.delphigl.com/index.php/Hauptseite

Dort findest du auch eine schnelle Einführung in OpenGL: http://wiki.delphigl.com/index.php/Tutorial_Quickstart
(habe ich bereits gepostet)
Für die Mathematik empfehle ich dir zusätzlich diese Seite: http://oberprima.com/
- Dort findest du gute Videotutorials, die dir sicher helfen werden.

DAS klassische OpenGL Tutorial findest du auf NeHe's Homepage: http://nehe.gamedev.net/

Viel Spaß und viel Glück

h_DC und h_RC sind Variablen! Guck dir wirklich nochmal die Grundlagen an.
BTW: Ich würde dir den OpenGL-Header von DelphiGL empfehlen
Das bügeln wir schon aus
  Mit Zitat antworten Zitat
acidrain

Registriert seit: 18. Mär 2012
17 Beiträge
 
#19

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:44
Den hab ich ja auch, aber bei dem sind die beiden Variablen auch nicht deklariert
  Mit Zitat antworten Zitat
FlatIron

Registriert seit: 22. Mär 2012
13 Beiträge
 
Delphi 7 Enterprise
 
#20

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:47
Die musst DU ja auch deklarieren! Das macht kein Header für dich. Erstell dir doch erstmal mit den Tutorials einen Rahmen für dein Projekt und versuche die Grundlagen zu verstehen. Ist schwer, dass weiß ich, aber sonst wird das nichts.

So sieht das Template aus (Quelle: DelphiGL):

Delphi-Quellcode:
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private { Private-Deklarationen }
    StartTime, TimeCount, FrameCount : Cardinal; //FrameCounter
    Frames, DrawTime : Cardinal; //& Timebased Movement
    procedure SetupGL;
    procedure Render;
    procedure ErrorHandler;
  public { Public-Deklarationen }
    DC : HDC; //Handle auf Zeichenfläche
    RC : HGLRC;//Rendering Context
  end;
Das bügeln wir schon aus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz