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
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: OpenGL Pong

  Alt 24. Mär 2012, 13:02
Also dem Problem bin ich mir bewusst, vor dem ich stehe, aber ich wüsste nicht, wie das zu ändern ist. Nach den ganzen Tipps, die ihr mit gegeben habt ist das Problem, dass die Schläger nicht angezeigt werden
Wenn du den IdleHandler deaktivierst kann auch nichts Rendern
denn da wird die Render procedure und das anschließende neu zeichnen von Schläger ausgeführt.

gruss
  Mit Zitat antworten Zitat
acidrain

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

AW: OpenGL Pong

  Alt 24. Mär 2012, 13:08
Dann kann ich das doch auch ganz einfach in den Timer reinpacken. Ich brauch ja nicht mehr wie 25FPS für Pong.


EDIT: Danke FlatIron, das werd ich wohl tun! Ne, Abgabetermin ist noch was bisschen hin, hab erstmal das schriftliche gemacht und wollte mich zuletzt an's Programmieren setzen.
Ich guck mir alles nochmal von vorne an und melde mich, falls nötig!
  Mit Zitat antworten Zitat
FlatIron

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

AW: OpenGL Pong

  Alt 24. Mär 2012, 13:11
Mach das.

[OT]
Darf ich fragen wie das Thema der Facharbeit lautet? Und welches Fach das ist? Mathe? Info?
[/OT]
Das bügeln wir schon aus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: OpenGL Pong

  Alt 24. Mär 2012, 13:14
Versuch das mal..

Delphi-Quellcode:
unit uPong;
 
interface
 
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, DGLOpenGL, ExtCtrls;
 
type
   TForm1 = class(TForm)
     procedure FormCreate(Sender: TObject);
     procedure SetupGL;
     procedure FormResize(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure IdleHandler(Sender: TObject; var Done: Boolean);
     procedure ErrorHandler;
     procedure Render;
     procedure Schlaeger;
     procedure FormKeyDown(Sender: TObject; var Key: Word;
       Shift: TShiftState);
   private
      StartTime, TimeCount, FrameCount : Cardinal;
      Frames, DrawTime : Cardinal;
   public
     DC: HDC;
     RC: HGLRC;
   end;
 
const
  NearClipping = 1;
  FarClipping = 1000;
 
var
   Form1: TForm1;
   s1, s2: Integer;
 
implementation
 
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
 begin
  DC:= GetDC(Handle);
   if not InitOpenGL then Application.Terminate;
   RC:= CreateRenderingContext( DC,
                                [opDoubleBuffered],
                                32,
                                24,
                                0,0,0,
                                0);
   ActivateRenderingContext(DC, RC);
   SetupGL;
 end;
 
procedure TForm1.SetupGL;
 begin
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_CULL_FACE);
 end;
 
procedure TForm1.FormResize(Sender: TObject);
 var tmpBool : Boolean;
 begin
  glViewport(0, 0, ClientWidth, ClientHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  IdleHandler(Sender, tmpBool);
 end;

procedure TForm1.FormDestroy(Sender: TObject);
 begin
  DeactivateRenderingContext;
  DestroyRenderingContext(RC);
  ReleaseDC(Handle, DC);
 end;
 
procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
   StartTime:= GetTickCount;
   Render;
   DrawTime:= GetTickCount - StartTime;
   Inc(TimeCount, DrawTime);
   Inc(FrameCount);
  
   if TimeCount >= 1000 then begin
     Frames:= FrameCount;
     TimeCount:= TimeCount - 1000;
     FrameCount:= 0;
     Caption:= InttoStr(Frames) + 'FPS';
     ErrorHandler;
   end;
  
   Done:= false;
end;
 
procedure TForm1.ErrorHandler;
begin
  Form1.Caption:= gluErrorString(glGetError);
end;
 

procedure TForm1.Render;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
 
  Schlaeger;

  // alter code gehört zu Ball
  {glTranslatef(30, 0, 0);

  glBegin(GL_QUADS);
    glColor3f(0, 1, 0); glVertex3f(-1,1,-1); //lo
    glColor3f(0, 1, 0); glVertex3f(-1,-1,-1); //lu
    glColor3f(0, 1, 0); glVertex3f(1,-1,-1); //ru
    glColor3f(0, 1, 0); glVertex3f(1,1,-1);  //ro
  glEnd; }

 
  SwapBuffers(DC);
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
begin
 if Key = ord('W') then
  s1:= s1+5;

 if Key = ord('S') then
   s1:= s1-5;

 if Key = VK_UP then
  s2:= s2+5;

 if Key = VK_DOWN then
  s2:= s2-5;

 Render;
end;

procedure TForm1.Schlaeger;
begin
 //Spieler 1
 glTranslatef(-60, 0, 0);
 glTranslated (0, s1, 0);
 glBegin(GL_QUADS);
   glColor3f(0, 1, 0); glVertex3f(-1,1,-1); //lo
   glColor3f(0, 1, 0); glVertex3f(-1,-9,-1); //lu
   glColor3f(0, 1, 0); glVertex3f(1,-9,-1); //ru
   glColor3f(0, 1, 0); glVertex3f(1,1,-1); //ro
 glEnd;
 
// Spieler 2
 glTranslatef(30, 6, -50);
 glTranslated(0, s2, 0);
 glBegin(GL_QUADS);
   glColor3f(0, 1, 0); glVertex3f(-1,1,-1); //lo
   glColor3f(0, 1, 0); glVertex3f(-1,-9,-1); //lu
   glColor3f(0, 1, 0); glVertex3f(1,-9,-1); //ru
   glColor3f(0, 1, 0); glVertex3f(1,1,-1); //ro
 glEnd;
end;

end.
Habs mal getestet!
Also da ist einiges im argen Koordinaten usw..
Der linke Schläger wird aber jetzt gezeichnet wenn du die Tasten verwendest.

gruss

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

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

AW: OpenGL Pong

  Alt 24. Mär 2012, 14:14
Fach: Informatik GK
Thema: Die Verwendung von OpenGL unter Anwendung von "Pong".
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: OpenGL Pong

  Alt 24. Mär 2012, 14:16
Habe es nochmal editiert!
Als anfang sollte das reichen.

Lese bitte die Bemerkungen

gruss
  Mit Zitat antworten Zitat
acidrain

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

AW: OpenGL Pong

  Alt 24. Mär 2012, 14:44
Ich hab's zu Anfang mal umgesetzt, wie du es geschrieben hast. Natürlich selbst geschrieben und kein copy&paste
Also angezeigt wird immerhin der linke Schläger, nur bewegen tut er sich bei mir nicht, wenn ich W oder S drücke.
Trotzdem danke für soviel Hilfe! Ich schau da auch selber noch mehrmals drüber und benutze Tutorials zur Hilfe.


EDIT: Wäre es nicht um vieles einfacher, wenn ich einfach normale Panels nehmen würde und die dann mit OpenGL "anmale"?

Geändert von acidrain (24. Mär 2012 um 14:46 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: OpenGL Pong

  Alt 24. Mär 2012, 15:43
Habe mal das projekt angehängt..
Was aber seltsam ist das sich die beiden Schläger nicht trennen lassen.
Eigentlich sollte das mit glLoadIdentity(); machbar sein will aber aus irgendeinen grund nicht.
Liegt wohl daran das ich das projekt nicht komplett selbst geschrieben habe.

Sorry finde den fehler jetzt auf die schnelle nicht. Die Koordinaten stimmen aber.

Delphi-Quellcode:
procedure TForm1.Schlaeger;
begin
 //Spieler 1
 glLoadIdentity;
 glTranslatef(-60, 0, 0);
 glTranslated(0, s1, 0);
 glBegin(GL_QUADS);
   glColor3f(0, 1, 0); glVertex3f(-1,1,-1); //lo
   glColor3f(0, 1, 0); glVertex3f(-1,-9,-1); //lu
   glColor3f(0, 1, 0); glVertex3f(1,-9,-1); //ru
   glColor3f(0, 1, 0); glVertex3f(1,1,-1); //ro
 glEnd;

 //Spieler 2
 glLoadIdentity;
 glTranslatef(30, 6, -50);
 glTranslated(0, s2, 0);
 glBegin(GL_QUADS);
   glColor3f(0, 1, 0); glVertex3f(-1,1,-1); //lo
   glColor3f(0, 1, 0); glVertex3f(-1,-9,-1); //lu
   glColor3f(0, 1, 0); glVertex3f(1,-9,-1); //ru
   glColor3f(0, 1, 0); glVertex3f(1,1,-1); //ro
 glEnd;

end;
Macht keinen unterschied ob Form oder panel der einzige ist halt das man es nicht Resizen kann.
Schläger läßt sich bewegen

gruss

Geändert von EWeiss (25. Mär 2012 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz