|
|
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | = Einrichten und Einstieg - Context erzeugen =
| |
− | == Einleitung ==
| |
− | [[Image: Einrichten und Einstieg - Context erzeugen.png|right]]
| |
− | 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]]
| |