Öncelikle şunu söyleyeyim. Bu bölümdeki makaleleri anlayabilmek için sağlam bir JavaScript bilgisine ihtiyacın var. Eğer JavaScript'i bilmiyorsan, (her ne kadar tüm kategorilerde paralel makale yazsam da) öncelikle Temel JS kategorisindeki makaleleri bitirmeni veya başka bir kaynaktan JavaScript öğrenmeni tavsiye ederim. Eğer makaleleri okumaya devam ediyorsan, JavaScript'i iyi bildiğini varsayıyorum.

Allah'ım sana çok şükür. Nihayeti sıra, en çok zevk alarak makale yazdığım bölüme geldi. Dile kolay be kardeşim. Benim ne zamandır oyun yapma hevesiyle yandığımı biliyor musun? Daha 10 yaşındayken ZX Spectrum üzerinde Basic dili ile çöp adamlardan Street Fighter yapmaya çalışıyordum. Zaman içerisinde DirectX, OpenGL ve ilk çıktığı sıralarda XNA ile denemelerim oldu. Kaç tane 3D CAD kitabı bitirdim. Ama zor iş be birader. Matrix transformasyonuna mı yanayım, Shader yazmasına mı. Bir de, bu işten para kazanmıyorsan da hobi olarak yapıyorsan, işin sonu gelmiyor(du!).



Ama bugün çok çok farklı bir noktadayız. Allah'ım, anlatacağım o kadar çok şey var ki. Neyse, heyecan yok, yavaş yavaş gidelim.

İnşallah WebGL nedir duymuşsundur. Bugün programcı olup da, oyun veya 3D programlamaya biraz olsun hevesi olan ama WebGL'i bilmeyen arkadaşlar önce oturup biraz ağlasınlar. Ağlama bittikten sonra alt paragrafa geçebilirler.

WebGL, Khronos Group adı verilen şirketler birliğinin yürüttüğü, OpenGL ES üzerinde temellendirilmiş ve bu makaleyi yazdığım sırada henüz Beta aşamasında olan bir proje. Öyle bir proje ki, bununla JavaScript dili ile web tarayıcıları üzerinde çalışacak şekilde 3D programlar yazabiliyoruz.

Bu çok mu büyük bir olay? Bir düşünelim bakalım...
  1. Oyun projemizi WebGL üzerinde yazarsak, oyunu oynamak isteyenlerin bilgisayarlarına herhangi bir kurulum yapmasına gerek kalmaksızın, sadece bizim verdiğimiz internet adresine girmeleri yeterli olur. Böylece favori oyununu işte, tatilde, internet kafede, her yerde oynayabilir, devam edebilir.
  2. Bu şekilde 3D MMOG (Massively Multiplayer Online Game) yazmak mümkün olur. Üstelik bunu yapmak için Unity gibi bir platform kullanmamıza ve oyunu oynayacak kullanıcıların tarayıcılarına bir Player eklentisi kurmalarına da gerek kalmaz.
  3. JavaScript'ten bahsediyoruz. Oyunu bir kere yazarız. (Uygun kontroller sağlanarak) Windows'ta, Linux'ta, Mac OS'ta, Android'de ve IOS'da da, herhangi bir eklentiye gerek kalmadan çalışır.
  4. Daha da güzeli, tüm bu platformlar aynı anda karşı karşıya oyun oynar. Örneğin biri Android'de, diğeri Windows'ta iki kişi araba yarışında kapışabilir.
  5. "Korsan Oyun!" dönemi kapanır. Kimsenin bilgisayarında bir şey kurulu olmadığı için, kullanıcıların oyunu korsan yoldan elde etmeleri mümkün olmaz. Aylık ödeyecekleri bir bedel ile onlara birer kullanıcı adı ve şifre veririz. Ardından siteye girip bu kullanıcı adı ve şifreyi girmesini isteriz(Elbette burada aynı kullanıcı adını farklı lokasyonlarda kullanma veya eş zamanlı kullanma kontrolleri gibi ek kontroller gerekecektir, o kadarını da yapalım artık).
  6. Neden sadece oyun gözüyle bakıyoruz ki? 3D program dedik. Şöyle bir proje düşün. 3D ortamda tasarlanmış bir sanal markete giriyorsun. Önünde alışveriş arabası, reyonlar arasında dolaşıyorsun. Raftan alacaklarını önündeki alışveriş arabasına atıyorsun. Seninle aynı anda markette bulunan diğer insanları da, önlerinde alışveriş arabası markette dolaşırken görüyorsun. Onlarla iletişim kuruyorsun, tavsiye alıyorsun. Hemen yan reyonda domates alan kıza yazıyorsun...

Emin ol, burada yazdıklarım hiçbir şey. Bundan sonrası senin hayal gücüne kalmış. Peki neden bu kadar heyecanlıyım? WebGL'de uygulama geliştirmek çok mu kolay?

İşin aslı çok kolay değil. JavaScript'te WebGL ile uygulama geliştirmek için biraz alt seviye bilgiye ihtiyacın olacaktır. Ayrıca yazman gereken kodun satır sayısı da hatırı sayılır seviyede olacak. Eee, o zaman nedir bu gürültü?

Şu anda iki tane proje var kardeşim. Bunlardan biri Three.JS, diğeri de Babylon.JS. Bu ikisi, JavaScript üzerinde WebGL ile uygulama geliştirmek için kullanılabilecek birer kütüphane. Ama nasıl anlatayım, bilmiyorum. Bu ikisi ile 3D uygulama geliştirmek, makarna yapmaktan biraz daha zor, patates kızartması yapmaktan biraz daha kolay. Öyle ki, sıfırdan Three.JS'i öğrenmem 5 gün sürdü. Sonrasında toplamda 47 saatte, elle tutulabilir bir araba yarışı yaptım. Gerçi rakip yoktu, araba piste gezinip duruyordu ama ivmelenme, fizik kuralları, collision detection, farklı kamera açıları, dikiz aynası, yansıma vs. vardı.

Bu blog için Babylon.JS yerine Three.JS'i seçmemin sebebi ise, Three.JS'in daha uzun zamandır geliştiriliyor olması (2010), daha geniş bir ekip tarafından geliştiriliyor olması (ben bu makaleyi yazarken 203 kişiydi) ve diğer alternatife göre daha oturmuş bir yapıya sahip olmasından kaynaklanıyor.

Not : WebGL henüz beta aşamasında olduğu için şu anda sadece Internet Explorer 11+, Google Chrome 9+, Mozilla Firefox 4+, Safari 6+ ve Opera 12+ tarafından destekleniyor. Henüz beta aşamasında olduğu için bazen tarayıcıların uygulamayı durdurmasına ve sayfanın Refresh edilmesine ihtiyaç duyuyor. Ayrıca Android Chrome gibi bazı tarayıcılarda WebGL desteği varsayılan olan kapalı geliyor ve kullanıcı tarafından açılması gerekiyor. Örneğin Android'de bunu açmak için Chrome'da "chrome:\\flags" adresine girmek ve burada "Enable WebGL" seçeneğini aktif hale getirmek gerekiyor. Henüz Beta aşamasında olduğu için bunları anlayışla karşılamak lazım.

WebGL'e giriş mahiyetindeki ilk makalemi burada noktalıyorum. İnşallah bu kategorideki makaleler ile sıfırdan başlayarak adım adım Three.JS'de 3D uygulama nasıl geliştirilir, birlikte öğreneceğiz.


Geri
Bu ilk makaledir
İleri
Emeklemeye Başlıyoruz

Yorum Gönder

 
Top