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

Aktuelle Zeit: Fr Jul 18, 2025 08:12

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jan 19, 2009 21:54 
Offline
DGL Member

Registriert: So Jan 18, 2009 13:39
Beiträge: 2
Zuerst mal guten Tag,

Also ich bin ein totaler Dummy was OpenGl anbelangt und habe ein Problem... Ich arbeite zur Zeit mit D2009 und der neuesten version von DGLSDK.
Ich habe mir ein Test-Formular wie in Lektion 1 zusammengebastelt um mir ein Dreieck zu zeichnen.

Folgender Code hab ich in Create-methode des Hauptformulars:

Code:
  1. DC:= GetDC(Handle);
  2.   if not InitOpenGL then Application.Terminate;
  3.   RC:= CreateRenderingContext( DC,
  4.                                [opDoubleBuffered],
  5.                                32,
  6.                                24,
  7.                                0,0,0,
  8.                                0);
  9.   ActivateRenderingContext(DC, RC);
  10.  
  11.   glViewport(0, 0, ClientWidth, ClientHeight);
  12.  
  13.   glMatrixMode(GL_PROJECTION);
  14.   glLoadIdentity;
  15.   gluPerspective(60, ClientWidth/ClientHeight, 0.1, 100);
  16.   glMatrixMode(GL_MODELVIEW);
  17.  
  18.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  19.  
  20.   glTranslatef(-1.5, 0,-6);
  21.   glBegin(GL_TRIANGLES);
  22.     glColor3f(1, 0, 0); glVertex3f(-1,-1, 0);
  23.     glColor3f(0, 0, 1); glVertex3f( 1,-1, 0);
  24.     glColor3f(0, 1, 0); glVertex3f( 0, 1, 0);
  25.   glEnd;


Der Programm kompiliert und startet ohne sonstige Fehler jedoch ist mein Formular ist leer...
Jede Hilfe wäre gut!!!

Danke im Voraus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 19, 2009 23:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
1. Hast du den Code tatsächlich an das Ereignis "gehängt"?
2. Hast du die Renderschleife im "OnIdle" gesetzt bzw. im "OnTimer"?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 20, 2009 09:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Der Grund warum du bei deinem Code nichts siehst liegt daran, dass du alles im OnCreate hast. Wärend OnCreate aufgerufen wird ist das Formular noch nicht sichtbar. Alles was du dann darauf zeichnest wird beim Sichtbarmachen den Formulars wieder übermalt. Entsprechend musst du dafür sorgen, dass das was gezeichnet werden soll in regelmäßigen Abständen gezeichnet wird. Entweder a) in einem festen zeitlichen Intervall (Timer oder Application.OnIdle) oder aber b) jedes Mal, wenn dein Formular neu gezeichnet werden muss (Form.OnPaint). Welches die beste Lösung ist hängt davon ab was du machen möchtest.

Also auf deinen Code bezogen.

Das CreateRederingContext / ActivateRenderingContext sollte nur ein einziges mal Aufgerufen werden. Also OnCreate ode OnShow des Formulars ist da schon ganz passen.

Das Einstellen deines Viewports bzw der Perspective könntest du auch direkt nach dem Initialisieren erledigen. Sofern sich dein Fenster von der Größe her verändern darf solltest du glViewport eventuell auch zu Begin des Rendern setzen. Damit der Viewport immer passend groß ist. Ich persönlich mache so etwas auch gerne im OnResize des Formulars. Dann wird es nicht unnötig aufgerufen. Aber das wird eventuell jetzt etwas zu verwirrend.

Das Wechseln in die Modelview Matrix sollte dann der Anfang deines Rendercodes sein. Also das wird dann in einem Timer, OnIdle oder OnPaint aufgerufen. Nach dem Wechseln in die Modelview Matrix solltest du diese aber zurücksetzen (glLoadIdentity). Zu mindest zum Anfang der Szene. Sonst addieren sich deine Verschiebungen bei jedem Bild.

Wenn du dann alles gezeichnet hast, dann musst du auch SwapBuffer aufrufen. Sonst wird dein Backbuffer niemals mit dem Frontbuffer ausgetauscht und dein Bild wird niemals zu sehen sein.

Alternativ zu meiner Beschreibung kannst du dir auch mal in der Filesection unter "Templates" ganz unten das "OpenGL 1.5 Template (VCL)" anschauen. Dort sollte das soweit schon alles richtig sein. + ein paar anderer nützlicher Sachen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 20, 2009 18:13 
Offline
DGL Member

Registriert: So Jan 18, 2009 13:39
Beiträge: 2
vielen dank! hat mir sehr geholfen... :)


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 2 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.007s | 16 Queries | GZIP : On ]