DIRECTX nedir? Directx10 destekli bir ekran kartı almaya karar versek bize ne kazandıracak? Directx’in çıkış tarihinden başlayarak şu anki aşamaya gelinceye kadarki gelişmeleri makalemizde incelemeye çalışacağız.
Şimdiye kadar yapay zekâsı bir insanınki kadar iyi olan bir bilgisayarla oyun oynadınız mı? Bu şu an için maalesef mümkün değil. Daha fazla olasılığı değerlendirebilen, bir B planı olan karmaşık stratejiler kurabilen, öğrenmeye uygun ve risk değerlendirmesi yapan sistemler, bilgisayarları daha değerli rakipler haline getirebilir. Özellikle her patlamadan sonra ortaya çıkan ve bir birinin aynı olan siyah delikler yerine ufalanmış duvar ve kırılmış cam parçalarını nesnelerin yakınlarına dağılmış olarak göremedik veya patlayan bir evin parçaları sahnenin her tarafına dağıldığını da göremedik. Bir kapıyı kurşunlarla delik deşik edip etrafa saçılan odun parçalarını ayrıntılı bir şekilde veren herhangi bir oyun hiç oynayabildiniz mi?
Şimdiki oyunlarda birini vuruyorsunuz ve aynı bez bir bebeğin yere düşmesi gibi yıkılıp kalıyorlar. Yani oyunlarda büyük bir devrim gerçekleşmedi henüz. Ekran kartlarındaki gelişmeye paralel bir şekilde arayüzlerde de gelişmeler oluyor olması da gerekir.
Gerek ekran kartları gerekse ekran kartlarının kullandığı yazılımların tek hedefi son kullanıcıya daha gerçekçi, insan zekâsına daha yakın oyunlar oynatabilmek. Bu yazılımlardan biride Directx’tir.
Windows 95’ten önce çıkan oyunlar yani DOS altında çalışan oyunlar, ekran kartı ve joystick gibi donanımlara direk ulaşabilmekte idi. Dolayısı ile herhangi bir aracı programa da gerek yoktu.
1980’lı Yıllar ve MSDOS
*Çok fazla değişik donanım yok
*Herkes kendi kodunu yazıyor
*PC’lerin yetenekleri çok az
*Ses yok, ağ hiç yok
1990’lı Yılların başı
*Çeşitlenen donanım
*Hala herkes bütün işi baştan yapıyor.
*Ses kartları için ilk ortak sürücüler
*Win 3.1 (İlk kez grafiksel kullanıcı arabirimi gerçekleştirildi)
*MS-DOS 6
*Ses ve seri bağlantı
Windows 95’ten önce çıkan oyunlar yani DOS altında çalışan oyunlar, ekran kartı ve joystick gibi donanımlara direk ulaşabildiğini yukarda bahsetmiştik. Taki Windows 95'in çıkana kadar. Windows 95'in çıkış ile birlikte gelen korumalı bellek yönetimi oyun üreticileri için yeni bir problem getirdi: bu yeni işletim sistemi, belleğe direk erişilmesini önlüyordu. Oyun yapanlar artık çıkmaza girmişlerdi.
İşte Microsoft'un ilk hedefi bu sorunu çözmekti. 3 Microsoft çalışanı, DirectX denilen sistemi geliştirdiler. Oyun programcıları artık hafızaya direk erişmek zorunda değillerdi. Ayrıca DirectX kodcuların işini azaltan birçok yeni ve standart kütüphane içeriyordu. Aslında Microsoft bu yaklaşımı daha önce de denemiş; ancak başarılı olamamıştı.
Microsoft mevcut haliyle fazla ileri gidemezdi. Çünkü kaliteli grafikler ve sesler üretemiyordu. Oysa Mac'ler grafik alanında da Microsoftun önünde idi. Profesyonel 3 boyutlu uygulamalarda akla gelen tek isim, Silicon Graphics'di. Firma, sahip olduğu ve kendi geliştirdiği OpenGL teknolojisi sayesinde hem çok kaliteli ve performanslı 3 boyutlu grafikler üretiyor, hem de bu alanda yazılım geliştirmeyi de kolaylaştırdığından, geniş destek görüyordu.
Ekran kartları büyük bir hızla gelişiyor bu gelişme paralel olarak hemen her kartın özellikleri farklı olabiliyor. Programcıların da her kart için ayrı kod yazmaları mümkün olmadığına göre bütün kartların ve yazılımın anlaşabileceği ortak bir platforma ihtiyaç var. İşte bu boşluğu API (Application Programming Interface, Uygulama Programlama Arayüzü) dolduruyor. API, uygulamalarla onları çalıştıran donanımın anlaşmasını sağlıyor. Programlar kodlarını direk donanıma aktarmadan standart biçimde API`ye aktarıyorlar. Ekran kartının sürücü yazılımı da API`den aldığı bu standart kodları kartın kullanabilceği şekle çevirip karta ulaştırıyor. Oyunlarda en sık kullanılan iki API OpenGL ve Direct3D`dir.
OpenGL
OpenGL grafik kütüphanesi, grafik donanımına ait birara yüzdür.2D ve 3D nesnelerden oluşan hareket eden görüntüler üretmemize olanak sağlar. OpenGL Silicon Graphics tarafından geliştirilmiştir. Direct3D den daha eski ve sağlamdır OpenGL tamamen nesneye dayalı değildir fakat kendi nesnelerimizi oluşturmak oldukça kolaydır. OpenGL ile kendi nesnemizi oluşturabilir ve dokulandırabiliriz OpenGL tamamen portatiftir ve bir çok platform destekler Örneğin MacOS,windows,BeosSGI dan OpenGL i lisanslamışlardır . Ayrıca OpenGL network üzerindede çalışabilir. OpenGL komutlarını network üzerinden ileten bir protokolda vardır. Örneğin sever bir similasyonu hesaplamalrını yapan süperbilgisayar client ise serverin gönderdiği OpenGL komutlarını yorumlayan bir bilgisayar olabilir.
*SGI tarafından 1992’de duyuruldu
*İyi tanımlanmış ve açık kaynaklı
*Kolay kullanım
*14 yılda sadece 5 değişiklik
*OpenGL Architecture Review Board (ARB) tarafından özellikleri belirleniyor.
*Donanım üreticileri yeni standardı beklemeden yeni özellikler ekleyebiliyor.
DirectX'ten sonraki en ünlü 3B API'si ise OpenGL. DirectX'ten çok daha uzun süredir ortalarda ve birçok işletim sisteminde de desteği bulunuyor.
DirectX gibi OpenGL de sürekli düzeltiliyor, güncelleniyor ve yetenekleri artırılıyor. Yine DirectX gibi tüm ekran kartları tarafından destekleniyor. Dahası en yeni 3B özellikleri, asıl OpenGL standardında bulunmasa bile, OpenGL Uzantıları (extensions) adı altında eklenebiliyor. Sıklıkla çizim işlemcisi (graphics processor) üreticileri bazı uygulamalar ve oyunlardaki belirli etkileri desteklemek kendi OpenGL uzantılarını sürücülerine ekliyorlar. Çoğunluk eserde DirectX egemenliği sürse de, hala birçok oyun OpenGL için yazılmaya devam ediyor. Bunun en iyi örneklerinden birisi id Software tarafından yayınlanan Texan; hatta birçok başka kuruluş da, kendi eserlerinde kullanmak üzere, id Software'in 3B oyun motorunu lisanslamış bulunuyor..
DirectX
Genel anlamı ile ifade edecek olursak, DirectX programlarla (uygulamalar ve oyunlar) ile grafik kartınızı çalıştıran driverlar, ses ve diğer bilgisayar donanımları arasındaki bağlantıyı sağlayan bir arayüzdür. DirectX, 3D rendering (nesnelerin yüzeyinin doku ile örtülmesi ve bunlara renk, gölge ve tonlama verilerek gerçekçilik kazandırılması işlemi), video playback, capture, TV görüntüleme uygulamaları, joystick ve Mouse ara yüzleri, çoklu oyunlar ve daha fazlası gibi birçok önemli fonksiyonu yerine getirmektedir.
Mesela multiplayer bir oyun yapmaya çalıştığımızı düşünelim, eger DirectX kullanmazsak bilgisayarlar arasındaki iletişimi sağlayacak kodu da bizim yazmamız gerekir. Bu fazladan çaba demek olur ve de hata olasılığını artırır. Burada DirectX herşeyi bizim yerimize yapar gibi de düşünmemek gerekir, ancak isleri önemli bir biçimde hafiflettiği de ortadadır. DirectX bilgisayarın grafik donanımına doğrudan erişir, bu da uygulamalarımızın çok daha hızlı işlemesini sağlar.
Basitçe tarayıcılar bir etkiyi matematiksel olarak tanımlıyor. Örneğin bir taşın ıslak görünmesini istiyorsanız, parlaklık etkisini, yansımaları, aydınlanmayı ve diğerlerini tanımlayan bir tarayıcı yazmanız yeterli. Çizim işlemcisi bu etkileri gerçek zamanlı hesaplamak için tarayıcıyı kullanıyor.
Özetlersek;
*Çok amaçlı çoklu ortam kütüphanesi
*1995’te ilk sürüm
*Donanım kaynaklarına doğrudan erişim
*Ses, görüntü ve kontrol araçları desteği
*Ağ desteği
2000’lı Yıllar
*Çok özelleşmiş donanım
*Programlanabilir boruyolları
*İnternet üzerinden oyun
*Surround ses sistemleri
*DirectX 8/9
DirectX mimarisi
*HAL: Hardware abstraction layer
*HEL: Hardware emulation layer
*Donanımdan bağımsız kod imkânı
*Beyaz yalanlar ve device_caps
Pratik DirectX uygulamaları
*Tüm Oyunlar (RPG,MMO,RTS…)
*Peer-to-peer ağlar
*Seri Port Programlama
*3 boyutlu ses uygulamaları
*CAD, 2d &3D modelleme
*DVD gösterme
Yenilikler ve Gelecek
*DirectX oyun piyasasını kontrol etmeye devam edecek
*Donanım üreticileriyle yakın çalışmalar
*Her yıl yeni bir sürüm
*Managed DirectX’e geçiş
*Managed Çerçeve yoluyla değişik platformlar
*X’li sistemler
*Taşınabilir sistemler
DirectX’in sahip olduğu bileşenler nelerdir?
DirectX, genelde oyun programcıları tarafından kullanılsa da, aslında sadece bir 3 boyutlu grafik kütüphanesi değildir. Joystick kontrolünden ağ yönetimine kadar birçok araç içerir. Üstelik sadece oyun geliştiricileri tarafından kullanılmaz.
DirectX içinde üç çekirdek alan bulunur:
Giriş aygıtları
Ses
Video
Aşağıda şu anki sürümde bulunan API'lere önce kısaca bir değinelim. Daha sonraki aşamada geniş bir şekilde ele alacağız.
1-Giriş Aygıtları (Input Devices)
DirectInput: Bu API, klavyeler, fareler, oyun çubukları, oyun pedleri ve güç tepkili (force feedback) aygıtlar için kullanılır. Windows XP SP1 ve sonraki sürümleri için bu API'nin içine Xbox360 denetleyicisi desteği de eklenmiştir.
2-Ses
DirectSound : Bu düşük seviye API uygulama ile ses kartı arasındaki arayüz için kullanılır. Donanımsal önbellekler, ses yükseklik seviyesi gibi sesle ilgili özellikler bu API kullanılarak değiştirilebilir.
DirectMusic : Bu daha yüksek seviyeli bir API'dir ve birden fazla sesi karıştırabilir. MIDI çalma, birden fazla sesin yüksekliği ve çeşitli çalışma zamanı (runtime) özellikleri bu bileşen tarafından denetlenebilir.
3-Video
Direct3D: Ekrana resimlerin çıkarılmasından bu API sorumludur. Donanımsal hızlandırıcılar (grafik kartları) tarafından 3B nesnelerin özelliklerinin değiştirilebilmesine bu düşük seviye arayüz izin verir.
DirectDraw : Eskiden önemli olan bu başlık yeni sürümlerde 2B işlevlerinin Direct3D içine konulmasıyla eski önemini kaybetmiştir
Görüldüğü gibi DirectX tek başına bir varlık değil, birbirinden bağımsız çalışan uygulamaların bütünüdür.Şimdi bu bileşenleri daha geniş bir şekilde incelemeye başlayalım.
1-DirectDraw
Microsoft’un çıkardığı directx’in temel bileşenlerinden biri.2 boyutlu çizim yapabilmeyi sağlar. DirecDraw esas olarak bir video bellek yöneticisidir. Ve bitmapleri direkt olarak video belleğe saklamak ve yönetmek için programcıya büyük olanaklar sağlar .Video belleğin içindeki bitmaplerin aktarılması için direkt olarak video donanım aktarıcıları (blitter) kullanılır.Video belleğinden video belleğine aktarım için video donanım aktarıcıları kullanıldığından , sistem belleğinden video belleğine aktarımdan daha hızlıdır.Bu özellikle video belleği içinde 64 bit veri yolu sağlayan günümüzün 64 bitlik video kartları ile geçerlidir. Diğer bir taraftan donanımsal bir aktarım CPU dan bağımsız işlenmektedir, bundan dolayı CPU bu sırada diğer işlerle uğraşabilir. Ayrıca DirectDraw video kartların diğer bazı donanım özelliklerini de destekler. Örneğin donanım Z-buffer tekniğini kullanabilir
2-Direct3D
DirectX'in en önemli bileşeni olan Direct3D'nin temelleri Ati tarafından atıldı. En radikal değişikliğin yaşandığı DirectX 8.1, ilk Xbox için Nvidia tarafından geliştirildi.
DirectX paketinin yıldızı, Direct3D kütüphanesidir. Bunun dışındaki tüm kütüphaneler benzer ya da daha iyi fonksiyonlarla diğer işletim sistemlerinde zaten mevcuttur. Ekran kartı üreticilerini milyar dolarlar sahibi yapan, oyunların müthiş kaliteye çıkmasını sağlayan kütüphane Direct3D'dir. Grafik kartlarıyla birlikte adı sıkça anılan vertex shaders, pixel shaders, bump mapping, mip mapping,texture mapping gibi teknikler, Direct3D olmadan kullanılamazlar.
Direct3D şu özellikleri sağlar:
Shader’lar
Günümüzdeki oyunlar ve 3D programların motorları genel itibariyle shader konsepti üzerine üretilirler. Shader, poligon ve piksellerin nasıl kaplanması gerektiğini kontrol eden, GPU üzerinde çalıştırılan kod parçacıklarına verilen isimdir. Shader'ların programlanabilir olması, geliştiriciye uçsuz bucaksız görsel efekt yaratma imkanı da sunar.
*HLSL
*Assembly benzeri eski dilin yerini alıyor
*Modellerden görüntüye geçişin kontrolü
*Pixellerin ve Köşelerin işlenişi
*Yumuşak dokular, su ve tüyler
*Karmaşık ışıklar, parlak yüzeyler
Donanımdan Bağımsızlık
Programları farklı donanım çakışmalarından korur. Böylece program çalıştırıldığı bilgisayardaki ekran kartı, ses kartı vb. özelliklerden bağımsız olarak çalışabilir
Donanım İçin Genel Sürücü Modeli
Diect3D’yi destekleyen tüm sürücülerin en azından belirlenmiş özellikleri kesinlikle destekleyeceğini garanti eder. Böylece bu belirlenmiş özellikleri kullanan programlar Direct3D’yi destekleyen donanıma sahip her bilgisayarda çalışır. Ayrıca Direct3D, ekran kartı üreticilerine kartlarının Direct3D’nin değişik özelliklerini kullanabilmesi için tarifler sağlar. Bu özellikleri kullanan programlarda büyük performans artışları gözlenir.
Programlara 3 Boyut Eklemeyi Kolaylaştırır
Direct3D 3 boyutlu grafikler için standart algortimalar ve mekanizmalar sağladığı için, bu özellikleri kullanan programlar çok daha kolay ve hızlı üretilebilir.
Donanıma Açık Ulaşım
Bu Direct3D’nin en önemli özelliklerinden biridir. Bilgisayardaki donanım bir özelliği desteklemiyorsa, Direct3D bunu yazılım kullanarak destekler hale getirir. Program, çalışırken donanım özelliklerini tespit edebilir.
Oluşturma Motoru (Rendering Engine)
Oluşturma motoru, sahnenin 3 boyutlu nokta bazında tanımlanması, değişik yüzey desenlerinin, ışıkların, kameranın özelliklerinin tanımlanması, oluşturulmaya hazır hale getirilmesi işlerinden sorumludur.
Penceresiz Çalışma
Direct3D'nin bir başka fonksiyonu, programların penceresiz çalışabilmesini sağlamasıdır.
Özetlersek;
*Başlatma
*Makinenin özelliklerini öğren
*Uygun modülleri çalıştır
*2D
*Dörtlüler
*Nokta sprite’lar
*Text ve parçacık efektleri
*Primitifler
*Dokular
*Işıklandırma