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
 
acidrain

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

AW: OpenGL Pong

  Alt 24. Mär 2012, 12:53
Ich hab nichts zu verbergen
Hier ist alles:
Code:
unit uPong;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DGLOpenGL, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    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 GLDraw;
    procedure InitOpenGL;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
     StartTime, TimeCount, FrameCount : Cardinal;
     Frames, DrawTime                 : Cardinal;
  public
    DC: HDC;
    RC: HGLRC;
  end;

const
 NearClipping = 1;
 FarClipping = 1000;

var
  Form1: TForm1;
  Spieler1hoch: boolean;
  Spieler1runter: boolean;
  Spieler2hoch: boolean;
  Spieler2runter: boolean;
  s1, s2: Integer;

implementation

{$R *.dfm}

procedure TForm1.InitOpenGL;
begin
  // 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);
begin;

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; Schlaeger;
  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;

// 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
 Spieler1hoch := true;

 if Key = ord('S') then
 Spieler1runter := true;

if Key = VK_UP then
 Spieler2hoch := true;

if Key = VK_DOWN then
 Spieler2runter := true;
end;

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;

procedure TForm1.Schlaeger;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);
//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;

procedure TForm1.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();
 
  Schlaeger;

  // Update the display
  SwapBuffers(h_DC);
end;

end.
  Mit Zitat antworten Zitat
 


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 10:46 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