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

Aktuelle Zeit: Do Jul 10, 2025 18:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zum Quickstart Tutorial
BeitragVerfasst: Fr Jun 16, 2006 21:02 
Offline
DGL Member

Registriert: Do Jun 15, 2006 13:41
Beiträge: 4
Huhu,
Ich habe mir gestern das Quickstart Tutorial durchgelesen! Erstmal ein großes Lob dafür, dass ihr sowas reinstellt und es ermöglicht, sich dadurch Wissen anzueignen!
Vielen Dank!
Ich hab alles schön abgetippt, jedoch ging es nicht und nachdem ich copy und past gemacht habe, kommt leider auch immer nur das leere Fomular!
Das einzige was angezeigt wird, ist die Framerate.
Das mit der INIT Prozedure funktioniert auch nicht!

E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.Init'

Und so sieht meine Unit aus:


Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglOpenGL;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  14.     procedure FormResize(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.   private    { Private-Deklarationen }
  17.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  18.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  19.     procedure SetupGL;
  20.    //procedure Init;     {Funktioniert nicht}
  21.     procedure Render;
  22.     procedure ErrorHandler;
  23.   public    { Public-Deklarationen }
  24.     DC                                : HDC;  //Handle auf Zeichenfläche
  25.     RC                                : HDC;
  26.   end;
  27.  
  28. var
  29.   Form1: TForm1;
  30. const
  31.   NearClipping = 1;
  32.   FarClipping  = 1000;
  33. implementation
  34.  
  35. {$R *.dfm}
  36.  
  37. procedure TForm1.FormCreate(Sender: TObject);
  38. var RC, DC:HDC;
  39. begin
  40.   InitOpenGL;
  41.   DC:= GetDC(Handle);
  42.   RC:= CreateRenderingContext( DC,[opDoubleBuffered],32,24,0,0,0,0);
  43.   ActivateRenderingContext(DC, RC);
  44.   SetupGL;
  45.   //Init;
  46.  
  47.   Application.OnIdle := IdleHandler;
  48. end;
  49.  
  50. procedure TForm1.SetupGL;
  51. begin
  52.   glClearColor(0, 100, 0, 0); //Hintergrundfarbe
  53.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  54.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  55. end;
  56.  
  57. procedure TForm1.FormResize(Sender: TObject);
  58. var tmpBool : Boolean;
  59. begin
  60.   glViewport(0, 0, ClientWidth, ClientHeight);
  61.   glMatrixMode(GL_PROJECTION);
  62.   glLoadIdentity;
  63.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);    
  64.  
  65.   glMatrixMode(GL_MODELVIEW);
  66.   glLoadIdentity;
  67.   IdleHandler(Sender, tmpBool);
  68. end;
  69.  
  70. procedure TForm1.FormDestroy(Sender: TObject);
  71. begin
  72.   DeactivateRenderingContext;
  73.   DestroyRenderingContext(RC);
  74.   ReleaseDC(Handle, DC);
  75. end;
  76.  
  77. procedure TForm1.Render;
  78. begin
  79.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  80.  
  81.   glMatrixMode(GL_PROJECTION);
  82.   glLoadIdentity;
  83.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  84.  
  85.   glMatrixMode(GL_MODELVIEW);
  86.   glLoadIdentity;
  87.  
  88.   glTranslatef(0, 0, -15);
  89.  
  90.   glBegin(GL_QUADS);
  91.     glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
  92.     glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
  93.     glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
  94.     glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
  95.   glEnd;
  96.  
  97.   SwapBuffers(DC);
  98. end;
  99.  
  100. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  101. begin
  102.   StartTime:= GetTickCount;
  103.   Render;
  104.   DrawTime:= GetTickCount - StartTime;
  105.   Inc(TimeCount, DrawTime);
  106.   Inc(FrameCount);
  107.  
  108.   if TimeCount >= 1000 then begin
  109.     Frames:= FrameCount;
  110.     TimeCount:= TimeCount - 1000;
  111.     FrameCount:= 0;
  112.     ErrorHandler; // Habe ich gedreht, sonst steht immernur 'NO Error'
  113.     Caption:= InttoStr(Frames) + 'FPS';  //Wird angezeigt!
  114.  
  115.   end;
  116.  
  117.   Done:= false;
  118. end;
  119.  
  120. procedure TForm1.ErrorHandler;
  121. begin
  122.   Form1.Caption := gluErrorString(glGetError);
  123. end;
  124. end.
  125.  


Es wäre schön, wenn ihr mir sagen würdet, was ich falsch gemacht habe vieleicht!
Ich habe nicht gleich hier geschrieben, sondern erst gesucht, habe jedoch nichts passendes gefunden!
Schon mal im vorraus vielen Dank!
mfg night


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 16, 2006 22:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 17, 2005 13:19
Beiträge: 98
Wohnort: Jahnsdorf
Der Quelltext für die Init-Prozedur fehlt in deiner Unit im Implementation-Abschnitt. Daher will Delphi das nicht compilieren, weil er nicht weiß, was er dort ausführen soll. Schau einfach noch mal im Tut nach, wo die Init-Prozedur behandelt wird und bau den dort gezeigten Source noch unten in die Unit mit ein. Danach sollte es gehen (mit entsprechender Procedure TForm1.Init ;-))

_________________
Administrator of Project Omorphia
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 17, 2006 07:56 
Offline
DGL Member

Registriert: Do Jun 15, 2006 13:41
Beiträge: 4
Danke für deine Antwort, aber ich finde nicht das, was du meinst.
Das einzige was im TUT dazu steht ist:

Außerdem hat man ja hin und wieder auch noch globale Variablen, die man initialisieren möchte. Da wir mit solchen Sachen unser schön aufgeräumtes FormCreate nicht zumüllen wollen bietet sich ein Unterprogramm namens InitGlobals oder kurz Init an. Beide Unterprogramme (SetupGL und Init) sollten am Ende von FormCreate gerufen werden.

Könnest du mir evt eine passende Unit dazu geben, damit ich weiß wie das aufgebaut ist, weil das einzige was bei mir ausgegeben ist, ist das leere graue Formular.

mfg night


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 17, 2006 14:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 17, 2005 13:19
Beiträge: 98
Wohnort: Jahnsdorf
So, wie ich deinen Source jetzt überfliege, können die von Dir bereits auskommentierten Zeilen 20 und 45 in diesem speziellen Fall entfallen.

Solltest Du z.B. irgendwann einmal zusätzliche Dinge (wie das Laden von Texturen, VBOs oder anderen umfangreicheren Dingen) vorhaben, so müsstest Du aus den Zeilen 20 und 45 die Kommentarzeichen entfernen und dann unterhalb von Procedure TForm1.SetupOpenGL eine Routine wie diese ergänzen:

Code:
  1. procedure TForm1.Init;
  2. begin
  3.     //Hier würden dann die zusätzlichen Aufgaben für das Laden deiner Texturen reingehören.
  4. end;


Schau Dir doch diesbezüglich am besten auch einmal http://christian-stelzmann.de/index_tut ... hkurs.html mit an. Das sollte noch ein paar weitere Erklärungen zum Thema liefern.

_________________
Administrator of Project Omorphia
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 20, 2006 19:01 
Offline
DGL Member

Registriert: Do Jun 15, 2006 13:41
Beiträge: 4
danke, ich habe mir den Crash Kurs durchgelesen. Der war aber mehr zu Delphi, als zu OpenGl....

Ich kapier nur nicht, warum bei mir kein Viereck ausgegeben wird, sondern nur ein graues Formular. Ich hab alles so gemacht, wie im Tut beschrieben wurde....
kann das evt daran liegen, dass ich Delphi 2005 benutze ...

mfg night


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zum Quickstart Tutorial
BeitragVerfasst: Di Jun 20, 2006 22:37 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ok, ich habe den Fehler gefunden :evil: Darf ich klatschen?

Deine FormCreate:
Code:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var RC, DC:HDC;
  3. begin
  4.   InitOpenGL;
  5.   DC:= GetDC(Handle);
  6.  

Die FormCreate aus dem Tutorial
Code:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3.   InitOpenGL;
  4.   DC:= GetDC(Handle);


Du hast RC & DC nochmal deklariert...
Dadurch werden nur die Lokalen initialisiert und nicht die aus TForm1, daher geht jeder Aufruf von Swapbuffers(DC) ins Leere.

Auch sollten es andere Typen sein:
Code:
  1.     RC        : HGLRC;
  2.     DC        : HDC;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 21, 2006 13:00 
Offline
DGL Member

Registriert: Do Jun 15, 2006 13:41
Beiträge: 4
Klasse, vielen Dank! Mann bin ich blöd, dass ich das übersehen habe...
Aso Danke für euere Gedult ;)

mfg night


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.013s | 14 Queries | GZIP : On ]