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

Aktuelle Zeit: Do Jul 17, 2025 21:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Einsteiger Tutorial
BeitragVerfasst: Fr Feb 03, 2006 18:23 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 18:20
Beiträge: 5
Hallo,

ich bin eben gerade in eine Tür geplatzt und dann stand ich in der Welt von OpenGL.
Leider funktioniert mein Tutorial nicht wirklich, ich habe das Prog so gemacht, wie es im Text steht,
aber ich seh leider nichts, warum? Muss ich außer der PAS-Datei noch irgendetwas laden?

Hier das Prog:
Code:
  1. unit uMainWindow;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, dglOpenGL;
  8.  
  9. type
  10.   TMainWindow = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure FormDestroy(Sender: TObject);
  13.     procedure FormShow(Sender: TObject);
  14.   private
  15.     { Private-Deklarationen }
  16.   public
  17.     { Public-Deklarationen }
  18.   end;
  19.  
  20. var
  21.   MainWindow: TMainWindow;
  22.   DC, RC: HDC;
  23.  
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TMainWindow.FormCreate(Sender: TObject);
  29. begin
  30.   InitOpenGL;
  31.   DC := GetDC(Handle);
  32.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  33.   ActivateRenderingContext(DC, RC);
  34.   glViewport(0, 0, ClientWidth, ClientHeight);
  35.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  36. end;
  37.  
  38. procedure TMainWindow.FormDestroy(Sender: TObject);
  39. begin
  40.   DestroyRenderingContext(RC);
  41.   ReleaseDC(Handle, DC);
  42. end;
  43.  
  44. procedure TMainWindow.FormShow(Sender: TObject);
  45. begin
  46.   glLoadIdentity;
  47.   glBegin(GL_TRIANGLES);
  48.   glColor3f(1, 0, 0); glVertex3f(-1,-1, 0);  
  49.   glColor3f(0, 0, 1); glVertex3f( 1,-1, 0);
  50.   glColor3f(0, 1, 0); glVertex3f( 0, 1, 0);
  51. glEnd;
  52. end;
  53.  
  54. end.

_________________
Grüße
Gerrit


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 03, 2006 18:25 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Bevor ich detailliert darauf eingehe, schnappe Dir lieber parallel dazu eines unserer Templates (z.B. das VCL http://www.delphigl.com/do_download.php?f=8) und gehe das einmal durch. Hat sich dein Problem erledigt oder gibt es noch Fragen? ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 03, 2006 18:26 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Hi Gerrit,

benutz doch die pascal-Tags. Die sind extra für sowas da ;) Dann kann man das besser lesen.

Du rufst deine Zeichen-Prozedur nur einmal auf, wenn dein Form aufgerufen wird. Setze es in eine Idle-Schleife ein, dann ist das Problem gelöst. Wie man das macht, kann jemand anderes erklären ^^ Bin grad zu faul ;)

Gruß,
Frase

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 03, 2006 18:36 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 18:20
Beiträge: 5
Es würde ja reichen, wenn es einmal gezeichnet würde, aber es passiert gar nichts, muss man erst ein SDK installieren oder so? :?:

_________________
Grüße
Gerrit


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 03, 2006 18:39 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Der Fehler in dem Code ist einfach ;)
Du renderst es zwar, gibst es aber nicht aus...
Code:
  1. SwapBuffers(DC);

fehlt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 03, 2006 18:43 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 18:20
Beiträge: 5
Ich seh leider noch immer nichts?!

_________________
Grüße
Gerrit


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 03, 2006 18:44 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Wie gesagt, lade Dir das Template runter und schaue es Dir an. Z.B. ist "onshow" in dem meisten Fällen der denkbar schlechteste Zeitpunkt um etwas zu zeichnen. Das OnIdyle oder ein Timer bietet sich hier meist eher an. Grob überflogen fehlt bei Dir die Übergabe des Ganzen an die Ausgabe:
Code:
  1. SwapBuffers(DC);

Aber wie gesagt, bei obigen Link findest Du eine fertige Vorlage bei der man sieht, wie man OpenGL auf Basis der VCL verwenden kann. Da Du scheinbar ja bereits die Header von uns hast, sollte das Template lauffähig sein. Die SDK ist hierfür nicht von Nöten. Es handelt sich dabei um einen Installer der gängige Header und Beispiele installiert. Diese sollen Einsteigern jedoch nur dabei helfen einen Einstieg in die Materie zu finden und zu verhindern, dass diese sich alles einzelnd zusammensuchen müssen. Es ist keine SDK im Sinne jener die Du bei DirectX von MS beziehst.
//edit: Ich brauche scheinbar zu lange zum tippen *sg ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 04, 2006 16:23 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ein Blick in das Quickstart-Tutorial sollte dir vielleicht auch weiterhelfen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 04, 2006 22:22 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
tstststs... Phobeus... Flash... tststs... Hätte nie gedacht, dass ich das noch mal erlebe, dass hier jemand das rtfm!-Schild hochhält...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 04, 2006 23:48 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Ja aber sie haben doch recht. Sollen wir jedem einzeln erklähren, dass sie die Buffer swappen müssen, das sie nicht in OnShow zeichnen sollen, und dass man auf das Einstellen der Betrachtungs und Projektionsmatrizen nicht verzichten sollte?

Dafür sind doch die Tuts da, damit dass nicht für jeden erklährt werden muss...

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 05, 2006 00:33 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
ja schon ;) Ist klar.

Hier wurde nur mal kürzlich geschrieben, dass auch dem dümmsten n00b alles erklärt wird, selbst wenn die Frage vorher schon tausendmal gestellt wurde... Ohne rtfm! ;)

Die Zeiten ändern sich eben...
Aber es geschieht ja zu einem guten Zweck. Und sollte es auch nur der sein, dass Phobeus wieder ein kleines bisschen mehr Zeit hat, so ist es das wert 8)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 05, 2006 16:14 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 18:20
Beiträge: 5
Man sollte doch aber, wenn dies Problem oder diese Frage öfters auftritt, vielleicht dieses AUCH im Tutorial selbst vermerken oder? :?:

_________________
Grüße
Gerrit


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 05, 2006 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Das mit den Swap Buffers ist auf alle Fälle vermerkt:

Quickstart hat geschrieben:
Zeile 21: SwapBuffers sorgt Ihr dafür, dass der Inhalt des Framebuffers auf dem Bildschirm erscheint. Ohne diesen Befehl seht Ihr gar nichts von OpenGL. (Interessanter Artikel dazu: Doppelpufferung)


Zu den Matrizen steht es zwar drin, ist aber nicht so wirklich deutlich das man sie unbedingt braucht:

Quickstart hat geschrieben:
Zeile 5/9: Hier seht Ihr 2 der 3 möglichen Matrixmodi. GL_PROJECTION wird benutzt um nachfolgend die OpenGL-Ausgabe zu manipulieren, GL_MODELVIEW benutzt man um OpenGL mit Daten zu füttern.


cya
Deathball


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 07, 2006 20:27 
Offline
DGL Member

Registriert: Di Feb 07, 2006 20:22
Beiträge: 27
Genau das Problem habe ich auch. Leider hat bisher nichts zur Lösung beigetragen, auch das Template konnte mir nicht helfen. Das Programm lässt sich fehlerfrei kompilieren, allerdings bliebt der Bildrschirm grau und kein fesches Dreickeck erscheint. Bitte schaut es euch mal an:
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 FormDestroy(Sender: TObject);
  14.     procedure Render;
  15.     procedure OnIdle;
  16.   private
  17.     { Private declarations }
  18.  
  19.   public
  20.     { Public declarations }
  21.   end;
  22.  
  23. var
  24.   Form1: TForm1;
  25.   DC, RC :HDC;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TForm1.FormCreate(Sender: TObject);
  32. begin
  33. InitOpenGL;//OpenGl wird Initialisiert, folgenden 2 Zeilen werde immer grbraucht
  34. DC:=GetDC(Handle);
  35. RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  36. ActivateRenderingContext(DC, RC);
  37. glClearColor(0.3, 0.4, 0.7, 0.0);
  38. end;
  39.  
  40. procedure TForm1.FormDestroy(Sender: TObject);
  41. begin
  42. DeactivateRenderingContext;
  43. DestroyRenderingContext(RC);
  44. ReleaseDC(Handle,DC);
  45. end;
  46.  
  47. procedure TForm1.Render;
  48. begin
  49.   glMatrixMode(GL_PROJECTION);
  50.   glLoadIdentity;
  51.   glViewport(0, 0, ClientWidth, ClientHeight);
  52.   gluPerspective(60, ClientWidth/ClientHeight,1, 128);
  53.   glMatrixMode(GL_Modelview);
  54.   glLoadIdentity;
  55.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  56.   glTranslatef(-1.5, 0,-6);
  57.   glBegin(GL_TRIANGLES);
  58.   glColor3f(1, 0, 0); glVertex3f(-1,-1, 0);  
  59.   glColor3f(0, 0, 1); glVertex3f( 1,-1, 0);
  60.   glColor3f(0, 1, 0); glVertex3f( 0, 1, 0);
  61. glEnd;
  62. SwapBuffers(DC);
  63. end;
  64.  
  65. procedure TForm1.Onidle;
  66. begin
  67. Render;
  68. end;
  69. end.
  70.  


Bitte helft mir!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 07, 2006 20:35 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Wann soll den TForm1.onIdle aufgerufen werden?
Bzw. wann sagst du VCL, dass es die Procedure dafür benutzen soll?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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