Difference between revisions of "ZenGL Tutorial/de"

From Lazarus wiki
(Installation)
m (template)
Line 1: Line 1:
 +
{{ZenGL Tutorial}}
 +
 
== Download ==
 
== Download ==
 
[[ZenGL]] für Linux, Windows und Mac kann hier heruntergeladen werden: [http://zengl.org/download.html Download ZenGL].
 
[[ZenGL]] für Linux, Windows und Mac kann hier heruntergeladen werden: [http://zengl.org/download.html Download ZenGL].

Revision as of 15:56, 30 May 2011

Deutsch (de) English (en) español (es) français (fr) русский (ru)


Download

ZenGL für Linux, Windows und Mac kann hier heruntergeladen werden: Download ZenGL.

Installation

Einfach die gepackte Datei mit einem "Zip-Programm" wie 7-7ip in einen beliebigen Ordner entpacken.

Pfade

Bevor man die einzelnen Module von ZenGL verwenden kann, müssen diese im Projekt zu den Pfaden der Units hinzugefügt werden.

Dazu einfach Unter "Projekt > Projekteinstellungen" klicken. Dann unter "Compilereinstellungen > Pfade'" bei "Andere Units (-Fu)(Trenner ist der Strichpunkt):"' die folgenden Verzeichnisse hinzufügen:

<delphi>headers extra src src\Direct3D lib\jpeg\$(TargetCPU)-$(TargetOS) lib\msvcrt\$(TargetCPU) lib\ogg\$(TargetCPU)-$(TargetOS) lib\zlib\$(TargetCPU)-$(TargetOS)</delphi>

Kompilieren

Eine ZenGL Anwendung kann entweder statisch gelinkt werden, oder mittels so/dll/dylib. Mehr dazu im ZenGL-Wiki (englisch): compilation

ZenGL statisch verwenden

Die statische Verwendung hat den Vorteil, dass die Anwendung kleiner ist, man muss dann jedoch alle notwenigen Units inkludieren.

Weiters muss die Andwendung dann den Vorgaben der LGPL-Lizenz folgen, somit müssen alle Teile einer Anwendung, die auf ZenGL-Code zurückgreifen, wiederum freigegeben werden.

Die statische Verwendung von ZenGL erfolgt mittels <delphi>{$DEFINE STATIC}</delphi> im Quellcode.

ZenGL mit so/dll/dylib verwenden

Wenn man ZenGL mit so/dll/dylib verwendet, ist es nicht notwendig, den Quellcode seines Programmes freizugeben. Um die Applikation dynamisch zu linken, muss man lediglich die Zeile <delphi>{$DEFINE STATIC}</delphi> auskommentieren.

Windows DLL

Open "src\Lazarus\ZenGL.lpi" then go to "Run > Compile (Ctrl + F9)". Einfach "src\Lazarus\ZenGL.lpi" öffnen und mittels "Start > Neu kompilieren (Strg + F9)" die notwendige DLL erzeugen. Diese Datei mit Namen "ZenGL.dll" wird im Ordner "src\" erzeugt. Die Datei von Dort in den Ordner "bin\i386" kopieren, wo die Demoprogramme abgelegt sind. Nicht vergessen: Mann muss diese DLL Dateien immer mitgeben, wenn man sein Programm weitergibt!


Andere DLL-Dateien im "bin\"-Ordner, die man benutzt sind:chipmunk.dll ; libogg-0.dll ; libvorbis-0.dll ; libvorbis-3.dll.

Das erste Programm

This is the first demo program included with ZenGL, first create a new "Free Pascal Program". Add the Source Path as described before. Dies ist das erste Progamm, welche mit ZenGL erstellt wird. Man erstellt in Lazarus ein neues Projekt vom Typ "Free Pascal Program". Danach fügt man die Pfade, wie oben beschrieben, dem Projekt hinzu.

Auch muss der Syntax Modus in Projekt > Projekteinstellungen > Compilereinstellungen > Parsen auf Delphi (-Mdelphi) umgestellt werden. Beim Verwenden der dynamischen Variante nicht vergessen, die jeweiligen Bibliotheken ins Ausgabeverzeichnis zu kopieren!

Programmtitel, hinzufügen von Ressourcen: <delphi>program demo01;

{$R *.res}</delphi>

Kompiliereinstellungen: <delphi>{$DEFINE STATIC}</delphi>

Hinzufügen der notwendigen ZenGL-Units: <delphi>uses

 {$IFNDEF STATIC}
 zglHeader
 {$ELSE}
 zgl_main,
 zgl_screen,
 zgl_window,
 zgl_timers,
 zgl_utils
 {$ENDIF}
 ;</delphi>

Variablen, wie in einem standard Pascal-Programm: <delphi> var

 DirApp  : String;
 DirHome : String;</delphi>

Prozeduren: <delphi>procedure Init; begin

 // Hier die Ressourcen laden.

end;

procedure Draw; begin

 // Malen.

end;

procedure Update( dt : Double ); begin

 // Diese Procedure ist der beste Weg, um weiche Bewegung zu implementieren.

end;

procedure Timer; begin

 // Caption zeigt die Frames pro Sekunde an:
 wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );

end;

procedure Quit; begin

//

end;</delphi>

Hier startet das Programm: <delphi>Begin

 {$IFNDEF STATIC}
 zglLoad( libZenGL );
 {$ENDIF}
 DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
 DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
 // Erzeugen eines Timers mit Intervall 1000ms.
 timer_Add( @Timer, 1000 );
 // Registrieren der Prozedur die bei der ZengGL-Initialisierung ausgeführt wird.
 zgl_Reg( SYS_LOAD, @Init );
 // Registrieren der Render-Prozedur.
 zgl_Reg( SYS_DRAW, @Draw );
 // Registrieren der Update-Prozedur.
 zgl_Reg( SYS_UPDATE, @Update );
 // Registrieren der Quit-Prozedure (wird beim Schließen der Anwendung ausgeführt).
 zgl_Reg( SYS_EXIT, @Quit );
 
 // UTF-8-Unterstützung einschalten.
 zgl_Enable( APP_USE_UTF8 );
 // Fenstertitel festlegen.
 wnd_SetCaption( '01 - Initialization' );
 // Mauszeiger anzeigen:
 wnd_ShowCursor( TRUE );
 // Optionen für den "Screen" festlegen.
 scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 //ZenGL initalisieren.
 zgl_Init();

End.</delphi>

der fertige Code

Das Ergebnis ist eine Vorlage für ZenGL-Projekte: <delphi>program template;

{$DEFINE STATIC}

{$R *.res}

uses

 {$IFNDEF STATIC}
 zglHeader
 {$ELSE}
 zgl_main,
 zgl_screen,
 zgl_window,
 zgl_timers,
 zgl_utils
 {$ENDIF}
 ;

var

 DirApp  : String; DirHome : String;

procedure Init; begin end;

procedure Draw; begin end;

procedure Update( dt : Double ); begin end;

procedure Timer; begin

 wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );

end;

procedure Quit; begin end;

Begin

 {$IFNDEF STATIC}
 zglLoad( libZenGL );
 {$ENDIF}
 DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
 DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
 timer_Add( @Timer, 1000 );
 zgl_Reg( SYS_LOAD, @Init );
 zgl_Reg( SYS_DRAW, @Draw );
 zgl_Reg( SYS_UPDATE, @Update );
 zgl_Reg( SYS_EXIT, @Quit );
 zgl_Enable( APP_USE_UTF8 );
 wnd_SetCaption( '01 - Initialization' );
 wnd_ShowCursor( TRUE );
 scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 zgl_Init();

End.</delphi>