nehe.gamedev.net adresinden bir sürü tutorial bulabileceğiniz grafik programlama olayı. ayrıca derslerin sonunda değişik dillere* cevrilmiş kodları bulabilirsiniz.
azıcık desteklense directx'i piyasadan silecek olan grafik kütüphanesi.
Bakıyorum, opengl kullanan hiç bir firma yok neredeyse; ona rağmen opengl bu seviyede. bir iki firma opengl ile oyun çıkartsa neler neler olur düşünemiyorum bile.
bu yüzden directx ile kıyaslamak aslında çok doğru değildir. çünkü directx; ses ve girdi-çıktı işlemlerini de destekler.
ama grafik konusunda directx ile kapışır.
tek eksiği; piyasada destekçisinin pek bulunmayışıdır.
yani kendi içinde multi-thread bir çalışma biçimi olabilir, ondan pek emin değilim. ama siz bir opengl handler'i oluşturduğunuzda buna diğer threadlerden erişemiyorsunuz, sadece oluşturduğunuz threadden erişebiliyorsunuz.
bunun sebebi de farklı threadlerin aynı anda ekran kartının aynı bölümüne erişmesinin, grafik işlemlerinin stabilitesini düşüreceğinin düşünülmesiymiş.
not: bu dediğim opengl 2.1 için. daha sonraki sürümlerde bu durumun değişip değişmediğine dair hiç bir fikrim yok.
OpenGL (Open Graphics Library), 2D ve 3D vektör grafikleri oluşturmak için çapraz dil, platformlar arası bir uygulama programlama arayüzüdür (API). API tipik olarak bir grafik işlem birimi (GPU) ile etkileşimde bulunmak için kullanılır ve donanım hızlandırılmış render elde eder.
Silikon Grafik, Inc. (SGI) 1991'de OpenGL'i geliştirmeye başladı ve 30 Haziran 1992'de piyasaya sürdü. Bilgisayar destekli tasarım (CAD), video oyunları, bilimsel görselleştirme, sanal gerçeklik ve uçuş simülasyonu dahil olmak üzere çeşitli uygulamalar için kullanılır. 2006 yılından bu yana OpenGL, kar amacı gütmeyen teknoloji konsorsiyumu Khronos Group tarafından yönetilmektedir.
Tasarım
OpenGL spesifikasyonu, 2D ve 3D grafik çizimi için soyut bir uygulama programlama arayüzünü (API) açıklar. API'nin tamamen bir CPU'da çalışan yazılımlarda uygulanması mümkün olsa da, GPU gibi donanım hızlandırma işleminin çoğunlukla veya tamamen kullanılmasıyla uygulanacak şekilde tasarlanmıştır.
API, bir dizi isimsiz tamsayı sabitinin yanı sıra istemci programı tarafından adlandırılabilecek bir dizi işlev olarak tanımlanır (örneğin, 3553 ondalık numaraya karşılık gelen sabit GL_TEXTURE_2D). işlev tanımları, C programlama diline yüzeysel olarak benzer olsa da dilden bağımsızdır. Bu nedenle, OpenGL'nin birçok dil bağlama özelliğine sahiptir; en dikkat çekici olanlardan bazıları, bir web tarayıcısından 3D render için JavaScript bağlayıcı WebGL (API, OpenGL ES 2.0'a dayanan API); C bağlayıcıları WGL, GLX ve CGL'yi bağlar; iOS tarafından sağlanan C bağlayıcısı; ve Android tarafından sağlanan Java ve C bağlayıcıları.
Dilden bağımsız olmanın yanı sıra, OpenGL de çapraz platformdur. Spesifikasyon, bir OpenGL bağlamını elde etme ve yönetme konusunda hiçbir şey söylemez ve bunu altta yatan pencere sisteminin bir ayrıntısı olarak bırakır. Aynı nedenle, OpenGL tamamen render ile ilgilidir ve giriş, ses veya pencere ile ilgili hiçbir API'si sağlamaz.
Gelişme
OpenGL artık aktif gelişimde değilken, 2001 ve 2014 yılları arasında OpenGL spesifikasyonu çoğunlukla yıllık olarak güncellendi. 2009'da iki sürüm (3.1 ve 3.2) ve 2010'da üç (3.3, 4.0 ve 4.1) gerçekleşti. En son OpenGL spesifikasyonu 4.6, üç yıllık bir aradan sonra 2017'de piyasaya sürüldü ve çekirdek profile on bir mevcut ARB ve EXT uzantılarının dahil edilmesiyle sınırlıydı.
OpenGL'in aktif gelişimi, 2016 yılında piyasaya sürülen Vulkan API lehine düşürüldü ve ilk geliştirme sırasında kod adı glNext olarak anıldı. 2017'de Khronos Group, OpenGL ES'nin yeni versiyonlarına sahip olmayacağını açıkladı ve o zamandan beri Vulkan ve diğer teknolojilerin geliştirilmesine odaklandı. Sonuç olarak, modern GPU'lar tarafından sunulan belirli yetenekler, örneğin ışın izleme, OpenGL standardı tarafından desteklenmez. Bununla birlikte, satıcıya özel OpenGL uzantıları aracılığıyla daha yeni özellikler için destek sağlanabilir.
OpenGL özelliklerinin yeni sürümleri, her biri API'yi çeşitli yeni özellikleri desteklemek için genişleten Khronos Group tarafından yayınlanmaktadır. Her sürümün ayrıntıları, grafik kartı üreticileri, işletim sistemi tasarımcıları ve Mozilla ve Google gibi genel teknoloji şirketleri de dahil olmak üzere grubun üyeleri arasında fikir birliği ile kararlaştırılır.
Çekirdek API'nin gerektirdiği özelliklere ek olarak, grafik işleme birimi (GPU) satıcıları uzantılar şeklinde ek işlevsellik sağlayabilir. Uzantılar yeni işlevler ve yeni sabitler sunabilir ve mevcut OpenGL işlevlerine yönelik kısıtlamaları gevşetebilir veya kaldırabilir. Satıcılar, diğer satıcılardan veya bir bütün olarak Khronos Group'tan destek almadan özel API'leri açığa çıkarmak için uzantıları kullanabilir ve bu da OpenGL'nin esnekliğini büyük ölçüde artırır. Tüm uzantılar OpenGL Kayıt Defteri'nde toplanır ve tanımlanır.
Her uzantı, onu geliştiren şirketin ismine dayanan kısa bir tanımlayıcı ile ilişkilidir. Örneğin, Nvidia'nın tanımlayıcısı, uzatma adının bir parçası olan NV'dir. GL_NV_half_float, sabit olan GL_HALF_FLOAT_NV ve fonksiyon glVertex2hNV(). Birden fazla satıcı aynı API'yi kullanarak aynı işlevselliği uygulamayı kabul ederse, tanımlayıcı EXT kullanılarak paylaşılan bir uzantı yayınlanabilir. Bu gibi durumlarda, Khronos Group'un Mimarlık inceleme Kurulu'nun uzantısına açık onaylarını vermesi de olabilir, bu durumda tanımlayıcı ARB kullanılır.
OpenGL'nin her yeni sürümü tarafından tanıtılan özellikler, tipik olarak yaygın olarak uygulanan birkaç uzantının, özellikle ARB veya EXT tipi uzantılarının birleşik özelliklerinden oluşur.
https://streamable.com/27nuyh
yanına c++ ve sfml yi de ekleyerek,
hareketsiz objelere,
çarpışma mekanikleri,
kinematik ve dinamik denklemlerinin can verdiği basit bir fizik motoru bile tasarlayabilirsiniz!