iToverDose/Yazılım· 17 MAYIS 2026 · 12:03

C++ ve Vulkan ile 3D Motoru Nasıl Sıfırdan İnşa Edilir?

Web geliştiriciler için C++ ve Vulkan kullanarak ilk 3D motorunu sıfırdan oluşturmaya adım adım rehber. Pratik araçları, derleme sürecini ve temel mimariyi keşfedin.

DEV Community3 dk okuma0 Yorumlar

Yıllardır web dünyasında çalışıyorum: TypeScript, Node.js, React... Peki ya teknolojiye olan ilgimin kökeni? Süper Mario 64 oyunuydu. O oyunu oynadığımda 3D grafiklerle tanıştım ve bu deneyim hayatımda kalıcı bir iz bıraktı. Ultra adlı projem ise bu nostaljik heyecanı modern bir 3D motoruna dönüştürme çabası.

Bu motoru C++ ve Vulkan kullanarak, temelden inşa etmeye karar verdim. Amacım sadece "fonksiyon çağır, üçgen görüntüle" düzeyinde kalmaktan ziyade, GPU’nun nasıl çalıştığını, piksellerin ekrana nasıl ulaştığını ve kod ile ekran arasındaki tüm süreci gerçek anlamda anlamaktı. Hem kendi merakımı gidermek hem de web geliştiricileriyle deneyimlerimi paylaşmak istedim.

Neden Bu Proje Var?

Web geliştiriciler için C++ ve Vulkan yepyeni bir dünyadır. JavaScript dünyasında SOLID ilkeleri, soğan mimarisi ve bağımlılık enjeksiyonu üzerine odaklanırken, benim asıl ilgim grafik motorlarının derinliklerine inmekti. Ultra projesi, bu merakımı gidermek için başlattığım bir yolculuk.

Projeye adım attığımda, bilgisayar grafiklerinin temellerini öğrenmeye başladım. GPU’nun nasıl komut aldığını, piksellerin ekrana nasıl aktarıldığını ve kod ile ekran arasındaki sürecin nasıl işlediğini anlamak istedim. Ultra’nın ismi de Nintendo 64’ün orijinal adı olan Ultra 64’e bir saygı duruşu olarak seçildi.

Bu seride, her adımı ayrıntılı olarak belgeleyeceğim. Web geliştiricilerine yönelik olacak şekilde, C++ ve Vulkan’a yeni başlayanlar için bir rehber niteliğinde olmasını hedefliyorum. Projeyi Codeberg üzerinde barındırıyorum. Bu platform, GitHub’ın kâr amacı gütmeyen, Avrupa Birliği’nde barındırılan bir alternatifidir.

Hangi Becerilere Sahip Olmalısınız?

Ultra projesini takip etmek için gereken temel beceriler web geliştiriciliğinden geliyor. Öncelikle JavaScript ve TypeScript’e hakim olmanız gerekiyor. Hem frontend hem de backend’de bu dillerle çalışmış olmanız, projenin yapısını anlamanızı kolaylaştıracak.

Node.js deneyiminiz de önemli. npm kullanımı, backend servisleri oluşturma ve Node.js çalışma zamanı hakkında bilgi sahibi olmanız gerekiyor. Tarayıcı API’leri konusunda da temel bir anlayışa sahip olmalısınız. DOM manipülasyonu, Canvas kullanımı ve tarayıcının sayfaları nasıl render ettiği hakkında fikir sahibi olmanız faydalı olacaktır.

Yazılım mimarisi ilkeleri de bu projede önemli bir rol oynuyor. Katmanlı mimariler, bağımlılık enjeksiyonu ve endişelerin ayrılması gibi kavramlar, projenin kod yapısını anlamanızı kolaylaştıracak.

Önemli bir nokta: C++ veya grafik programlama konusunda önceden deneyiminiz olması gerekmiyor. Bu seride bu konuları sıfırdan öğreneceğiz. Ancak yeni araçları araştırmaya ve dokümantasyonları okumaya alışık olmanız gerekiyor.

Geliştirme Araç Seti: C++ ve Vulkan’a Giriş

Web geliştiricileri için JavaScript dünyasında npm install ve node index.js gibi basit komutlar varken, C++ dünyasında işler biraz farklı ilerliyor. Ancak temeldeki kavramlar benzerlik gösteriyor.

Clang: Derleyici

JavaScript’te kodunuz doğrudan V8 veya SpiderMonkey gibi motorlar tarafından çalıştırılıyor. Bu motorlar JIT (Just-In-Time) derleme kullanıyor — kodunuzu çalışma sırasında makine diline çeviriyor ve sık kullanılan yolları optimize ediyor. Bu sayede hızlı başlangıç ve çalışma zamanı esnekliği sağlanıyor.

C++ ise tam tersine çalışıyor. Kodunuzu önceden derlemek (AOT - Ahead-Of-Time) gerekiyor. Clang, C++ kodunuzu makine diline çeviren bir derleyicidir. Bu derleyici .cpp dosyalarını okuyarak doğrudan CPU’nuzda çalışabilecek ikili dosyalar üretir. Bu ikili dosyalar çalıştırıldığında herhangi bir yorumlayıcı veya ek yük olmadan doğrudan çalışır.

İkisi arasındaki tercih basit: JIT derleme hızlı başlangıç ve çalışma zamanı optimizasyonu sunarken, AOT derleme uzun derleme süresi gerektirir ancak çıktı tamamen optimize edilmiş yerel kod olur. Gerçek zamanlı grafik motorları için her mikro saniyenin önemli olduğu düşünüldüğünde, AOT derleme tercih edilen yöntemdir.

CMake: Derleme Sistemi Oluşturucu

Node.js dünyasında package.json projenizi tanımlar. C++ dünyasında ise CMakeLists.txt aynı görevi görür. CMake, bu dosyayı okuyarak platformunuza özel derleme talimatları oluşturur.

CMake doğrudan kodunuzu derlemez; başka bir araca (örneğin Ninja) derleme talimatları üretir. Bu katman sayesinde aynı projeyi macOS, Linux ve Windows üzerinde değişiklik yapmadan derleyebilirsiniz.

Örnek bir CMakeLists.txt dosyası şu şekilde yapılandırılır:

# Ultra motor kütüphanesi
file(GLOB_RECURSE ULTRA_SOURCES src/engine/*.cpp)
add_library(ultra_engine STATIC ${ULTRA_SOURCES})
target_include_directories(ultra_engine PUBLIC ${CMAKE_SOURCE_DIR}/src)
target_link_libraries(ultra_engine PUBLIC glfw Vulkan::Vulkan)

# Demo uygulaması
file(GLOB_RECURSE DEMO_SOURCES src/demo/*.cpp)
add_executable(demo ${DEMO_SOURCES})
target_link_libraries(demo PRIVATE ultra_engine)

Bu yapılandırma, motoru statik bir kütüphane (ultra_engine) olarak derlerken, demo oyununu ise çalıştırılabilir bir ikili dosya (demo) olarak oluşturur. Statik kütüphane, Java’daki .jar dosyaları veya derlenmiş npm paketleri gibi çalıştırılabilir olmayan, ancak diğer programlar tarafından kullanılabilen kod koleksiyonlarıdır.

Bağlama (linking) süreci bu ikisini birbirine bağlar. Derleyici demo ikili dosyasını oluştururken, Application() ve Run() gibi fonksiyon çağrıları yapar. Bu fonksiyonlar demo kodunda tanımlı değildir; ultra_engine kütüphanesinde bulunur. Bağlayıcı, bu referansları çözer: statik kütüphaneden ilgili fonksiyonun derlenmiş kodunu bulur ve doğrudan ikili dosyaya kopyalar. Sonuç olarak, demo çalıştırılabilir dosyası hem kendi kodunu hem de motorun tüm kodunu içeren tek bir ikili dosya haline gelir.

Önümüzdeki Adımlar

Ultra projesi sadece başlangıç. Şu anda derleme süreci ve temel yapıyı kurmuş durumdayız. Gelecek adımlarda, Vulkan API’sini kullanarak ilk üçgenimizi ekrana çizmeyi planlıyorum. Bu süreçte, web geliştiricilerinin karşılaşabileceği yaygın engelleri de ele alacağım.

Proje ilerledikçe, web dünyasından grafik programlamaya geçiş yaparken karşılaşılan zorlukları ve çözümlerini detaylı olarak paylaşacağım. Ultra’nın hikayesi henüz yeni başlıyor — merakla takip edin.

Yapay zeka özeti

Web geliştiriciler için C++ ve Vulkan kullanarak 3D motoru nasıl inşa edilir? Clang, CMake ve Vulkan API’sine giriş. Adım adım rehber ve pratik ipuçları.

Yorumlar

00
YORUM BIRAK
ID #UF6623

0 / 1200 KARAKTER

İnsan doğrulaması

8 + 8 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.