Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 22:14

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Feb 13, 2006 20:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jan 24, 2006 16:26
Beiträge: 25
hi,

ich bin gerade dabei nen Prong oder Pong Spiel zu machen(2 Balken und nen Ball dazwischen). Der Ball oder Kreis läuft schon bloß ab 3/4 des Fensters sieht man ihn nicht mehr....kommt aber wieder wenn er abgeprallt ist...Beim linken und unteren rand des Formulares klappt das auch schon mit dem abprallen bloß oben und rechts nicht, weil ich ja nicht alles sehen kann !? Das Fenster hat überall die gleiche hintergrund farbe aber als wenn es da ein bereich gibt wo er einfach aufhört zu zeichen komisch!? Ich hoffe ich habe die wichtigsten prozeduren herausextrahiert...

Code:
  1.  
  2. procedure TForm1.SetupGL;
  3. begin
  4.   glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe
  5.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  6.   glDisable(GL_CULL_FACE);          //Backface Culling deaktivieren, sonst Objekte transparent
  7. end;
  8.  
  9. procedure TForm1.FormResize(Sender: TObject);
  10. var tmpBool : Boolean;
  11. begin
  12.   glViewport(0, 0, 480, 640);  //spannt die Fläche(640x480 Pixel) auf
  13.   glMatrixMode(GL_PROJECTION);   //wählt MatrixMode = Projektion aus....
  14.   glLoadIdentity;                //setzt die Worldmatrix auf (0,0,0)
  15.   glOrtho(0,480,0,640, 0,128);   //es wird mit glortho nur im 2D Bereich gearbeitet
  16.  
  17.   glMatrixMode(GL_MODELVIEW);    //man geht über in die Modelviewansicht
  18.   glLoadIdentity;                //wiederum Worldmatrix auf (0,0,0), weil andere Matrix
  19.   IdleHandler(Sender, tmpBool);  //??
  20. end;
  21.  
  22.  
  23. procedure TForm1.Render;
  24. var i:integer;
  25. begin
  26.   //Grundinitialisierung von OpenGL beim Rendern(Zeichnen)
  27.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  //Farbpuffer und Tiefenpuffer lehren; ist wie ein refresh bei Timer
  28.  
  29.   glMatrixMode(GL_PROJECTION);    //bestimmt den MatrixMode = Projektion
  30.   glLoadIdentity;                 //setzt die Worldmatrix auf (0,0,0)
  31.   glViewport(0,0,480,640); //spannt die Fläche auf
  32.   glOrtho(0,480,0,640, 0,256);  //sagt das nur in 2D gearbeitet wird(z-Koordinate wird vernachlässigt)
  33.  
  34.   glMatrixMode(GL_MODELVIEW);
  35.   //Ende Renderinitialisierung
  36.  
  37.   //Pfeiltasten belegen und Kontrolle ob nicht über den Rand hinaus...
  38.   if GetAsyncKeyState(vk_left) < 0 then
  39.     if btn_spieler.left-1>=0 then
  40.       btn_spieler.Left:=btn_spieler.Left-1
  41.     else
  42.       btn_spieler.Left:=0;
  43.   if GetAsyncKeyState(vk_right) < 0 then
  44.     if btn_spieler.left+1<=form1.Width-btn_spieler.Width-6 then
  45.       btn_spieler.left:=btn_spieler.Left+1
  46.     else
  47.       btn_spieler.Left:=form1.Width-btn_spieler.Width-6;
  48.   //Ende Pfeiltastenkontrolle
  49.   {---Kugel zeichnen---}
  50.   glBegin(GL_TRIANGLE_FAN);
  51.      for i:=0 to 150 do   //Anzahl der Punkte
  52.        glVertex2f(Sin(2*Pi/150*i)*r+xm,Cos(2*Pi/150*i)*r+ym); //Eine kugel zeichnen
  53.   glEnd;
  54.       xm:=xm+vx;    //Bewegung in die Sache bringen
  55.       ym:=ym+vy;
  56.   {---bei Randberührung---}
  57.       if xm+Sin(2*Pi/150*i)*r>=Form1.ClientWidth then //Rechts Rand
  58.         vorz_wechsel_vx;
  59.       if ym+Cos(2*Pi/150*i)*r>=Form1.ClientHeight then  //Oben Rand
  60.         vorz_wechsel_vy;
  61.       if xm-Sin(2*Pi/150*i)*r<=0 then  //links rand
  62.         vorz_wechsel_vx;
  63.       if ym-Cos(2*Pi/150*i)*r<=0 then  //unten Rand =
  64.         vorz_wechsel_vy;
  65.  
  66.       SwapBuffers(DC);
  67. end;
  68.  
  69.  


thx für die antworten


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 21:02 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Ändere das:
Code:
  1. procedure TForm1.FormResize(Sender: TObject);
  2. var tmpBool : Boolean;
  3. begin
  4.   glViewport(0, 0, 480, 640);  //spannt die Fläche(640x480 Pixel) auf
  5.   glMatrixMode(GL_PROJECTION);   //wählt MatrixMode = Projektion aus....
  6.   glLoadIdentity;                //setzt die Worldmatrix auf (0,0,0)
  7.   glOrtho(0,480,0,640, 0,128);   //es wird mit glortho nur im 2D Bereich gearbeitet
  8.  
  9.   glMatrixMode(GL_MODELVIEW);    //man geht über in die Modelviewansicht
  10.   glLoadIdentity;                //wiederum Worldmatrix auf (0,0,0), weil andere Matrix
  11.   IdleHandler(Sender, tmpBool);  //??
  12. end;
zu das:
Code:
  1. procedure TForm1.FormResize(Sender: TObject);
  2. var tmpBool : Boolean;
  3. begin
  4.   glViewport(0, 0, Width, Height);  //spannt die Fläche(640x480 Pixel) auf
  5.   glMatrixMode(GL_PROJECTION);   //wählt MatrixMode = Projektion aus....
  6.   glLoadIdentity;                //setzt die Worldmatrix auf (0,0,0)
  7.   glOrtho(0,Width,0,Height, -10, 10);   //es wird mit glortho nur im 2D Bereich gearbeitet
  8.  
  9.   glMatrixMode(GL_MODELVIEW);    //man geht über in die Modelviewansicht
  10.   glLoadIdentity;                //wiederum Worldmatrix auf (0,0,0), weil andere Matrix
  11.   IdleHandler(Sender, tmpBool);  //??
  12. end;
und das probiere es mal.

EDIT:
In Render Procedure, lösche folgendes:
Code:
  1.   glMatrixMode(GL_PROJECTION);    //bestimmt den MatrixMode = Projektion
  2.   glLoadIdentity;                 //setzt die Worldmatrix auf (0,0,0)
  3.   glViewport(0,0,480,640); //spannt die Fläche auf
  4.   glOrtho(0,480,0,640, 0,256);  //sagt das nur in 2D gearbeitet wird(z-Koordinate wird vernachlässigt)
  5.  
  6.   glMatrixMode(GL_MODELVIEW);
  7.   //Ende Renderinitialisierung
  8.  


Das Problemm liegt vermutlich daran, dass den Viewport kleiner ist als die Dimensionen der Form.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 21:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jan 24, 2006 16:26
Beiträge: 25
hi,

mh leider hat es nicht geklappt was du geschrieben hast. denn jetzt sehe ich noch nicht einmal meinen kreis der rumfliegt?!


mfg juKx


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Feb 13, 2006 21:36 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Code:
  1. procedure TForm1.FormResize(Sender: TObject);
  2. //var tmpBool : Boolean;
  3. begin
  4.   glViewport(0, 0, Width, Height);  //spannt die Fläche(640x480 Pixel) auf
  5.   glMatrixMode(GL_PROJECTION);   //wählt MatrixMode = Projektion aus....
  6.   glLoadIdentity;                //setzt die Worldmatrix auf (0,0,0)
  7.   glOrtho(0,Width,0,Height, -10,10);   //es wird mit glortho nur im 2D Bereich gearbeitet
  8.  
  9.   glMatrixMode(GL_MODELVIEW);    //man geht über in die Modelviewansicht
  10.   glLoadIdentity;                //wiederum Worldmatrix auf (0,0,0), weil andere Matrix
  11.   //IdleHandler(Sender, tmpBool);  //??
  12. end;
  13.  
und
Code:
  1. procedure TForm1.Render;
  2. var i:integer;
  3. begin
  4.   FormResize(nil); // na ja <!-- s:( --><img src=\"{SMILIES_PATH}/icon_sad.gif\" alt=\":(\" title=\"Sad\" /><!-- s:( -->
  5.  
  6.   //Grundinitialisierung von OpenGL beim Rendern(Zeichnen)
  7.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  //Farbpuffer und Tiefenpuffer lehren; ist wie ein refresh bei Timer
  8.  
  9.   //Pfeiltasten belegen und Kontrolle ob nicht über den Rand hinaus...
  10.   if GetAsyncKeyState(vk_left) < 0 then
  11.     if btn_spieler.left-1>=0 then
  12.       btn_spieler.Left:=btn_spieler.Left-1
  13.     else
  14.       btn_spieler.Left:=0;
  15.   if GetAsyncKeyState(vk_right) < 0 then
  16.     if btn_spieler.left+1<=form1.Width-btn_spieler.Width-6 then
  17.       btn_spieler.left:=btn_spieler.Left+1
  18.     else
  19.       btn_spieler.Left:=form1.Width-btn_spieler.Width-6;
  20.   //Ende Pfeiltastenkontrolle
  21.   {---Kugel zeichnen---}
  22.   glBegin(GL_TRIANGLE_FAN);
  23.      for i:=0 to 150 do   //Anzahl der Punkte
  24.        glVertex2f(Sin(2*Pi/150*i)*r+xm,Cos(2*Pi/150*i)*r+ym); //Eine kugel zeichnen
  25.   glEnd;
  26.       xm:=xm+vx;    //Bewegung in die Sache bringen
  27.       ym:=ym+vy;
  28.   {---bei Randberührung---}
  29.       if xm+Sin(2*Pi/150*i)*r>=Form1.ClientWidth then //Rechts Rand
  30.         vorz_wechsel_vx;
  31.       if ym+Cos(2*Pi/150*i)*r>=Form1.ClientHeight then  //Oben Rand
  32.         vorz_wechsel_vy;
  33.       if xm-Sin(2*Pi/150*i)*r<=0 then  //links rand
  34.         vorz_wechsel_vx;
  35.       if ym-Cos(2*Pi/150*i)*r<=0 then  //unten Rand =
  36.         vorz_wechsel_vy;
  37.  
  38.       SwapBuffers(DC);
  39. end;

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 21:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jan 24, 2006 16:26
Beiträge: 25
hi,

großes danke jetzt klappt es...aber was ist das mit dem "nil" das versteh ich nicht..gibt es jetzt nachteile oder muss ih sonst noch was beachten??

mfg juKx


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 10:26 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Solange Du im FormResize nicht auf den Sender zugreifst, hast Du keine Probleme ... wenn Du zugreifen musst, dann prüfe vorher, ob er gültig ist:
Code:
  1. If Assigned(Sender)

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]