Lazarus - OpenGL 3.3 Tutorial - Context erzeugen: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde geleert.)
 
Zeile 1: Zeile 1:
= Einrichten und Einstieg -  Context erzeugen =
 
[[Image: Einrichten und Einstieg -  Context erzeugen.png|200px]]<br><br>
 
== Einleitung ==
 
OpenGL Context 3.3 erzeugen und OpenGL initialisieren.<br>
 
'''Parent''' kann z.B. auch ein TPanel sein. (Parent := Panel1;)<br>
 
<br>
 
Man kann die '''TOpenGLControl'''-Komponente auch über die Komponenten-Leiste auf dem Form erzeugen.<br>
 
Aber meine Erfahrung hat gezeigt, wenn man eine neuere Lazarus-Version installiert, dass es dann zu Problemen kommen kann.<br>
 
<br><br>
 
Den Zeichen-Context mit '''TOpenGLControl''' deklarieren.<br>
 
<syntaxhighlight lang="pascal">type
 
  TForm1 = class(TForm)
 
    procedure FormCreate(Sender: TObject);
 
  private
 
    ogc: TOpenGLControl;  // Deklaration von ogc
 
    procedure InitScene;
 
    procedure DrawScene(Sender: TObject);
 
  end;</syntaxhighlight>
 
Den Zeichen-Context erzeugen.<br>
 
<syntaxhighlight lang="pascal">procedure TForm1.FormCreate(Sender: TObject);
 
begin
 
  ogc := TOpenGLControl.Create(Self); // Den Zeichen-Context erzeugen.
 
  with ogc do begin
 
    Parent := Self;
 
    Align := alClient;
 
    OpenGLMajorVersion := 3;          // Dies ist wichtig, dass der Context 3.3 verwendet wird.
 
    OpenGLMinorVersion := 3;
 
    OnPaint := @DrawScene;
 
    InitOpenGL;
 
    MakeCurrent;
 
    ReadExtensions;
 
    ReadImplementationProperties;
 
  end;
 
  InitScene;                          // Rendert die Szene
 
end;</syntaxhighlight>
 
Für die Contexterzeugung, habe ich eine Klasse geschrieben, diese beinhaltet den Teil im '''with'''-Block, ausgenommen '''OnPaint'''.<br>
 
In späteren Tutorial wird nur noch diese verwendet.<br>
 
<br><br>
 
Rendern der Szene, momentan wird nur die Hintergrundfarbe festgelegt.<br>
 
Die Werte werden bei '''glClearColor(...''' als R, G, B, A eingegeben, wobei A keinen Einfluss hat.<br>
 
0.0 ist dunkel und 1.0 ist volle Intensität, somit wäre 0.0, 0.0, 0.0 Schwarz und 1.0, 1.0, 1.0 Weiss.<br>
 
Hier im Beispiel ist es ein Olivgrün.<br>
 
<syntaxhighlight lang="pascal">procedure TForm1.InitScene;
 
begin
 
  glClearColor(0.6, 0.6, 0.4, 1.0);  // Hintergrundfarbe
 
end;</syntaxhighlight>
 
Darstellen der Szene, momentan wird mit '''glClear(...''' nur der Frame-Puffer geleert und und mit der mit '''glClearColor(...''' festgelegten Farbe gefüllt.<br>
 
Der noch leere Frame-Puffer wird mit '''ogc.SwapBuffers;''' auf dem Bildschirm dargestellt.<br>
 
Somit ist nur der Hintergrund sichtbar und man sieht keine Änderung.<br>
 
<syntaxhighlight lang="pascal">procedure TForm1.DrawScene(Sender: TObject);
 
begin
 
  glClear(GL_COLOR_BUFFER_BIT);  // Frame-Buffer löschen und einfärben.
 
  
  ogc.SwapBuffers;              // Frame-Buffer auf den Bildschirm kopieren.
 
end;</syntaxhighlight>
 
 
<br>Autor: [[Mathias]]
 
== Siehe auch ==
 
* Übersichtseite [[Lazarus - OpenGL 3.3 Tutorial]]
 

Aktuelle Version vom 12. Dezember 2017, 21:28 Uhr