Delphimweb delphi sitesine hoş geldiniz...

Ana sayfa Bağlantılar Kaynaklar İpuçları E-Posta
Veritabanı Grafik Object Pascal

Delphimweb->Grafik Programlama

Windows'un Geçerli Koordinat Sistemi
1.Delphide Grafik Çizimi ve Uygulamaları
     TImage bileşeni ve kullanımı
     Color (Renk) özelliği ve TColor kullanımı
     Font (Yazıtipi) özelliği ve TFont kullanımı
     Canvas (Tuval) özelliği ve TCanvas kullanımı
      1.Pen özelliği ve kullanımı
      2.Brush özelliği ve kullanımı
      3.Pixels özelliği ve kullanımı
      4.Moveto ve LineTo prosedürleri ve kullanımları
      TPoint ve TRect tipleri ve kullanımları
      5. Ellipse prosedürü ve kullanımları
      6. Rectangle prosedürü ve kullanımları
      7. RoundRect prosedürü ve kullanımı
      8. Arc prosedürü ve kullanımı
      9. Pie prosedürü ve kullanımı
      10. Chord prosedürü ve kullanımı
      11. Polygon prosedürü ve kullanımı
      12. Polyline prosedürü ve kullanımı
2.Delphide Grafik ve Oyun Programlama
     DelphiX ve DirectX nedir?
     OpenGL ve OpenGL ile Grafik Programlama
      1.OpenGL Nedir?
      2.GLUT Nedir?
     OpenAl Nedir?
     SDL Nedir?

WINDOWS'UN GEÇERLİ KOORDİNAT SİSTEMİ:

Windows işletim sisteminde çizim yapılırken çizim alanı koordinatları ekranın sol üst köşesi başlangıç alınmaktadır. Bu noktanın koordinatları X=0 ve Y=0 'dır. Koordinatlar soldan sağa (X) ve yukarıdan aşağı (Y) doğru artmaktadır.

Windows Koordinat Sistemi

DELPHIDE GRAFİK ÇİZİMİ VE UYGULAMALARI: TImage bileşeni ve kullanımı:

Delphi diğer windows uygulamalarından olduğu gibi grafik uygulamalarında da oldukça başarılıdır. Bütün windows programları (pencere, buton vb) grafik öğeleri barındırır. Fakat bu grafik öğeler her program için yeterli değildir. Oyunlar ve grafik programları vb programlar daha ileri grafik fonksiyonlarına ve kontrollerine ihtiyaç duyar. Delphi bu ihtiyaçlara cevap verecek bileşenlere ve diğer araçlara sahiptir.

Delphi grafikleri göstermek için TImage bileşenine sahiptir. Bu bileşene Additional sayfasından ulaşmak mümkündür. Bu bileşenle .bmp (Bitmap), wmf (16 bit Windows meta file), emf (32 bit Enhanced meta file), ico (Icon-simge dosyası), .jpg ve .jpeg (Jpeg Dosyası) tipindeki resim dosyalarını ekranda göstermek mümkündür. Bu dosyaları kullanmak için bileşenin Picture özelliği kulanılır. Bu özellik delphinin TPicture tipindedir.

Bu bileşeni kullanmak için Form penceresine bir adet TImage bileşeni yerleştirilir. Bu bileşenin ismi otomatik olarak Image1 dir. İsim değiştirme ve diğer ayarlar Object Inspector penceresinden yapılır. Bu bileşenin program başlangıcında bir resmi göstermesi istenirse bunun için Image1 seçili iken Picture özelliği seçilir ve yanındaki ... kısmına tıklanır. Ekrana Picture Editor diyalogu gelecektir. Bu diyalog içinde Load butonuna tıklandığında gelecek Dosya aç diyalogundan desteklenen resim tiplerinden istenilen seçilebilir. Seçilen resim ekranda görünür. Seçilen resmi temizlemek için Picture Editor diyalogunun Clear butonuna tıklanır.

Bu bileşene çalışma esnasında da resim yüklenebilir. Bileşenin Picture özelliğinin LoadFromFile prosedürü kullanılır. Bu prosedürün kullanımı şu şekildedir:

Image1.Picture.LoadFromFile('resim.bmp');

Üzerinde işlem yapılan resimleri kaydetmek te mümkündür. Bunun için SaveToFile prosedürü kullanılır. Bu prosedürün kullanımı ise şu şekildedir:

Image1.Picture.SaveToFile('resim.bmp');

Color (Renk) özelliği ve TColor kullanımı:

Delphi renk için TColor özelliği kullanır. TColor'da temel renklerin, belirli renklerin ve sistem renklerinin isimleri vardır. Renkler "cl" (color) harfleri ile başlar ve rengin ingilizce ismi ile devam eder. Örneğin mavi rengin TColor ismi clblue 'dur. Bütün bileşenlerde renk özelliği vardır. Bileşenlerde renk ayarı yapmak için bileşenin Color özelliği seçilir ve yanındaki ... kısmına tıklanır. Ekrana renkler ve renklerin cl ile başlayan isimleri bulunan liste gelecektir. Bu listeden istenilen renk seçilebilir. İstenilen renk bulunamazsa RGB fonksiyonu kullanılabilir. RGB (Red, Green, Blue- Kırmızı, Yeşil, Mavi) kelimelerinin baş harflerinden oluşur. Windows RGB renk sistemini kullanır. RGB, üç rengi içerir ve her renk için 255 farklı renk tonu vardır. Böylece üç renk için 255x255x255 farklı renk tonu olacağından milyonlarca farklı renk tonu elde edilir. RGB fonksiyonunun kullanımına aşağıdaki örnekler verilebilir.

Piksel ve rgb kavramları Piksel ve rgb kavramları

Label1.Color := clblue; {MAVİ}
Label1.Color := RGB(0, 0, 255); {MAVİ}
Label1.Color := RGB(255, 0, 0); {KIRMIZI}
Label1.Color := $000000FF; {KIRMIZI}
// RGB fonksiyonu kullanmadan yapılabilir. Mantığı $00GGBBRR şeklindedir.
Label1.Color := RGB(0, 255, 0); {YEŞİL}
Label1.Color := RGB(0, 0, 0); {SİYAH}
Label1.Color := RGB(255, 255, 255); {BEYAZ}

Font (Yazıtipi) özelliği ve TFont kullanımı:

Windows ekrana yazı yazarken yazıtiplerini kullanılır. Windows genellikle TrueType (Gerçek Tip) yazıtipi çeşitini kullanır. TrueType yazıtiplerinin özelliği boyutlandırma işlemlerinden sonra karakterlerin şeklinde herhangi bozulma olmamasıdır. Ayrıca yazıcı çıktılarında da herhangi bozulma olmaz. Yazıtiplerinin name (yazıtipi ismi), size (yazıtipi boyu), style (yazıtipi stili) ve color (yazıtipi rengi) özellikleri vardır. Delphi yazıtipi için TFont özelliği kullanır. Bütün bileşenlerde yazıtipi özelliği vardır. Yazıtiplerinin tüm özellikleri delphi ile kontrol edilebilir.

Label1.Font.Name := 'Arial'; {Yazitipi Arial olarak ayarlanıyor}
Label1.Font.Size := 12; {Yazitipi boyu 12 olarak ayarlanıyor}
Label1.Font.Style := [fsItalic, fsUnderline]; {Yazitipi stili yatık ve altıçizgili olarak ayarlanıyor}
Label1.Font.Color := clblue; {Yazitipi rengi mavi olarak ayarlanıyor}

Canvas (Tuval) özelliği ve TCanvas kullanımı:

Canvas delphinin grafik çizim amacıyla kullandığı önemli özelliklerden biridir. TForm ve TGraphicControl gibi yüksek seviyeli sınıflar Canvas (Tuval) özelliğine sahiptirler. Bileşenler, canvası grafik çizim amacıyla kullanılırlar. Canvas çizim için pen (kalem), brush (fırça) ve font (yazıtipi) gibi araçları kullanır.

1. Pen özelliği ve kullanımı:

Pen (Kalem), canvasın kullandığı önemli araçlardan biridir. Pen, canvas üzerine daha sonra çizilecek olanların çizim şeklini ayarlamak için kullanılır. Pen'in, color(renk), width (genişlik), style (stil), mode (mod) özellikleri vardır. Bu özellikleri değiştirerek çizilecek olan çizginin özellikleri ayarlanır.

Pen'in Color (Renk) özelliği ile çizilecek çizginin rengi ayarlanır. Örneğin form1 üzerine çizilecek çizginin rengini mavi olarak ayarlamak için gereken kod aşağıdaki şekildedir:

Form1.Canvas.Pen.Color := clblue;

Pen'in Width (Genişlik) özelliği ile çizilecek çizginin piksel (pixel) cinsinden genişliği ayarlanır. Örneğin form1 üzerine çizilecek çizginin genişliğini 5 piksel olarak ayarlamak için gereken kod aşağıdaki şekildedir:

Form1.Canvas.Pen.Width := 5;

Pen'in Style (Stil) özelliği ile ise çizilecek çizginin stili ayarlanır. Stil isimleri "ps" (penstyle) harfleri ile başlar. Çeşitli stiller vardır. Kullanılabilecek çizim stilleri şunlardır:

Pen Stilleri

Örneğin form1 üzerine çizilecek çizginin stilini kesik-kesik olarak ayarlamak için gereken kod aşağıdaki şekildedir:

Form1.Canvas.Pen.Style := psDash;

Pen'in Mode(Mod) özelliği ile ise çizilecek çizginin çizilme şekli ayarlanır. Mod isimleri "pm" (penmode) harfleri ile başlar. Çeşitli modlar vardır. Kullanılabilecek çizim modlarından bazıları şunlardır:

pmBlackHer zaman siyah0
pmWhiteHer zaman beyaz1
pmNotHedef D rengi tersini alırnot D
pmCopyKaynak S rengi alırS
pmNotCopyKaynak S renginin tersini alırnot S
pmXorKaynak ve Hedef renklerin kombinasyonunu alırS xor D
pmNotXorKaynak ve Hedef renklerin kombinasyonunun tersini alırnot (S xor D)

2. Brush özelliği ve kullanımı:

Brush (Fırça), canvasın kullandığı önemli araçlardan biridir. Brush, canvas üzerinde alanları veya şekilleri doldurmak için kullanılır. Brush ile sonra yapılacak çizimlerde geçerli olacak dolgu ayarlanır. Brush'ın, color(renk), style (stil), bitmap(resim) özellikleri vardır. Bu özelliklerle doldurma şekli ayarlanır.

Brush'ın Color (Renk) özelliği ile doldurulacak renk ayarlanır. Örneğin form1 üzerine yapılacak dolgu rengini mavi olarak ayarlamak için gereken kod aşağıdaki şekildedir:

Form1.Canvas.Brush.Color := clblue;

Brush'ın Style (Stil) özelliği ile ise dolgunun stili ayarlanır. Stil isimleri "bs" (brushstyle) harfleri ile başlar. Çeşitli stiller vardır. Kullanılabilecek çizim stilleri şunlardır:

Brush Stilleri

Aşağıda çeşitli renklerle Brush kullanımı görülmektedir:

Renklerle Brush Stilleri

Örneğin form1 üzerine çizilecek dolgu stilini yatay çizgiler şeklinde ayarlamak için gereken kod aşağıdaki şekildedir:

Form1.Canvas.Brush.Style := bsHorizontal;

Brush'ın Bitmap (resim) özelliği ile ise doldurulacak resim ayarlanır. Örneğin form1 üzerine çizilecek resimin seçilmesini ve ekrana çizilmesini sağlayan kod aşağıdaki şekildedir:

var Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
 try
  Bitmap.LoadFromFile('Dolgu.bmp');
  Form1.Canvas.Brush.Bitmap := Bitmap;
  Form1.Canvas.FillRect(Rect(0, 0, 100, 100));
 finally
  Form1.Canvas.Brush.Bitmap := nil;
  Bitmap.Free;
 end;
end;

3. Pixels özelliği ve kullanımı:

Pixels (Piksel), canvasın kullandığı önemli araçlardan biridir. Pixels ile canvas üzerinde istenilen pikselin (nokta) rengi istenilen renge ayarlanabilir. Pixels, TColor tipindedir. Pixels, canvas üzerinde piksel cinsinden x ve y konumu, TColor cinsinden renk bilgisi olmak üzere üç parametre ile kullanılır. Kullanımı : Canvas.Pixels[Nokta x, Nokta y] := Renk şeklindedir. Aşağıdaki örneklerde canvas üzerinde iki nokta kırmızı ve mavi renge dönüştürülmektedir.

Form1.Canvas.Pixels[0, 0] := clred; {Canvas üzerindeki x=0, y=0 pikseli kırmızı ayarlanıyor}
Form1.Canvas.Pixels[10, 30] := clblue; {Canvas üzerindeki x=10, y=30 pikseli mavi ayarlanıyor}

4. MoveTo ve LineTo prosedürleri ve kullanımları:

MoveTo ve LineTo, canvas'ta çizgi çizmek için kullanılan iki prosedürdür. MoveTo prosedürü canvas üzerinde bir nokta belirlenmesini sağlar. Kullanımı: Canvas.MoveTo(Başlangıç x, Başlangıç y) şeklindedir. LineTo prosedürü ise MoveTo ile belirlenmiş başlangıç noktasından başlayacak olan çizgini bitiş noktasını belirler ve çizgiyi çizer. Kullanımı: Canvas.LineTo(Bitiş x, Bitiş y) şeklindedir. Aşağıda canvas üzerinde bir çizgi çizen kod görülmektedir:

Form1.Canvas.MoveTo(0, 0); {Canvas üzerindeki x=0, y=0 başlangıç noktası alınıyor}
Form1.Canvas.LineTo(50, 70); {Canvas üzerindeki x=50, y=70 bitiş noktası belirlenip çizgi çiziliyor}

TPoint ve TRect tipleri ve kullanımları:

TPoint Tipi:
type TPoint = packed record
 X: Longint;
 Y: Longint;
end;
TRect Tipi:
TRect = packed record
 case Integer of
  0: (Left, Top, Right, Bottom: Integer);
  1: (TopLeft, BottomRight: TPoint);
end;

TPoint, delphide tanımlanmış olan bir tipdir. Genelikle grafik komutlarında kullanılır. Bir nokta için gerekli olan x, y konumları için iki adet değişken gerekir. TPoint ile iki değişken yerine bir değişken kullanabilmesini sağlar. Aşağıda TPoint kullanılmadan ve kullanılarak yazılan kodlar görülmektedir:

Var x, y: Longint; {Bir nokta için iki değişken tanımlanıyor}
Begin
x := 100; y := 200; {Değişkenlere değer saklanıyor}

TPoint ile aynı tanımlama:

Var k: TPoint; {Bir nokta için bir değişken tanımlanıyor}
Begin
k.X := 100; k.Y := 200; {Bir değişkene iki ayrı değer saklanıyor}

TRect ise iki ayrı nokta için gereken dört ayrı (başlangıç ve bitiş) konumunu saklamak için tanımlanmış bir tiptir. Dört ayrı değişken kullanmak yerine TRect ile dört konum bir değişkende saklanabilir. TRect iki adet TPoint şeklinde kullanılabildiği gibi TPoint'in dörtlüsü gibi de kullanılabilir. Aşağıda TRect kullanılmadan ve kullanılarak yazılan kodlar görülmektedir:

Var x, y, x1, y1 : Longint; {Bir nokta için dört değişken tanımlanıyor}
Begin
x := 100; y := 200; x1 := 110; y1 := 210; {Değişkenlere değer saklanıyor}

TRect ile aynı tanımlama:

Var k: TRect; {İki nokta için bir değişken tanımlanıyor}
Begin
k.Left := 100; k.Top := 200; k.Right := 110; k.Bottom := 210; {Değişkene dört ayrı değer saklanıyor veya}
k.Topleft.X := 100; k.TopLeft.Y := 200; k.BottomRight.X := 110; k.BottomRight.Y := 210; {Değişkene başka şekilde dört ayrı değer saklanıyor}

5. Ellipse prosedürü ve kullanımları:

Ellipse, canvas'ta elips veya daire çizmek için kullanılan prosedürdür. Ellipse prosedürü ile başlangıç ve bitiş noktaları verilen elips veya daire çizilir. Daire ve elips çizerken dikkat edilmesi gereken husus koordinatların görünmez dörtgen çizermiş gibi verilmesi gerektiğidir. Daire veya elips bu görünmez dörtgene göre ve dörtgenin içine uyacak şekilde çizilir. Daire için başlangıç ve bitiş noktaları arasındaki fark x ve y için eşit olmalıdır. Kullanımı: Canvas.Ellipse(Başlangıç x, Başlangıç y, Bitiş x, Bitiş y) veya Canvas.Ellipse(const Rect: TRect) şeklindedir. Aşağıda canvas üzerinde bir daire çizen kod ve elips çizen kodlar görülmektedir:

Form1.Canvas.Ellipse (0, 0, 30, 30); {Canvas üzerine daire çiziliyor}
Form1.Canvas.Ellipse (0, 0, 50, 70); {Canvas üzerine elips çiziliyor veya}

Var k: TRect; {k değişkeni TRect şeklinde tanımlanıyor}
Begin
k.Left := 0; k.Top := 0; k.Right := 50; k.Bottom := 70; {k değişkenine değerler veriliyor}
Form1.Canvas.Ellipse ( k ); {Canvas üzerine aynı elips farklı şekilde çiziliyor}

6. Rectangle prosedürü ve kullanımları:

Rectangle, canvas'ta dikdörtgen veya kare çizmek için kullanılan prosedürdür. Rectangle prosedürü ile başlangıç ve bitiş noktaları verilen dikdörtgen veya kare çizilir. Kare için başlangıç ve bitiş noktaları arasındaki fark x ve y için eşit olmalıdır. Kullanımı: Canvas.Rectangle(Başlangıç x, Başlangıç y, Bitiş x, Bitiş y) veya Canvas.Rectangle(const Rect: TRect) şeklindedir. Aşağıda canvas üzerinde bir kare çizen kod ve dikdörtgenler çizen kodlar görülmektedir:

Form1.Canvas.Rectangle (0, 0, 30, 30); {Canvas üzerine kare çiziliyor}
Form1.Canvas.Rectangle (0, 0, 50, 70); {Canvas üzerine dikdörtgen çiziliyor veya}

Var k: TRect; {k değişkeni TRect şeklinde tanımlanıyor}
Begin
k.Left := 0; k.Top := 0; k.Right := 50; k.Bottom := 70; {k değişkenine değerler veriliyor}
Form1.Canvas.Rectangle ( k ); {Canvas üzerine aynı dikdörtgen farklı şekilde çiziliyor}

7. RoundRect prosedürü ve kullanımı:

RoundRect, canvas'ta köşeleri yuvarlaklaştırılmış dikdörtgen veya kare çizmek için kullanılan prosedürdür. Rectangle prosedürü ile başlangıç, bitiş noktaları ve köşelerdeki yuvarlaklık oranı verilen dikdörtgen veya kare çizilir. Kare için başlangıç ve bitiş noktaları arasındaki fark x ve y için eşit olmalıdır. Kullanımı: Canvas.Rectangle(Başlangıç x, Başlangıç y, Bitiş x, Bitiş y, Yuvarlaklık Oranı x, Yuvarlaklık Oranı y) şeklindedir. Aşağıda canvas üzerinde bir kare çizen kod ve dikdörtgenler çizen kodlar görülmektedir:

Form1.Canvas.RoundRect (0, 0, 30, 30, 5, 5); {Canvas üzerine köşeleri yuvarlak kare çiziliyor}
Form1.Canvas.RoundRect (0, 0, 50, 70, 5, 7); {Canvas üzerine köşeleri yuvarlak dikdörtgen çiziliyor}

8. Arc prosedürü ve kullanımı:

Arc, canvas'ta yay çizmek için kullanılan prosedürdür. Arc prosedürü ile köşe koordinatları, başlangıç ve bitiş noktaları verilen yay çizilir. Kullanımı: Canvas.Arc(Sol-üst x, Sol-üst y, Sağ-alt x, Sağ-alt y, Başlangıç x, Başlangıç y, Bitiş x, Bitiş y) şeklindedir. Aşağıda canvas üzerinde yay çizen kod görülmektedir:

Form1.Canvas.Arc(10, 10, 200, 150, 30, 30, 150, 100); {Canvas üzerine yay çiziliyor}

9. Pie prosedürü ve kullanımı:

Pie, canvas'ta dolu yay (pasta dilimi) çizmek için kullanılan prosedürdür.Pie prosedürü ile köşe koordinatları, başlangıç ve bitiş noktaları verilen dolu yay çizilir. Kullanımı: Canvas.Pie(Sol-üst x, Sol-üst y, Sağ-alt x, Sağ-alt y, Başlangıç x, Başlangıç y, Bitiş x, Bitiş y) şeklindedir. Aşağıda canvas üzerinde dolu yay çizen kod görülmektedir:

Form1.Canvas.Pie(10, 10, 200, 150, 30, 30, 150, 70); {Canvas üzerine dolu yay çiziliyor}

10. Chord prosedürü ve kullanımı:

Chord, canvas'ta uçları birleştirilmiş yay çizmek için kullanılan prosedürdür. Chord prosedürü ile köşe koordinatları, başlangıç ve bitiş noktaları verilen uçları birleştirilmiş yay çizilir. Kullanımı: Canvas.Chord(Sol-üst x, Sol-üst y, Sağ-alt x, Sağ-alt y, Başlangıç x, Başlangıç y, Bitiş x, Bitiş y) şeklindedir. Aşağıda canvas üzerinde uçları birleştirilmiş yay çizen kod görülmektedir:

Form1.Canvas.Chord(10, 10, 200, 150, 30, 30, 150, 70); {Canvas üzerine uçları birleştirilmiş yay çiziliyor}

11. Polygon prosedürü ve kullanımı:

Polygon, canvas üzerine başlangıç ve bitiş noktaları bitişik olan birleşik çizgi dizisi çizmek için kullanılır. Kullanımı: Canvas.Polygon([Point(x,y),...]); şelindedir. Noktalar TPoint tipinde girilir. İstenilen sayıda konum (x,y noktaları) tanımlanabilir. Başlangıç ile bitiş otomatik birleştirilecektir. Aşağıda canvas üzerinde poligon çizen kod görülmektedir:

Form1.Canvas.Polygon([Point(10, 10), Point(30, 10), Point(130, 30), Point(240, 120)]);

12. Polyline prosedürü ve kullanımı:

Polyline, canvas üzerine birleşik çizgi dizisi çizmek için kullanılır. Kullanımı: Canvas.Polyline([Point(x,y),...]); şelindedir. Noktalar TPoint tipinde girilir. İstenilen sayıda konum (x,y noktaları) tanımlanabilir. Aşağıda canvas üzerinde polyline çizen kod görülmektedir:

Form1.Canvas.Polyline([Point(40, 10), Point(20, 60), Point(70, 30), Point(10, 30), Point(60, 60), Point(40, 10)]);

Devam edecek...

DELPHIDE GRAFİK VE OYUN PROGRAMLAMA

A- DelphiX ve DirectX nedir?

DirectX, Microsoft tarafından gelişirilen, windows üzerinde çalışan, multimedia donanımına doğrudan ve hızlı erişim sağlayan, özellikle oyun yapımında kullanılan bir kütüphaneler topluluğudur. DirectX bilgisayarın grafik donanımına (Ekran Kartı, Ses Kartı, Fare, Klavye, Joystick) doğrudan erişir, donanımla birebir iletişim kurar ve donanımı en iyi şekilde kullanır. Bu sayede Directx ile yapılmış multimedya uygulamaları çok daha hızlı çalışır. DirectX'in içinde parçalara bölünmüş küçük kütüphaneler vardır:

DirectGraphics: Bu kütüphane sayesinde Grafik işlemleri gerçekleştirilir. Daha önceki Directx sürümlerinde bu kütüphane iki parçadan oluşuyordu (Direct3D ve DirectDraw). DirectX 8.0 sürümüyle birlikte bunlar birleştirildi ve DirectGraphics oldular.

DirectInput: Bu kütüphane sayesinde giriş aygıtları (fare, klavye, joystick) ile bağlantı kurulabilir.

DirectSound: Bu kütüphane sayesinde programlara ses efektleri eklenebilir. Bilgisayarın ses kartıyla bağlantı kurulmasına izin verir.

DirectPlay: Bu kütüphane sayesinde ağ (network) olayları programlarda kullanabilir. Çoklu oyuncu desteği sağlar.


DelphiX

DelphiX bileşen paketi, Delphi altından DirectX kullanımını sağlar ve kolaylaştırır. Delphix bileşen paketi ücretsizdir, bu paket ve örnek programlar, internette kolayca bulunabilir. DelphiX'in içinde hem kaynak kodları hem de her Delphi sürümü için hazır kurma paketleri bulunmaktadır. Delphix, Borland kylix programı ile çalışmamaktadır. DelphiX'in bileşenleri ve görevleri sırasıyla şunlardır:

DelphiX bileşen sayfası

DelphiX-DX3DDX3D : Bu bileşen eski DirectX sürümleriyle uyumluluk amacıyla konulmuştur. Kullanılmasına gerek yok.
DelphiX-DXDIBDXDIB : Bir tane aygıttan bağımsız bit eşlem resimini (Device Independent Bitmap-DIB) tutar.
DelphiX-DXDrawDXDraw : Genel DirectX bileşeni. DelphiX kullanabilmek için her projede bir tane tanımlı olması gerekir. Bütün yüzeyler (surface) ve diğer bileşenlerin ana nesnesidir.
DelphiX-DXImageListDXImageList : Birden fazla DIB resmini saklamaya yarar, özellikle iki boyutlu oyunlarda grafik yönetimini kolaylaştırır. İçeriğini DelphiX'in özel formatı olan *.dxg dosyalarına saklayabilir ya da bu dosyalardan içerik yüklenebilir.
DelphiX-DXInputDXInput : DirectInput nesnesinin kullanımını sağlar; yani klavyeden, fareden ve joystickten gelen mesajları algılanmasını sağlar.
DelphiX-DXPaintBoxDXPaintBox : Delphinin standart TImage'inin DelphiX versiyonu.
DelphiX-DXPlayDXPlay : DirectPlay nesnesinin kullanımını sağlar, Multiplayer oyunlarda kullanılır.
DelphiX-DXSoundDXSound : DirectSound nesnesinin kullanımını sağlar, TDXWave veya TDXWaveList'teki dosyaların çalınabilmesi için projede bir tane bulunmalıdır ve bu bileşenlerin DXSound özelliklerine bu bileşen seçilmelidir.
DelphiX-DXSpriteEngineDXSpriteEngine : Özellikle Sprite içeren iki boyutlu oyunlarda kullanılır, resim saklama, koordinat tutucu ve çarpışma denetimi gibi gelişmiş özellikler içerir.
DelphiX-DXTimerDXTimer : Delphi'nin System bileşenleri altında bulunan Timer'dan çok daha hassas bir timer, genellikle her oyunda bulunan genel döngüyü içerir.
DelphiX-DXWaveDXWave : Bu bileşen aynı TDXDIB gibidir ve tek bir wave dosyasını saklayabilir.
DelphiX-DXWaveListDXWaveList : Bu bileşen de aynı TDXImageList gibi birden fazla wave dosyasının saklanmasında kullanılır, kendi dosya uzantısı *.dxw'dir.

Not DelphiX bileşenleri olmadan da Delphi ile DirectX kullanılabilir. Bunun için gerekli .pas dosyaları ve kodları internette mevcuttur.

B- OpenGL ve OpenGL ile Grafik Programlama: OpenGL Nedir?

OpenGL

Open Graphics Library (OpenGL), 2 veya 3 boyutlu grafik çizdirmek için kullanılan bir API'dir bir başka deyişle kitaplıktır. Bu kitaplık yazılım geliştiricilere -donanımdan bağımsız olarak- grafik donanımını yönetme şansı verir. İlk olarak 1992 de Silicon Graphics tarafından geliştirilmiştir.

OpenGL, programcının grafik donanımlarına erişmesi için bir arayüz sunar. Tüm platformlarda çalışabilir. Düşük seviyeli geniş modelleme özelliğine sahip ve render yazılım paketleri içeren bir arayüz programıdır. Grafik programının ihtiyaçlarına büyük oranda cevap verir. Oyunlarda, cad dizayn model çizim programları başlıca programlardır. 3D oyunlarda render özelliği fazlasıyla kullanılır. Örneğin Quake III bu arayüzü kullanmıştır. Düşük seviyeli (detaylı) render özelliği sayesinde programcıya yüksek bir kontrol ortamı sunar. Programcılara sağladığı kütüphane desteği sayesinde sürekli gelişime açıktır. Bunu da "The OpenGL Utility Library" sağlar. DirectX'den farklı olarak, OpenGL sadece grafik API'dir. Multimedya (ses) ve Network desteği sağlamaz. Zamanla IBM, NVIDIA, Microsoft gibi firmalarca da destek verilmiştir. OpenGL, yüzlerce fonksiyonun bulunduğu grafik donanımına hükmeden güçlü bir kütüphane sunar. Programda kullanacağımız renk, efekt ve ışık oyunlarını kolaylıkla yapabilmemizi sağlar. Fonksiyonların çokluğundan da anlaşılacağı gibi programcıya detaylı grafik kontrolü sağlar.

OpenGL için iki adet dinamik bağlantı kütüphanesi (.dll) dosyasının (OPENGL32.dll ve GLU32.dll) (Microsoft Opengl kütüphanesi) Windows dizinine kopyalanması gerekir. C++ ile OpenGL kullanmak için OpenGL32.lib, glaux.lib, winmm.lib dosyalarının derleyicinin LIB dizinine kopyalanması ve başlık dosyalarının (.h) INCLUDE dizinine konulması gerekir. Delphi için ise OpenGL.pas dosyasının Delphinin LIB dizinine kopyalanması gerekir. Bu dosyalar internette küçük bir arama ile bulunabilir.

GLUT Nedir?

GLUT (OpenGL Utility Toolkit), OpenGL Grafik Api'sine destek olması için Mark J. Kilgard tarafından yazılmıştır. OpenGL, renderleme komutları içermesine rağmen windows ve diğer işletim sistemlerinden bağımsız olarak dizayn edilmiştir. Bunun sonucunda pencere açma, klavye ve fare ile ilgili olaylar hakkında hiçbir komut içermez ama bu işlemler yapılmadan da renderleme ve interaktiflik sağlanmaz. OpenGL Grafik Api'si içerisinde işletim sistemine dair hiç bir fonksiyon içermez buna rağmen işletim sistemi ile ilişkide de bulunması gerekir. Mesela inputları dinlemesi, pencere için işletim sisteminin numara alması vb. GLUT kütüphaneside bu tarz işleri arka planda gerçekleşmesini sağlar. Bunlar GLUT kütüphanesi olmadan win32 ile de gerçekleştirebilir. Fakat GLUT kullanmak hem kolaydır hem de GLUT'un gelişmiş fonksiyonları vardır. OpenGL sadece nokta, çizgi ve poligon çizgi çizme gibi temel çizim özelliklerine sahipken GLUT gelişmiş üç boyutlu nesneleri (küre, silindir, koni vb) çizme yeteneğine sahiptir.

GLUT için Glut32.dll ve Glaux.dll dinamik bağlantı kütüphanesi dosyalarının Windows dizinine kopyalanması gerekir. C++ ile GLUT kullanmak için gerekli .lib dosyalarının derleyicinin LIB dizinine ve başlık dosyalarının (.h) INCLUDE dizinine kopyalanması gerekir. Delphi için ise Glut.pas, Glaux.pas ve Glut_Api_ver.inc dosyalarının Delphinin LIB dizinine kopyalanması gerekir. Bu dosyalar internette küçük bir arama ile bulunabilir.

GLUT ve OpenGl kullanırken glutInit komutu ile opengl'nin başlatılması gerekmektedir. Bu komutu bir parametre almaktadır. Bu parametre "MS_LIB" yada "SGI_LIB" olabilir. Bu parametrenin "MS_LIB" olması Microsoft'un Windows ile beraber gelen opengl32.dll ve glu32.dll kütüphanelerin kullanılacağı anlamına gelir. Bu dosyalar Windows'un System32 dizininde bulunurlar. Eğer bu dosyalar yoksalar internette aramayla bulunup aynı dizine kopyalanmaları gerekir. Eğer parametre "SGI_LIB" ise Silicon Graphics, Inc. (http://www.sgi.com) şirketinin opengl.dll ve glu.dll kütüphanelerinin kullanılacağı anlamına gelir. Bu dosyaların internette aramayla bulunup Windows'un System32 dizine kopyalanmaları gerekir.

Not Burada bahsedilen dosyaları sıkıştırılmış bir dosya halinde sitenin kaynaklar sayfasında bulabilirsiniz.

Delphide yapılmış ekrana üçgen çizen basit bir opengl ve glut projesi:

İlk pencere
unit Unilkpencere;
interface

uses SysUtils, Forms, OpenGl, Glut;

Type
TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;

var Form1: TForm1;

implementation
{$R *.dfm}

procedure Goster;Cdecl;
Begin
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(0, 0, 1); //Mavi
 glBegin(GL_POLYGON);
   glVertex2f (0.0, 0.0);
   glVertex2f (0.2, 0.0);
   glVertex2f (0.2, 0.5);
 glEnd();
 glFlush();
end;

procedure TForm1.FormCreate(Sender: TObject);
Begin
 glutInit(MS_LIB); //MS kütüphanesi ile opengl açar
 // Burası glutInit(SGI_LIB) şeklinde de olabilir

 glutCreateWindow('İlk Pencere'); //Pencere ismi
 glutDisplayFunc(Goster); //Opengl'nin kullanacağı çizim fonksiyonunun belirlenmesi
 glutMainLoop;
end;

end.

Delphide yapılmış ekrana bir daire çizen opengl ve glut projesi:

Mavi Daire
unit Unit1;
interface

uses SysUtils, Forms, OpenGl, Glut;

Type
TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;

var Form1: TForm1;

implementation
{$R *.dfm}

procedure Goster;Cdecl;
const RADIUS=0.75;
var x, y:real; i:integer;
Begin
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(0, 0, 1); //Mavi
 glPointSize(5.0); //Nokta boyu
 glBegin(GL_POINTS);
  for i:= 1 to 360 do begin
   x := RADIUS * sin((i)*3.14/180);
   y := RADIUS * cos((i)*3.14/180);
   glVertex2f(x,y);
  end;
 glEnd();
 glFlush();
end;

Procedure Ayar;
Begin
 glClearColor(1.0, 1.0, 0.0, 0.0); //Arka rengi sarı
 glShadeModel(GL_FLAT); //Tek renk hakim olsun
end;

procedure TForm1.FormCreate(Sender: TObject);
Begin
 glutInit(MS_LIB); //MS kütüphanesi ile opengl açar
 // Burası glutInit(SGI_LIB) şeklinde de olabilir

 glutInitWindowPosition(300,300); //Pencere pozisyonu
 glutInitWindowSize(200, 200); //Pencere boyu
 glutInitDisplayMode(GLUT_RGB or GLUT_SINGLE); //Gösterme modunun belirlenmesi
 glutCreateWindow('Mavi Daire'); //Pencere ismi
 Ayar; //Başlangıç ayarları
 glutDisplayFunc(Goster); //Opengl'nin kullanacağı çizim fonksiyonunun belirlenmesi
 glutMainLoop;
end;

end.

Not Burada bulunan kodları dosya halinde sitenin kaynaklar sayfasında bulabilirsiniz.

C- OpenAL Nedir?

OpenAL

OpenAl (Open Audio Library), OpenGl Creative Labs Inc. tarafından geliştirilmiş açık kodlu (GNU Genel Kamu Lisanslı) Ses-Müzik(Audio) kütüphanesidir. OpenAl, programcının yüksek kaliteli, çok kanallı ses-müzik çıkışı işlemleri yapabilmesini sağlar. OpenAl, Linux, MacOS, Windows ve BeOS işletim sistemlerini desteklemektedir. OpenAl, C++ dili için yazılmış olsada Delphi için gerekli .pas dosyaları internette bulmak mümkündür. OpenAl için OpenAL32.dll ve diğer dinamik bağlantı kütüphanesi dosyalarının Windows dizinine kopyalanması gerekir.

D- SDL Nedir?

SDL logo

Simple DirectMedia Layer (SDL), GLUT'a benzeyen fakat daha gelişmiş özelliklere sahip olan multimedya kütüphanesidir. SDL ile ses, klavye, fare, joystick, opengl ve 2B video fonksiyonları rahatlıkla kullanılabilir. SDL, Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX ve QNX işletim sistemlerinde kullanılabilir. SDL C dili ile yazılmıştır ve C++ ile çalışabilir. Diğer programlama dilleri ile kullanılabilir. Delphide kullanmak için gerekli olan .pas dosyaları internetten küçük bir arama ile bulunabilmektedir. SDL, GNU LGPL sürüm 2 (Genel Kamu lisansı) ile dağıtılmaktadır.

SDL için Sdl.dll dinamik bağlantı kütüphanesi dosyasının Windows dizinine kopyalanması gerekir.

Devam edecek...

Sayfa Girişi
Veritabanı Grafik Object Pascal


Ana sayfa Bağlantılar Kaynaklar İpuçları E-Posta