ZenGL Tutorial/es

From Lazarus wiki
Jump to: navigation, search

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


ZenGL/es | Tutorial 1 | Tutorial 2 | Tutorial 3 | Edit

Descarga

Puedes obtener ZenGL para Linux, Windows y Mac. Descargar ZenGL.

Instalacion

Descomprimir el archivo descargado con un gestor de archivos comprimidos como 7-Zip en la carpeta que desees.

Ruta de las Fuentes

Antes de usar los modulos no olvides establecer la ruta a las fuentes de ZenGL.

Ve a "Proyecto > Opciones del Proyecto". En "Opciones del compilador > Rutas" debes añadir lo siguiente en "Otros archivos de unidad":

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

Compilacion

Las aplicaciones pueden ser compiladas con ZenGL estáticamente o usando so/dll/dylib.

Lee mas acerca de la compilación en la Wiki de ZenGL.

ZenGL estaticamente

La ventaja de la compilación estática es que genera una aplicación de menor tamaño, pero requiere incluir todas las unidades.

Además la compilación estática requiere seguir los términos de la licencia-LGPL, particularmente debes hacer de código abierto (open source) tu aplicación si usa código fuente de ZenGL.

{$DEFINE STATIC}

ZenGL usando so/dll/dylib

Usando so/dll/dylib no requiere hacer de código abierto tu aplicación. Para hacer esto comenta el $DEFINE STATIC. También necesitarás compilar la librería ZenGL.

//{$DEFINE STATIC}

Windows dll

Abre "src\Lazarus\ZenGL.lpi" y luego ve a "Ejecutar > Compilar (Ctrl + F9)".

Luego en el directorio "src\" puedes ver el archivo "ZenGL.dll", copia y pegalo en la carpeta "bin\i386" donde todos los binarios de los demos son compilados. Siempre debes copiar las librerías en el directorio de salida de tu aplicación si usas dll.

Ahora puedes compilar los demos comentando $DEFINE STATIC.

Otros archivos dll en la carpeta "bin\" que puedes usar son: chipmunk.dll ; libogg-0.dll ; libvorbis-0.dll ; libvorbis-3.dll

Primer programa

Este es el primer programa demo incluido con ZenGL, primero crea un nuevo "Programa Pascal". Agrega las rutas al código fuente como fue descrito anteriormente.

También debes cambiar el modo de sintáxis en Proyecto > Opciones del Proyecto > Opciones del Compilador > Procesando a Delphi (-Mdelphi).

Recuerda, si estás usando so/dll/dylib copia los binarios de las librerías al directorio de salida de tu programa.

Título del programa, agregar recursos:

program demo01;
 
{$R *.res}

Define el modo de compilación (comentalo para usar so/dll/dylib):

{$DEFINE STATIC}

Agrega las unidades de ZenGL.

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

Variables como en un programa estándar de pascal:

var
  DirApp  : String;
  DirHome : String;

Procedimientos para agregar código:

procedure Init;
begin
  // Aquí se puede realizar la carga de los recursos principales.
end;
 
procedure Draw;
begin
  // Aquí dibuja cualquier cosa.
end;
 
procedure Update( dt : Double );
begin
  // Esta función es la mejor manera para implementar movimiento suavizado de algo, porque los temporizadores son restringidos por FPS.
end;
 
procedure Timer;
begin
  // El título mostrará los cuadros por segundo.
  wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
end;
 
procedure Quit;
begin
 //
end;

Aquí comienza el programa:

Begin
  {$IFNDEF STATIC}
  zglLoad( libZenGL );
  {$ENDIF}
  // For loading/creating your own options/profiles/etc. you can get path to user home
  // directory, or to executable file(not works for GNU/Linux).
  DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
 
  //Crea un temporizador con un intervalo de 1000ms.
  timer_Add( @Timer, 1000 );
 
  // Register the procedure, that will be executed after ZenGL initialization.
  zgl_Reg( SYS_LOAD, @Init );
  // Register the render procedure.
  zgl_Reg( SYS_DRAW, @Draw );
  // Register the procedure, that will get delta time between the frames.
  zgl_Reg( SYS_UPDATE, @Update );
  // Register the procedure, that will be executed after ZenGL shutdown.
  zgl_Reg( SYS_EXIT, @Quit );
 
  // Enable using of UTF-8, because this unit saved in UTF-8 encoding and here used
  // string variables.
  zgl_Enable( APP_USE_UTF8 );
 
  // Establece el título de la ventana.
  wnd_SetCaption( '01 - Initialization' );
 
  // Permite mostrar el cursor.
  wnd_ShowCursor( TRUE );
 
  // Establece opciones de pantalla.
  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 
  // Iniciar ZenGL.
  zgl_Init();
End.

Codigo Resultante

El resultado es una plantilla para los proyectos de ZenGL:

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.