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

Aktuelle Zeit: Fr Jul 04, 2025 08:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Jan 03, 2013 11:56 
Offline
DGL Member

Registriert: Do Jan 03, 2013 04:07
Beiträge: 4
Programmiersprache: AutoIt, Delphi
Hallo,

als neuling in diesem Forum möchte ich noch kurz ein großes Lob an alle fleißigen Tutorial schreiber aussprechen, die es mir und sicherlich auch sehr vielen vor mir ermöglichen, auf eine bequeme Art und Weise OpenGL zu erlernen :)

Nun zu meinem Problem. Ich habe mich durch die Tutorial Lektionen 1 & 2 von Phobeus gearbeitet, und trotz intensiver Überlegungen und herumprobiererei es nicht geschafft, mein OpenGL so zu initialisieren, dass danach die Form1 einen schwarzen Hintergrund hat ich darauf zeichnen kann.

mein Code sieht so aus
Code:
  1. unit Unit3;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs,dglOpenGl,SDL,easySDL;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure FormDestroy(Sender: TObject);
  13.     procedure FormResize(Sender: TObject);
  14.   private
  15.     { Private declarations }
  16.   public
  17.     { Public declarations }
  18.   end;
  19.  
  20. var
  21.   Form1: TForm1;
  22.   DC, RC:HDC;
  23.  
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28.  
  29.  
  30. procedure TForm1.FormCreate(Sender: TObject);
  31. begin
  32.   InitOpenGL;
  33.   DC:=GetDC(Handle);
  34.   RC:=CreateRenderingContext(DC, //Device Contest
  35.                              [opDoubleBuffered], //Optionen
  36.                              32, //Color Bits
  37.                              24, //ZBits
  38.                              0,  //Stencil Bits
  39.                              0,  //AccumBits
  40.                              0,  //AuxBuffers
  41.                              0); //Layer
  42.   ActivateRenderingContext(DC, RC);
  43.  
  44.   glMatrixMode(GL_PROJECTION);
  45.     glLoadIdentity;
  46.     gluPerspective(60, ClientWidth/ClientHeight, 0.1, 100);
  47.     glMatrixMode(GL_MODELVIEW);
  48.  
  49.   //Begin der Zeichenversuche
  50.  
  51.   glClear(GL_Color_Buffer_Bit or GL_DEPTH_bUFFER_BIT);
  52.   glClearColor(0.0,0.0,0.0,0.5);
  53.   glLoadIdentity;
  54.   glTranslatef(-1.5, 0,-6);
  55.  
  56.   glBegin(GL_TRIANGLES);
  57.   glVertex3f(-1,-1, 0);
  58.   glVertex3f( 1,-1, 0);
  59.   glVertex3f( 0, 1, 0);
  60.     glEnd;
  61. end;
  62.  
  63. procedure TForm1.FormDestroy(Sender: TObject);
  64. begin
  65.   ReleaseDC(Handle,DC);
  66.   DestroyRenderingContext(RC);
  67. end;
  68.  
  69. procedure TForm1.FormResize(Sender: TObject);
  70. begin
  71.   glViewport(0, 0, ClientWidth, ClientHeight);
  72. end;
  73.  
  74. end.


PS: Ich denke das dieses Problem hier öfter auftaucht, konnte nur noch keinen Thread finden, der es behandelt.
PPS: OpenGL funktioniert natürlich tadellos und wenn ich mir die Beispieldateien lade funktionieren auch diese. Ich versteh bloß nicht, was an meiner Variante so viele Probleme verursacht


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 03, 2013 12:47 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Du zeichnest in den Backbuffer... und noch mal in den Backbuffer... und nochmal...
Aber: du zeigst immer nur den Frontbuffer an.
Du musst das gezeichnete noch mit SwapBuffers(DC); als "fertig" deklarieren.

MfG Yoda

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 03, 2013 12:56 
Offline
DGL Member

Registriert: Do Jan 03, 2013 04:07
Beiträge: 4
Programmiersprache: AutoIt, Delphi
Vielen Dank für den Tip.

Es funktioniert nun :)


Zuletzt geändert von donald am Do Jan 03, 2013 13:20, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 03, 2013 13:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde erstmal das Zeichnen in einen Timer oder in Application.OnIdle auslagern. Beim FormCreate zu zeichnen ist risky – der Inhalt kann schnell überschrieben werden, z.B. wenn das fenster endgültig angezeigt wird (im FormCreate ist das Fenster noch nicht sichtbar).

Dann ist der Hinweis mit SwapBuffers wirklich wichtig. Wenn das fehlt, siehst du nix, auch deine ClearColor nicht. Übrigens musst du die glClearColor vor dem clearen setzen.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 03, 2013 13:30 
Offline
DGL Member

Registriert: Do Jan 03, 2013 04:07
Beiträge: 4
Programmiersprache: AutoIt, Delphi
Ich habe etwas beim VCL Template abgeschaut und danach meine Zeichenoperationen ins OnIdle Event verschoben.
Jetzt wird auch ein schönes buntes Dreieck vor schwarzem Hintergrund angezeigt :)

Vielen Dank für die Ratschläge.

MfG, donald


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 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.008s | 16 Queries | GZIP : On ]