# OpenSceneGraph
OpenSceneGraph açık kaynaklı, geçişli platformlarda uçuş simülasyonu, oyun, sanal gerçeklikler ve bilimsel sanallaştırmalar gibi yüksek performansta grafik uygulamaları geliştirebilmek için kullanılan grafik araçlarıdır. SceneGraph kaynağının temelini, OpenGL’nin üzerinde bulunarak geliştiriciyi düşük seviyeli grafik çağırımlarını uygulama ve uyumlaştırma gibi işlemlerden kurtaran nesneye yönelik bir framework ile desteklemektedir. Ayrıca grafik uygulamasında hızlı geliştirme için birçok ek özellikleri (utilities) de desteklemektedir.


## Geçmiş.
Don Burns 1997 yılında Silicon Graphics Inc. (SGI) şirketine yazılım danışmanı olarak işe girdi. Boş zamanlarında da “Hang Gliding” konusunda çalışmalar yapıyordu. Bilgisayar grafiklerine ve “Hang Gliding” üzerine olan ikili ilgisi, yüksek grafik renderer cihazlarına erişebilir olması yoluyla birlikte, ister istemez scene graph çalıştırıcılarını (SGI mülkiyetindeki) kullanan SGI Onyx sistemlerinde çalışabilen “Hang Gliding” simülatörünü geliştirmesiyle sonuçlandı.
Don SG'deki gibi basitleştirilmiş Performer SG yazmaya başladı. Amacı SceneGraph'ın basit ve kolay kullanılabilir olmasıydı. Nihayet, SGI Linux sistem üzerine Performer yükledi ve Don'ın SG scene graph'ına ihtiyacı kalmadı.
Robert Osfield ve Don 1990 lardan önce “Hang Gliding” heveslileri mail listesinden tanışmıştı. Robert Hang Glider üreticileri için tasarım danışmanı olarak çalışıyordu ve modelleme uyumluluğu üzerine deneyimi vardı. Don'ın Performer kullanımından mutlu olmasıyla, SG üzerindeki ilgisi kayboldu ve proje liderliğini Robert'a bırakarak projeyi devir etti.
Robert Osfield ile birlikte SG üzerine çalışmalara katılan yeni geliştiricilerle birlikte SG projesinin adını OpenSceneGraph şeklinde değiştirerek geniş kullanım alanları sağlamaya başladı. SG projesi Don tarafından Robert'a bırakıldığında sadece 8 geliştiricisi olan OSG neredeyse 2000 kullanıcının geliştirdiği bir proje haline gelmiştir.


## Araçlar.
OSG çalışma anında (Runtime) dinamik olarak yüklenen kütüphaneler (ya da paylaşımlı nesneler) ve çalıştırılabilir (executables) dosyalar kümesi gibi bulunmaktadır. Bu kütüphaneler beş farklı kaynak olarak bölünür;
  - Çekirdek OSG (Core OSG) : Temel scene graph ve rendering işlemlerini desteklemekte ve aynı zamanda 3 Boyutlu uygulamalarda gerekli olan basit gereksinimleri de içeren ek işlevselliklere sahiptir.
  - OSG Düğüm Araçları (OSG NodeKits) : Yüksek seviyeli düğüm tipleri ve özel efektleri desteklemek için Çekirdek OSG (Core OSG) scene graph düğümünden türetilmiştir.
  - OSG Eklentileri (OSG Plugins) : 2 Boyutlu resimleri ve 3 Boyutlu modelleri okuyup yazabilmek için geliştirilmiş bir kütüphanedir.
  - Birlikte Çalışabilirlik (InterOperability) : OSG'nin Phyton ve Lua gibi betik (scripting) dillerinde olduğu gibi farklı ortamlarla kolayca bütünleştirilebilmesini sağlayan bir kütüphanedir.
  - Uygulamalar ve Örnekler (Application & Examples) : Uygulama ve örneklerin yaygın koleksiyonu kullanışlı işlevleri sağlar ve doğru OSG kullanımını gösterir. OSG dağıtımları derleme ve genel OSG geliştirme işlemlerinde kolaylık sağlayan beş kullanışlı OSG yardımcı programı içermektedir. 
  - osgarchive : Bu uygulama dosyalarınızı OSG .osga arşiv dosyasına eklemenize izin verir. Ayrıca bu uygulama arşiv dosyalarınızı çıkarmanızı (extact) ve listelemenizi sağlar.
  - osgconv : Bu uygulama bir dosya formatını başka bir formata dönüştürür. Bu özellikle herhangi bir formattaki dosyanızı optimize edilmiş .ive dosyasına çevirmek için kullanışlıdır.
  - osgdem : Bu uygulama aracı yüksekti ve resim verilerini sayfalı yüzey veritabanına (paged terrain database) dönüştürmede kullanılır.
  - osgversion : Var olan OSG'nin versiyon numarasını std::cout 'a basar.
  - ogviewer : Bu uygulama OSG'nin esnek ve güçlü bir model gösterimcisidir.


## Özellikleri.
OSG'nin asıl amacı scene graph teknolojisinin yararlarını ticari ve ticari olmayan kullanıcı gruplarının her ikisine birden ücretsiz elde edebilmelerini sağlamaktadır. Tamamıyla Standart C++ ve OpenGL üzerine yazılmıştır, STL ve DesignPattern kütüphanelerini kullanabilmektedir ve açık kaynak gelişim modelinin gücünü son kullanıcıların ihtiyaçları üzerine odaklanan ve ücretsiz olarak kalıtımını sürdüren bir geliştirme kütüphanesini desteklemektedir. OSG'nin özellikleri; performans, üretkenlik, veritabanı yükleyicileri, düğüm araçları ve taşınabilirlik başlıkları altında özetlenecektir. Bunlar;
A - Performans
Çekirdek scene graph parçaları olan frustum culling, occlusion culling, small feature culling, Level Of Detail (LOD) nodes, state sorting, vertex arrays, vertex buffer objects, OpenGL Shader Language ve display lists gösterimlerini destekler. Bunların hepsi birlikte OSG'yi mevcut grafik araçları arasında çok yüksek performanslı yapar.
Ayrıca OSG scene graph'ın üzerinde bulunan Continuous Level of Detail (CLOD) ağlarının (meshes) uygulanmasında olduğu gibi çizim işlemlerinin kolay uyarlanabilmesini de destekler. (bakınız VTP ve Delta3D).
B - Üretkenlik
Çekirdek scene graph OpenGL'in en son eklentileri ve birçok fonksiyonunu sarmalamaktadır, seçme (culling) ve sıralama (sorting) gibi rendering optimizasyonlarını ve yüksek performansta grafik uygulamalarını çok hızlı olarak geliştirilmesini olanaklı hale getiren tüm eklenebilir kütüphane kümelerini desteklemektedir. Uygulama geliştiricisi içeriği toplama ve bu içeriği kontrol etmede düşük seviyeli kodlamadan daha fazla bağımsızdır. Bu da kullanıcılara OSG'yi kendi projelerine eklenmede ve uyumlaştırmada kolaylık sağlar.
C - Veritabanı Yükleyicileri
Veritabanı okumak ve yazmak için veritabanı kütüphanesi (osgDB) geniş çeşitlilikteki veritabanı formatlarını genişletilebilir dinamik eklenti mekanizmaları yoluyla ekleyebilmeyi destekler – güncel OSG dağıtımları çeşitli 3 Boyutlu veritabanı ve resim formatlarını yükleyebilmek için 55 farklı eklentiye sahiptir. 3 Boyutlu veritabanı yükleyicileri; COLLADA, LightWave (.lwo), Alias Wavefront (.obj), OpenFlight (.flt), TerraPage (.txp) including multi-threaded paging support, Carbon Graphics GEO (.geo), 3D Studio MAX (.3ds), Performer (.pfb), AutoCAd (.dxf), Quake Character Models (.md2). Direct X (.x), and Inventor Ascii 2.0 (.iv)/ VRML 1.0 (.wrl), Designer Workshop (.dw) and AC3D (.ac) and the native .osg ASCII formatlarıdır. Resim yükleyicileri ise ; .rgb, .gif, .jpg, .png, .tiff, .pic, .bmp, .dds (include compressed mip mapped imagery), .tga and quicktime (under OSX). Bütün bölümlerde yüksek kalite, keskinlik yumuşatıcı (anti-aliasing) fontları bağımsız eklentiler yoluyla yüklenebilmektedir ve resim tabanlı fontlar da .txf eklentisi yoluyla yüklenebilmektedir. Ayrıca kullanıcılar eş projeler (VTP) yoluyla büyük ölçekli uzamsal (geospatial) yüzey (terrain) veritabanlarını oluşturabilirler ve OSG'nin temel veritabanı sayfalama desteği ile bu veritabanlarını görüntüleyebilirler.
D - Düğüm Araçları
Ayrıca scene graph uygulamanızla birlikte derlenebilen ya da çalışma ananda yüklenebilen ayrık kütüphanelere de Bağlantı Araçları (Node Kits) kümesi altında sahiptir. Bu kütüphaneler particle systems (osgParticle), high quality anti-aliased text (osgText), special effects framework (osgFX), shadow framework (osgShadow), interactive controls (osgManipulator) ve visual simulation centric effects (osgSim) destekleri için eklemektedirler.
E - Taşınabilirlik
Çekirdek scene graph tüm özel ortamlar üzerinde Standart C++ ve OpenGL den biraz daha az gereksinim duyulan ufak farklılıklara sahip olması için tasarlanmıştır. Bu da scene graph teknolojisine geniş çeşitlilikteki ortamlara hızlı bir şekilde eklenebilmesine izin vermektedir – orijinal olarak IRIX için geliştirilmiştir, daha sonra Linux, Windows, FreeBSD, Mac OSX, Solaris, HP-UX, AIX ve şimdi de PlayStation2 ortamına eklenmiştir!
Çekirdek scene graph kütüphanesinin tamamen pencereleme (windowing) siteminden bağımsız olması kullanıcıların kendi pencere – özel kütüphane ve uygulamaların üzerinde - sistemlerini ekleyebilmelerini kolaylaştırmaktadır. Dağıtımlarda bulunan osgViewer kütüphanesi Windows (Win32), Unices (X11) ve OSX (Carbon) sistemleri altında doğal pencereleme desteği sunmaktadır. Ayrıca osgViewer kütüphanesi çok kolay bir şekilde sahip olduğunuz pencereleme araçlarıyla bütünleştirilebilir., örneklemek gerekirse Qt, GLUT, FLTK, SDL, WxWidget pencereleme sistemlerinde olduğu gibi. Cocoa ve MFC örnekleri OpenSceneGraph-2.0 dağıtımının bir parçasıdır. Scene graph sadece yüksek düzeyli (multi-core, multi-gpu systems and cluster) tümleşik cihazlar üzerinde çalışması için oluşturulmamıştır. Bu cihazlar içinde tasarlanmış olmasının yanı sıra scene graph OpenGL Display Listler ve kaplama (texture) nesneleri için birçok grafik içeriğini desteklemektedir ve seçim (cull) ve çizim (draw) aygıtları (traversals) yerelinde render edilen verileri cachelemek için tasarlanmıştır ve scene graph neredeyse tamamen sadece okuma işlemlerini kullanmaktadır. Bu birçok seçim-çizim (cull-draw) çiftlerinin birbirine bağlı olan çoklu grafik alt sisteminde bulunan çoklu işlemci üzerinde çalışmasına izin vermektedir. Çoklu grafik çevrelerine ve multi-threading işlemlere osgViewer aracılığı ile destek verir. Çoklu dil desteğini de Java, Lua ve Phyton gibi diller üzerinden kendiliğinden sunmaktadır.


## OSG Öğrenmek İçin İzlenebilecek Adımlar.
OSG hakkında yapmış olduğumuz bu kısa açıklamalardan sonra OSG üzerine daha detaylı incelemeler ve çalışmalar yapabilmek için izleyebileceğiniz adımlar aşağıdaki gibidir.
A - Kaynak Kodlar
Geliştiricilerin gözünden açık kaynaklı ürünlerin temel yararı kaynak kodlarının erişilebilir olmasıdır. OSG tabanlı bir uygulama geliştirdiğinizde, karşılaştığınız sorunlar OSG'nin kaynak kodlarında bulunan içsel işlemleri çözebilme yoluyla hızlı ve kolay bir şekilde çözülebilir.
Henüz böyle bir deneyimde bulunmadıysanız OSG'nin kaynak kodlarını indirip bilgisayarınızda derleyerek kendi binary'lerinizi oluşturabilirsiniz. OSG yi ilk kez derlemek karışık ve zaman alıcı olabilir, fakat bu keşif uygulama yazılımınızı geliştirirken geliştirme safhasında size mükemmel bir fayda sağlayacaktır.
Ayrıca OSG kaynak kodu dağıtımları OSG'nin birçok özelliğini öğreten iyi yazılmış ve bilgi vermeye yönelik örnek programlar gibi zengin koleksiyonlarla birlikte gelmektedir. Bu örnek programlar OSG ile uygulama geliştirecek herkes için çok değerlidir.
OSG uygulaması geliştirmek için sadece OSG binary'lerini kullanmak mümkündür, fakat kaynak kod dağıtımlarına erişmek, örnekler ve binary'leri derlemek geliştirme işlemlerini hızlandırır.
B – OSG'nin Web Sitesi (OSG Wiki)
OSG Wiki Web sitesi (OSGWiki) OSG'ye ait çok fazla değerli bilgileri içerir. Bunlar; güncel OSG haberler, download işlemleri için ipuçları, OSG kaynak kodlarının derlenmesi ve kurulumu ile ilgili bilgiler, OSG topluluğu üyelerinin katkıda bulunduğu ek belgeler, örnek veriler, OSG topluluğundaki olaylar hakkında bilgiler, OSG topluluğu tarafından yaratılan OSG ile uyumlu araçlar ve destek bilgileridir.
C – OSG Kullanıcıları Posta Topluluğu (osg-users E-Mail List)
OSG kullanıcıları elektronik posta topluluğu sizin diğer OSG kullanıcıları ve geliştiricileri ile iletişimde olmanızı sağlar. OSG kaynak kodlarını derlerken herhangi bir sorunla karşılaştığınızda, geliştirme sırasında karşılaştığınız problemi algılayamadığınızda ya da OSG'nin içsel işlemlerinde algılayamadığınız durumlar olduğunda, e-mail topluluğuna gönderilen posta genellikle kullanışlı ve yardımcı bilgilerin geri gelmesini sağlamaktadır.