Görüntüleri Hareketlendirme Zamani
Duragan 3B sahnelerin nasil yaratildigini gördükten sonra bunlarin nasil hareket kazandigini ögrenebiliriz. Su ana kadar anlattigimiz islemlerin hiçbiri donanimi yaratilan bu duragan görütülere hareket kazandirmaktan daha fazla zorlayamaz. Üçgenlerden ve poligonlardan olsuan tel örgülerimizi hareket ettirmek için ekrandaki her piksel saniyede belirli sayida hesaplama yapilmalidir.
Yüksek çöznürlük denince aklimiza en az 1024x768 gelir, daha düsük çözünürlükleri adam yerine koymayiz pek. Bu çözünürlükte 786.432 adet piksel kulllanir, her piksel için 32 bit renk kullanildiginda 25.165.824 bit sadece duragan görüntü için gereklidir. Görüntünün 60 FPS hizda çalismasi için her saniye 1.509.949.440 bit veri aktarilmalidir ve bu sadece görüntüyü ekrana yansitmak için yeterlidir. Bunun yaninda bilgisayar görüntü içerigini, renkleri, sekilleri, isiklari ve diger efektleri de hesaplamak zorundadir. Bütün bunlar görüntü islemcilerinin çok hizli gelismesine sebep oluyor çünkü CPU`nun alabilecegi her türlü yardima ihtiyaci var.
Transform (Dönüsüm) Islemleri
Duragan görüntüler dönüsüm denen matematiksel bir islem sonucunda hareket kazanirlar. Bakis açimizi her degistirdigmizde bir dönüsüm olur. Bir arabanin bize yaklastikça daha büyük görünmesi gibi, büyüklügün her degisiminde bir dönüsüm olur. Bir 3B oyunun her karesinde kullanilan dönüsüm islemine matematiksel olarak su sekildedir:
Dönüsümde ilk etapta sanal dünyamizi tanimlayan önemli degiskenler kullanilir:
- X = 758 – baktigimiz sana dünyanin yüksekligi
- Y = 1024 – bu sanal dünyanin genisligi
- Z = 2 – bu da sanal dünyamizin derinligi
- Sx - sanal dünyaya baktigimiz pencerenin yüksekligi
- Sy – pencerenin genisligi
- Sz = hangi nesnelerin digerleinin önünde göründügünü belirten derinlik dgeiskeni
- D = .75 – gözümüzle sanal dünyamiza açilan pencere arasindaki uzaklik
Öncelikle sanal 3B dünyamiza açilan pencerelerimizin genisligi hesaplanir:

Daha sonra perspektif dönüsümü yapilir, bu asamada yeni degiskenler de isin içine girer:

Sonunda (X, Y, Z, 1.0) noktasi asagidaki islemcler sonucunda (X’, Y’, Z’, W’) noktasina dönüsür:

Görüntü ekrana yansitilmadan önce son bir dönüsüm daha yapilmalidir, bu kadari bile bu islemin karmasikligi hakkinda size fikir vermistir. Üstelik bütün bu islemler tek bir vektör, yani basit bir çizgi için. Ayni islemlerin görüntüyü olsturan bütün nesnelere saniyede 60 kere uygulandigini düsünün...
Ekran Kartlari Bu Islemlere Ne kadar Yardim Edebiliyor?
Önceleri ekran kartlari sadece islemciden gelen sinyalleri monitörün anlayabilecegi sekle çeviriyorlardi ve bundan baska bir görevleri yoktu. Görüntü kalitesi yükseldikçe ve islemcinin sirtina binen diger yükler de arttikça bu yöntem zamanla geçerliligini yitirdi.
Gördügümüz gibi öncelikle üçgenlerden ve poligonlardan tel örgü denilen iskelet olusturuluyor ve bu yapi 2 boyutlu bir ekranda gösterilmek için dönüsüme ugruyor. Dönüsen nesneler kaplanip aydinlatiliyor ve sonunda da monitöre aktariliyor. GeForce öncesi TNT 2 ve Vodoo 3 gibi ekran kartlari dönüsüm isleminden sonra devreye girip kalan islemleri CPU’nun üzerinden aliyorlardi ve CPU`yu bir miktar rahatlatiyorlardi.
GeForce ile hayatimiza GPU kavrami girdi. T&L (Transform & Lighting) destekli bu kartlar dönüsüm ve isiklandirma islemlerini de CPU`nun üzerinden alarak sistemi önemli ölçüde rahatlattilar. Bu iki islemde ayni hesaplamalar üst üste defalarca yapildigindan bunlar donanimsal hizlandirma için çok uygundu. Her iki islemde de kayar nokta hesaplari yapildigindan bunlar CPU`nun üzerinde çok agir bir yük olusturuyorlardi. Bu sayede CPU da baska islere yogunlasabilecekti (yapay zeka gibi).
AGP
VLB, ISA, PCI erken sonunda ekran kartlarinin da islemciyle direk haberlesmek için kullanabilecekleri yüksek bant genisligine sahip slotlari oldu. PCI 2.1 spesifikasynlariyla belirlenen AGP, PCI gibi 33 degil daha yüksek bant genisligi için 66 MHz`te çalisir.
AGP de tikpki PCI gibi 32 bit genisligindedir ama 66 MHz`te çalistigi için en en düsük hiz modunda bile 254.3 MB/s bant genisligine sahiptir. Bunun disinda kendine özel bir sinyallesmeye 2X, 4X ve 8X hizlarinda bu bant genisligi 2`ye, 4`e ve 8`e katlanir. Bu slotun baska bir avantaji da PCI veriyolundaki gibi bant genisliginin paylasilmamasi, AGP`nin bütün bantgenisligi ekran kartina aittir.
Bu degerler kulaga hos gelebilir ama uygulamalarda CPU, ekran karti disinda pekçok parçaya daha ulasmak zorundadir. AGP bantgenisligi yüksek olsa bile pratikte degisik AGP modlari arasinda sistemdeki diger darbogazlar yüzünden beklenilen performans farki olmaz çogu zaman.
AGP, pipeliningi(Is bölümü) de destekledigi için sistem kaynaklarini daha verimli kullanabilir, pipeliningin ne oldugunu merak edenler Islemcilerle ilgili yazimiza göz atabilirler. AGP’nin bir digeravantaji da ana bellegi görüntü bellegiyle paylasabilmesidir. Bu sayede çok yüksek miktarda görüntü bellegine ihtiyaç duyulmadan gerektiginde ana bellek görüntü bellegi olarak kullanilabilir.
API Kavrami
Ekran kartlari büyük bir hizla gelisiyor ve hemen her kartin farkli özellikleri var. Programcilarin da her kart için ayri kod yazmalari mümkün olmadigina göre bütün kartlarin ve yazilimin anlasabilecegi ortak bir platforma ihtiyaç var.
Iste bu boslugu API (Application Programming Interface, Uygulama Programlama Arayüzü) dolduruyor. API, uygulamalarla onlari çalistiran donanimin anlasmasini sagliyor. Programlar kodlarini direk donanima aktarmadan standart biçimde API`ye aktariyorlar. Ekran kartinin sürücü yazilimi da API`den aldigi bu standart kodlari kartin kullanabilcegi sekle çevirip karta ulastiriyor. Oyunlarda en sik kullanilan iki API OpenGL ve Direct3D`dir.
OpenGL
1992`de Unix tabanli X terminaller için genel bir CAD ve 3B API`si olarak Silicon Graphics`in IrisGL kütüphanesinden türettigi OpenGL önceleri sadece is uygulamalariyla kistilanmisti (mekanik tasarim ve bilimsel analiz gibi). 1996`da Windows versiyonunun gelistirlimesinden sonra oyun yapimcilari tarafindan çok tutuldu ve halen yaygin olarak kullaniliyor.
OpenGL gelismis pekçok teknigi destekler, texture mapping (yüzeyleri bir grafik dosyasiyla kaplamaya yarar), antialiasing, saydamlik, sis, isiklandirma, smooth shading (bir yüzeyden yansiyan isik yüzey boyunca farkli etkilerde bulunsa bile shading yapilabilmesini saglar), motion blur (hareket eden görüntü arkasinda iz birakir) ve modelling transformation (nesnelerin sanal uzaydaki büyüklüklerini, yer ve perspektiflerini degistirmeye yarar) gibi.
Özellikleri bakimindan Direct3D`ye benzese de 3B bir sahnenin basit elemanlari ve bunlara uygulanacak efekler üzerinde çok etkili bir kontrol saglar.
OpenGL, donanim tarafindan iki seviyede desteklenebilir. ICD (installable client drivers) isiklandirma, dönüsüm ve rasterizationi (bakis açimidaki pikselleri tanimayi saglayan bir algoritma) desteklerken MCD (mini client drivers) sadece rasterization destegi vardir. MCD sürücüleri yazmak daha kolaydir ama performans konusunda ICD çok daha üstündür.
Direct 3D
Direct3D`nin donanimdan bagimsiz yazilim gelistirilmesine izin veren kismi HAL`dir (Hardware Abstraction Layer). HAL, genel olarak desteklenen özellikler için bir arayüz olusturur ve sürücülerin kendisi üzerinden donanima erismesinze izin verir.

Direct3D, OpenGL`e denk sayilabilecek bir düsük seviye moduna sahip olmasina ragmen çogu zaman OpenGL kadar esnek olmamakla elestirilir.
Direct3D ishattinda ekran karti devreye girmeden önce geometri hesaplamalarini islemci yapar. DirectX 6.0`da birlikte rendering islemleri iyilestirildi multitexturing (bu özellige sahip kartlar tek geçiste birden çok dokuyu isleyeiblirler) destegi eklendi. Ayrica görüntü kalitesini arttiran anisotropic filtering (nesneler uzaklastikça düsen görüntü kalitesini iyilestirir) ve bump mapping (düz yüzeyler üzerinde gerçek kaplama ve isik efekti yapilmasini saglar).
DirectX 7.0 bize donanimsal T&L hizlandirmasi destegini getirdi,8.0 versiyonuyla ise hayatimiza hem piksel hem de geometri seviyesinde programlanabilir shaderlar girdi. Bu programlanabilir shaderlar sayesinde görüntüler gerçege daha da yaklasti. DirectX 9.0 ile bu shaderlar daha da gelistirildi.
bu döküman volkan sonegin yazilarindan dercedilmistir