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

Aktuelle Zeit: So Jul 13, 2025 16:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zum Quickstart Tutorial
BeitragVerfasst: Mi Sep 07, 2005 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Ok. Ich hab mir das Quickstart Tutorial durchgelesen. Dann hab ich den Code eingetippt:
Code:
  1. unit Quickstart;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, DGLOpenGL;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  13.     procedure FormResize(Sender: TObject);
  14.     procedure FormDestroy(Sender: TObject);
  15.   private
  16.     { Private-Deklarationen }
  17.     StartTime, TimeCount, FrameCount: Cardinal;       //der FrameCounter
  18.     Frames, DrawTime                : Cardinal;       //TimeBased Movement
  19.     procedure SetupGL;
  20.     procedure Render;
  21.     procedure ErrorHandler;
  22.   public
  23.     { Public-Deklarationen }
  24.     DC  : HDC;                                        //Handle auf Zeichenfläche
  25.     RC  : HGLRC;                                      //Rendering Context
  26.   end;
  27.  
  28. var
  29.   Form1: TForm1;
  30.  
  31. const
  32.  NearClipping = 1;
  33.  FarClipping = 1000;
  34.  
  35.  
  36. implementation
  37.  
  38. {$R *.dfm}
  39.  
  40. procedure TForm1.FormCreate(Sender: TObject);
  41. begin
  42.  DC := GetDC(Handle);
  43.  if not InitOpenGL then Application.Terminate;
  44.  RC := CreateRenderingContext(DC,
  45.                  [opDoubleBuffered],
  46.                  32,
  47.                  24,
  48.                  0,0,0,
  49.                  0);
  50.  ActivateRenderingContext(DC, RC);
  51.  SetupGL;
  52.  
  53. end;
  54.  
  55. procedure TForm1.SetupGL;
  56. begin
  57.  glClearColor(0.3, 0.4, 0.7, 0.0);                    //Hintergrundfarbe
  58.  glEnable(GL_DEPTH_TEST);                             //Tiefentest aktivieren
  59.  glEnable(GL_CULL_FACE);                              //Backface Culling aktivieren
  60. end;
  61.  
  62. procedure TForm1.FormResize(Sender: TObject);
  63. var Done: Boolean;
  64. begin
  65.  glViewport(0, 0, ClientWidth, ClientHeight);
  66.  glMatrixMode(GL_PROJECTION);
  67.  glLoadIdentity;
  68.  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  69.  
  70.  glMatrixMode(GL_MODELVIEW);
  71.  glLoadIdentity;
  72.  IdleHandler(Sender, Done);
  73. end;
  74.  
  75. procedure TForm1.FormDestroy(Sender: TObject);
  76. begin
  77.  DeactivateRenderingContext;
  78.  DestroyRenderingContext(RC);
  79.  ReleaseDC(HAndle, DC);
  80. end;
  81.  
  82. procedure TForm1.Render;
  83. begin
  84.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  85.  
  86.  glMatrixMode(GL_PROJECTION);
  87.  glLoadIdentity;
  88.  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  89.  
  90.  glTranslatef(0, 0, -5);
  91.  
  92.  glMatrixMode(GL_MODELVIEW);
  93.  glLoadIdentity;
  94.  
  95.  glBegin(GL_QUADS);
  96.   glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
  97.   glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
  98.   glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
  99.   glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
  100.  glEnd;
  101.  
  102.  SwapBuffers(DC);
  103. end;
  104.  
  105. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  106. begin
  107.  StartTime := GetTickCount;
  108.  Render;
  109.  DrawTime := GetTickCount - StartTime;
  110.  Inc(TimeCount, DrawTime);
  111.  Inc(FrameCount);
  112.  
  113.  if TimeCount >= 1000 then begin
  114.   Frames := FrameCount;
  115.   TimeCount := TimeCount - 1000;
  116.   FrameCount := 0;
  117.   Caption := IntToStr(Frames) + 'FPS';
  118.   ErrorHandler;
  119.  end;
  120.  
  121.  sleep(5);
  122.  Done := false;
  123. end;
  124.  
  125. procedure TForm1.ErrorHandler;
  126. begin
  127.  Form1.Caption := gluErrorString(glGetError);
  128. end;
  129.  
  130.  
  131. end.


Tja, danach hab ich das ganze ausprobiert:
Bild

Sollte da nicht eigentlich mal zumindest ein schwarzes/dunkles Fenster sein, statt dem normal grauen? Und auch das "noError" als Formularname vermisse ich irgendwie.

Ich hab allein versucht den Fehler zu finden, aber ich sehe ihn nicht. Kann mir einer von euch sagen wo mein Fehler ist?

cya
Deathball

PS: Noch ne Frage die mir grad einfällt - das Quickstart Tutorial benutzt ja die DGLOpenGL.pas, Lektion 2 hingegen die OpenGL12 und die Geometry.pas ! Sind die Unterschiede zwischen denen und der DGLOpenGL.pas groß bzw. worin liegen die Unterschiede beim coden?
Ich nehme mal an das ich um die OpenGL12 und die Geometry.pas downloads nicht herumkomme, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 07, 2005 19:20 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Versuche das hinzuzufühgen :
Code:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3.  DC := GetDC(Handle);
  4.  if not InitOpenGL then Application.Terminate;
  5.  RC := CreateRenderingContext(DC,
  6.                  [opDoubleBuffered],
  7.                  32,
  8.                  24,
  9.                  0,0,0,
  10.                  0);
  11.  ActivateRenderingContext(DC, RC);
  12.  SetupGL;
  13.  Application.OnIdle := IdleHandler; // <<--- DAS HIER
  14. end;

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 07, 2005 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Danke! Das war die Lösung.

Aber noch ne andere Frage:
Ich hab einen Haltepunkt bei dem Resize-Teil gesetzt. Danach hab ich die Größe des Fensters bzw. des Formulars geändert, aber der Haltepunkt ist nicht angesprungen.
Woran liegt das?


cya
Deathball


edit:
Zitat:
hast du überprüft, ob die resizefunktion den resize event des formulars zugeordnet ist

Danke, werde ich morgen gleich mal überprüfen...


Zuletzt geändert von Deathball am Mi Sep 07, 2005 19:47, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 07, 2005 19:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
soweit ich das sehe wird der idle code nur bei form.resize aufgerufen. Daran sollte es liegen. Versuch mal im create das hier einzufügen:
Code:
  1.  application.onidle := idlehandler;


zur opengl12: die wurde von Mark lieske geschrieben, ist etwas inaktueller als die delphigl.pas und ist zB hier zu finden: http://www.lischke-online.de/OpenGL12.php

edit : oh etwas spät.
hast du überprüft, ob die resizefunktion den resize event des formulars zugeordnet ist


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 07, 2005 22:01 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@"Application.OnIdle := IdleHandler;" : Wurde entsprechend geändert

@"Verschiedene Header" : Was ist denn das für eine S*****e!? Ich dachte die Tutorials wurden auf den neuesten stand gebracht? Oder hast du die von der Seite gelesen und nicht die neue Version im Wiki?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 16:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Ähem... *hüstel*... ...mehr oder weniger mein Fehler...

Ich hab mich noch gar nicht richtig tiefgehend mit den Wiki Tutorials beschäftigt. Überflogen ja, aber noch nicht ausprobiert.
Ich meinte oben die BeispielCodes für die VCL-Variante von Letkion 2, in die ich aus Neugier schonmal reingeschaut hab. Die benutzt die OpenGL12 und die Geometry.


cya,
Deathball

edit: das Tutorial aus dem Wiki-Teil funktioniert mit dem DGLOpenGL-Header...


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: 0 Mitglieder und 10 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.008s | 14 Queries | GZIP : On ]