Anasayfa Eğitseller Oyun Yapımı DirectX Eğitselleri Bölüm 4 - Direct3D'yi Başlatmak

DirectX Eğitselleri Bölüm 4 - Direct3D'yi Başlatmak PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 0
ZayıfEn iyi 
Eğitseller - Oyun Yapımı
Salı, 19 Ağustos 2008 00:04
Artık bir penceremiz olduğuna göre Directx'i başlatabiliriz. Bu eğitselde en sade haliyle bir directx uygulaması hazırlayacağız. Bir önceki eğitseldeki pencere kodunu aynen kullanarak başlayacağız.

Direct3d ' ye erişmek için d3d9.h başlık dosyasına ihtiyacımız var, ayrıca şimdi kullanmayacak olsakta birçok yardımcı metod içeren d3dx9.h başlık dosyasınıda ekliyoruz. Son olarak d3d9 ve d3dx9 kütüphanelerini proje ayarlarında bağlamamış isek pragma direktifi ile bağlıyoruz.

#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
Direct3d nesnesini oluşturmak için 3 adım izleyeceğiz. Bir sonraki eğitselde bunu biraz daha detaylı hale getirip tekrar kullanılabilir bir sınıfa gömeceğiz.

1-Öncelikle bir IDirect3D9 nesnesine ihtiyacımız var. Bu nesne sistemimizdeki fiziksel cihazları bulmaya ve direct3d aygıt nesnesini oluşturmamıza yarayacak. Bu nesneyi yaratırken çoğunlukla SDK_VERSION parametresi kullanılır, daha eski bir sürüm isterseniz onun değerini yazmanız gerekir.

IDirect3D9* d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
2-Direct3d nesnesini oluşturmak için gerekli parametreleri atamamız gerekiyor. Bunun için bir D3DPRESENT_PARAMETERS yapısı dolduracağız. Burada olayı sade tutmak için birçok parametreye dokunmadık.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp)); //sıfırla
d3dpp.Windowed = true; //pencere
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //en uygunu
3-Artık nesnemizi oluşturabiliriz. Burada bir detaya değinelim; device oluşturma, silme ve resetleme işlemleri ana pencere ile aynı thread'de bulunmalıdır.
d3d9->CreateDevice(D3DADAPTER_DEFAULT,  //varsayılan aygıt
D3DDEVTYPE_HAL, //device türü
hwnd, //device ile ilişkilendirilen pencere
D3DCREATE_SOFTWARE_VERTEXPROCESSING, //vertex işleme yöntemi
&d3dpp, //present parameters
&device); //yaratılan device
Son olarak IDirect3D9 nesnesi ile işimiz bittiği için SAFE_RELEASE makrosu ile siliyoruz. Bu makronun kullanım nedeni bu nesnenin bir COM objesi olması.
SAFE_RELEASE(d3d9);
Şu konumda direct3d nesnesi oluşturulacak ama hiç bir iş yapmayacaktır. Daha önce yazdığımız döngüye arka planı belirli bir renkle temizleyen kodu ekliyoruz.
//back bufferı temizle - arka plan koyu mavi
device->Clear(0,0,D3DCLEAR_TARGET,0x00000055,1.0f,0);
//birşeyler çizmeye başladığını bildir
device->BeginScene();
//çizme işlemlerini bitirdiğini bildir
device->EndScene();
//çizilen kareyi öne getir
device->Present(0, 0, 0, 0);

Clear metodunun aldığı parametrelerin çoğu şu aşamada önemsiz. Burada kısaca çizim yüzeyini temizliyoruz. 0x00000055 değeri ise arka plan rengini temsil eden 16'lık sistemde bir değerdir. Bu örnekte herhangi bir çizim işlemi yapmadık ama tahmin edebileceğiniz üzere çizim işlemleri Begin&End scene çağrıları arasında yapılacaktır.

Kaynak Kodu İndir



-------- EKSTRALAR --------

Ekran Kartı Bilgisi Kodu:

http://directx.oyungelistirici.net/dx/onbilgi.rar

Kavramlar:
 
http://www.oyungelistirici.net/index.php/egitseller/14-oyunyapimi/233-kavramlar

DirectX Kaynakları:

http://www.chadvernon.com/blog/tutorials/
http://www.directxtutorial.com/
http://www.zanir.szm.sk/index.html
http://www.pieterg.com/
http://www.32bits.co.uk/
http://triplebuffer.devmaster.net/tutorials/archive/
http://www.two-kings.de/
http://www.mvps.org/directx/indexes/index.htm
http://www.drunkenhyena.com/cgi-bin/directx.pl

DirectX Kitapları:

http://www.amazon.com/ adresinde DirectX'i aratmanız yeterli.

-------- ÖNEMLİ --------

-Bu sitedeki dökümanlar Türkçe kaynak eksikliği yüzünden hazırlanmış ve ihtiyaç duyanların serbest kullanımına sunulmuştur.

-Sunulan kodlar ve bilgilerin doğruluk ve etkinlikleri konusunda bir garanti verilmemekle beraber her türlü talep ve düzeltmelerinizi mail yada ilgili forum başlığı yoluyla iletebilirsiniz

-Dökümanlarda daha çok genel kavramlara değinilmiş olup detaylı bilgi edinmek için directx dökümanını ve çeşitli kaynakları (özellikle kitap) okumanız tavsiye edilir. Farklı kaynakların bağlantılarını bu dökümanın sonunda bulabilirsiniz.

-Bu eğitsellerden verim alabilmek için orta düzeyde c++ bilgisi yeterlidir. Onun dışında winAPI hakkında bilgi sahibi olmak directx'i kavramakta size yardımcı olacaktır. Ayrıca eğitseller ardışık bağlantılı olduğu için bu işte yeni iseniz sırayla gitmeniz tavsiye edilir.

-Örnek kodlar Virusl Studio 2003 projeleridir, vs2005 ile de kullanılabilir.

-Kavramları Türkçeleştirmek için çok çaba sarfedilmemiştir, çoğu yerde İngilizce isimler kullanılmıştır. Merak ettikleriniz için kavram sözlüğüne bakabilirsiniz.

-İndireceğiniz yazılımlardan dolayı PC'nizin ya da bünyenizin zarar görmesi durumunda sorumluluk kabul etmeyiz, geçmiş olsuna gelebiliriz :)

-Yazılanların hakkı saklı değildir, sağda solda ben yaptım diye dağıtabilirsiniz :)
 
Yunus KARA
Son Güncelleme ( Salı, 19 Ağustos 2008 01:22 )
  Yorum yok.
Yorum ekle. (0 yorum)

 

OyunGelistirici.net - Türk Oyun Yapımcılarının Buluşma Noktası

Bu sitede yazılan tüm yazıların hakları yazarlarına aittir. İzin alınmadan yayınlanamaz.

Bu sitede Firefox kullanmanız önerilir. En az 1024 x 768 masaüstü çözünürlüğü tavsiye edilir.