Şubat 22

Lazarus ile Zengl Kurulumu ve İlk Örnek

ZenGL

Uzun bir aradan sonra tekrar merhaba. Yaptığım bir proje ve iş hayatımın yoğunluğu nedeniyle uzun bir süredir ne yazıkki sizinle pek birşey paylaşamadım.  Ve bu sürenin biraz daha devam edeceğini düşünmekteyim.

Şimdi esas konumuza dönelim ilk olarak http://zengl.org/download.html adresinden işletim sisteminize göre uygun olan kitaplığı indiriyoruz ve Lazarus klasörünün altında components\Zengl klasörüne bu sıkıştırılmış dosyayı açıyoruz.  Bu işlemin ardından Lazarus’u çalıştırıp Proje menüsünden Proje Seçenekleri …  , Compiler Options, Paths bölümüne altta listesi verilen klasörleri ekliyoruz ama burada dikkat etmemiz gereken bir nokta işlemi onaylamadan önce  Use this compiler options as default for new projects kutusunu işaretlememiz gerekiyor. Bu kutuyu işaretlemek bizim bundan sonraki projelerde bu tanımlamaları yapmaktan kurtaracaktır.

C:\lazarus\components\zengl\headers
C:\lazarus\components\zengl\extra
C:\lazarus\components\zengl\src
C:\lazarus\components\zengl\lib\jpeg\$(TargetCPU)-$(TargetOS)
C:\lazarus\components\zengl\lib\msvcrt\$(TargetCPU)
C:\lazarus\components\zengl\lib\ogg\$(TargetCPU)-$(TargetOS)
C:\lazarus\components\zengl\lib\zlib\$(TargetCPU)-$(TargetOS)

Bu işlemler ile zengl kitaplığını lazarus’a tanıtmış oluyoruz.  Dikkat ettiyseniz bu işlemler sırasında lazarus’u tekrar derleme ya da araç kutusunda yeni parçaların eklenmesi gibi bir durum olmadı. Bunun nedeni en baştan beri belirttiğim gibi Zengl’in bir kitaplık oluşu ve bileşen gibi lazarus’a eklenme ya da derlenme gibi işlemlerin olmaması.

Gelelim ilk projemize. Bu projede ilk olarak ekrana iki adet resim göstereceğiz ve bu gösterimler yavaş yavaş görünme ve kaybolma (fade in/out) efektleriyle olacak bunun ardından da büyük bir imaj üzerinde kamera yavaş yavaş yukarı doğru gidecek ve kullanıcıya dağların üzerinden uçuyormuş gibi bir izlenim verecek. Bu izlenimi kuvvetlendirmek içinde ikinci bir imaj hafif transparan olarak bulut etkisi yaratacak.  Şimdi bu işlemleri yapmak için lazarus’da yeni bir proje açıyoruz fakat bu kez uygulama değil programı seçiyoruz ve karşımıza sadece lazarus’un editörü çıkıyor.

Uygulamanın Kaynak Kodu : http://www.4shared.com/rar/txmLE9Tg/zengl1.html

Programın Kodu :

program init1;
{$IFDEF WINDOWS}
 {$R *.res}
{$ENDIF}
{$DEFINE STATIC}
uses
 {$IFNDEF STATIC}
 zglHeader
 {$ELSE}
 zgl_main,
 zgl_screen,
 zgl_window,
 zgl_timers,
 zgl_keyboard,
 zgl_render_2d,
 zgl_fx,
 zgl_textures,
 zgl_textures_png,
 zgl_textures_jpg,
 zgl_sprite_2d,
 zgl_sengine_2d,
 zgl_primitives_2d,
 zgl_font,
 zgl_text,
 zgl_math_2d,
 zgl_utils,
 zgl_camera_2d
 {$ENDIF}
 ;
var
 DirApp : String;
 DirHome : String;
 fnt : zglPFont;
 fullScreen : Boolean;
 dirRes : String {$IFNDEF DARWIN} = '../data/' {$ENDIF};
 logo : zglPTexture;
 screen : zglPTexture;
 back : zglPTexture;
 bulut : zglPTexture;
 time : Integer;
 camMain : zglTCamera2D;

 

procedure Init;
begin
 // Program açılırken ilk çalışan procedur.
 camMain.Zoom.X := 1;
 camMain.Zoom.Y := 1;
fnt := font_LoadFromFile( dirres + 'font.zfi' );
 logo := tex_LoadFromFile( dirres + 'boreas.png', $FF000000, TEX_DEFAULT_2D ); //Fontlar ve resimler tanımlanıyor
 screen := tex_LoadFromFile( dirres + 'screen.png', $FF000000, TEX_DEFAULT_2D );
 back := tex_LoadFromFile( dirres + 'back.png', $FF000000, TEX_DEFAULT_2D );
 bulut := tex_LoadFromFile( dirres + 'bulut.png', $FF000000, TEX_DEFAULT_2D );
end;
procedure Draw;
begin
 cam2d_Set( @camMain );
 if time <= 255 Then
 ssprite2d_Draw( logo, 0, 0, 800, 600, 0, time ) //logonun görünürlülüğü artıyor
 else
 if (time < 510) Then
 begin
 ssprite2d_Draw( logo,0, 0, 800, 600, 0, 510 - time ); //logonun görünürlülüğü azalıyor
 end;
if (time > 550) and (time <= 805) Then
 ssprite2d_Draw( screen, 0, 0, 800, 600, 0,time - 550 ) //Açılış imajının görünürlülüğü artıyor
 else
 if (time > 805) and (time<=1010) Then
 begin
 ssprite2d_Draw( screen,0, 0, 800, 600, 0, 1010 - time ); //Açılış imajının görünürlülüğü azalıyor
 end;

 

if time > 1020 then begin
 ssprite2d_Draw( back,0, -1800, 800, 2400, 0,255 ); //Arka fon ekrana çizildi
 ssprite2d_Draw( bulut,0, -1800, 800, 2400, 0,100 ); // Bulut imajı 0-255'lik bir skalada 100 olacak değerde transparan bir şekilde ekrana çizildi

 

camMain.Y:=camMain.Y-0.02; // Kameranın Y koordinatındaki pozisyonu her işlemde 0.02 kadar azalıyor.
end;
 batch2d_End();
end;
procedure Update( dt : Double );
begin
 // Bu bölüm herhangi birşeyin yumuşak hareket etmesi için en iyi yöntemdir. Zamanlayıcılar FPS ile sınırlıdır.
end;
procedure Timer;
begin
 // Zamanlayıcının işletildiği bölüm
 INC(time,2);
wnd_SetCaption( '01 - İlk Uygulama [ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' ); // Pencerenin başlığı
 if key_Down( K_ALT ) and key_Press( K_ENTER ) Then // Alt + Enter ile tam ekran - normal ekran seçimini yapıyoruz
 begin
 FullScreen := not FullScreen;
 scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FullScreen, FALSE );
 end;
 // Escape tuşu ile programı kapatıyoruz
 if key_Press( K_ESCAPE ) Then zgl_Exit();
 key_ClearState();
end;
procedure Quit;
begin
 // Çıkarken işletilecek komutlar
end;
Begin
 {$IFNDEF STATIC}
 {$IFDEF LINUX}
 zglLoad( libZenGL );
 {$ENDIF}
 {$IFDEF WIN32}
 zglLoad( libZenGL );
 {$ENDIF}
 {$IFDEF DARWIN}
 zglLoad( libZenGL );
 {$ENDIF}
 {$ENDIF}

 

// Kullanıcıyla ilgili kayıtlar tutmak için faydası olabilir
 DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) ); // Uygulamanın adresi
 DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) ); // Ev klasörü.
 // Uygulamaya 1000ms interval tanımlı bir zamanlayıcı ekleniyor.
 timer_Add( @Timer, 16 );
// Yukarıda tanımlanan procedurlerin çalışması için (init,draw, timer .. ) register procedurü ile tanıtılması gerekir.
 // Initialization procedürünün tanıtılması
 zgl_Reg( SYS_LOAD, @Init );
 // Render procedürünün tanıtılması
 zgl_Reg( SYS_DRAW, @Draw );
 // Update procedürünün tanıtılması
 zgl_Reg( SYS_UPDATE, @Update );
 // Çıkış procedürünün tanıtılması
 zgl_Reg( SYS_EXIT, @Quit );
// UTF-8 Desteği
 zgl_Enable( APP_USE_UTF8 );
// Açılacak pencerenin başlığı tanımlanıyor.
 wnd_SetCaption( '01 - Initialization' );
 // Cursor gözükmesine izin veriliyor
 wnd_ShowCursor( FALSE );
// Ekranın boyutları tanımlanıyor
 scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 // ZenGL başlatılıyor.
 zgl_Init();
End.

Bundan sonraki uygulamada bu uygulamanın üzerine devam edip sprite özelliğini öğreneceğiz ve uçağımızı uçurmaya başlayacağız 🙂

Did you like this? Share it:

Etiketler:, , , ,

Posted 22 Şubat 2012 by admin in category Bileşen - Kitaplık, Lazarus, Programlama, Zengl

5 thoughts on “Lazarus ile Zengl Kurulumu ve İlk Örnek

  1. Adem Kocamaz

    Merhabalar zengl bileşenlerini tarif ettiğiniz şekilde lazarus içerisine yerleştirdim.
    Yaptığınız uygulamanın kaynak kodunu indirdim. Önce u_CopyStr kısmında tanımlanmaması ile ilgili hata verdi.
    {$IFNDEF STATIC}
    zglHeader
    {$ELSE}
    satırını sadece zglHeader kalacak şekilde değiştirdim. Ama bu seferde
    Error: Can’t open object file: jpeg_helper.o şeklinde hata aldım. Sizce nereyi yanlış yapıyorum. İşletim Sistemim Windows 7 Ultimate x86 32bit Lazarus 1.0.8

    Reply
  2. Adem Kocamaz

    Hatanın çözümünü buldum.
    En başta
    {$IFNDEF STATIC}
    zglHeader
    {$ELSE}


    {$ENDIF}
    kısmını düzenlemiştim.
    uses
    zglHeader,
    …,
    …;
    şeklinde düzenledim.
    Error: Can’t open object file: jpeg_helper.o
    şeklinde çıkan hatanın sebebinide istediği dosyaları projenin lib klasörüne atarak çözdüm.

    Reply
  3. admin (Post author)

    Adem Bey, ben lib klasörünü kontrol edin diyene kadar siz sorunu çözmüşsünüz yardımcı olamadım kusura bakmayın .

    Reply
  4. Adem Kocamaz

    Önemli değil. Sitenizin ve sizin varlığınız yeter. Sizin sayenizde Lazarus ile tanıştım. 1 haftadır yazılarınızı okuyorum. Delphi tecrübem vardı. Lazarus şuanda birinci önceliğim ve en sevbdiğim IDE oldu benim için. Teşekkürler ilginiz için. Yeni yazılar paylaşmanız dileğiyle. Hoşçakalın.

    Reply

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*