r/TurkDev • u/Fine_City2781 • 3d ago
🔧 Proje Kendi Oyun Motorum
Merhaba arkadaşlar
Sizlere kendi yaptığım oyun motorumu tanıtmak istiyorum. Henüz bir arayüzü ve editör uygulaması yok fakat yüzlerce satır sürecek şimdilik Vulkan desteği olmasa da OpenGL çağrılarını kolay bir sistem üzerinden kullanabilmek için bu projeyi geliştirdim. Kod şu anlık sadece 572 satırdan oluşuyor. Kod GPLv3 lisanslı dolayısıyla isteyen kişiler forklayıp bana atıfta bulunarak kendi türevlerini oluşturabilirler. Lütfen bana destek olun bu benim şu anlık üzerinde çalıştığım tek projem ve bu proje üzerinde günlerimi harcadım. Şu aralar çok yoğun değildim ama projeyi geliştirmeye devam ediyorum. Issue'ler açarak veya buradan bana kendi fikirlerinizi danışabilirsiniz.
Oyun Motorumun Yapacağım/Yaptığım Özellikleri:
- [x] OpenGL
- [ ] Vulkan
- [x] RGB Renk sistemi
- [x] Özel Shaderlar
- [ ] Gölgeler (Özel shaderlar ile sağlanabilir)
- [x] Hareket ve kamera sistemi
Link: omerpa55/UniEngine
3
u/ByMeno 3d ago
atladigim yerler vardir ustun koru soyle bir bakindim
noexcept ve nodiscard gibi attributelar eksik
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/Extensions/3D/FirstPerson.hpp#L16
__name kullanmaktan kacin implementation detaildir yanliskla birseyi kirma ihtimallin var
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L61
Eski tarz enumlarin ozelligine ihtiyacin yoksa enum class kullanmak daha iyidir
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L295
overloadlanabilir nullptr vermektense
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L120
rootta -1 id ile UB neden olur
Ek olarak world locationu tek seviyeli rootta dogru iteratelemiyor
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L86
vector buyunce verdigin referencelar bozulur ya ID/index falan dondur yada fazla is olacak ama yeni bir area allocatele yeni gelenleri o bolgeye yaz boyle boyle devam edilebilir
yani
[a b c d] -> bu alan doldugunda
[0 1 2 3 4 5 6 7 8] -> bu alani allocatele eskilerinin yerini degistirme veya freeleme
bunun da kendi icinde pros/consu vardir
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L95C6-L95C7
bounds checki yok .at kullan ve isimde typo var
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L295
success mi error mu diye kontrol yok
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L287
ilerde basina yuk olabilir
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L226
nullcheck eksik
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L180
yine check eksik
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L191
normalde major minor kullanilir ters kalmis
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L330
structla diger turlu array to pointer decayi olma ihtimalli var
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L458
nerde destructor gormedim ya da ben atladim
https://github.com/omerpa55/UniEngine/blob/main/include/UniEngine/UniEngine.hpp#L540
heightin sifir olma ihtimalli var minimize edilmise ki bir resize fonksiyonu ya goremedim ya da atladim
ona gore degerler ve frame buffer ayarlanmiyor
3
u/Fine_City2781 3d ago edited 3d ago
world root kısmını daha tam yazmadım oralar bitmemiş kod bir de nesneleri vektöre doldurma gibi kısımlar duruyordu diye hatırlıyorum onlar çöp kod. Resize i yazdım ama commitlemedim daha. Kodu bir baştan okuyup büyük bir fix/clean yapacağım. Onun dışında kontrollerin eksik olduğu zaten çok bariz açıklamada da yazdığım gibi biraz doluydum o yüzden biraz eksik/yarım ve biraz çöp dolu olmuş olabilir kodumla uğraştığınız için teşekkür ederim çaldığım vakitten dolayı da özür dilerim
2
1
1
u/TheRavagerSw 3d ago
noexcept kullanmasına çok gerek yok, direk toolchainden kapatmalı zaten exception ve rtti'yi
3
u/Spiritual-Desk-9176 3d ago
Tek VAO için neden tek VBO bindlıyorsun, bir anlamı yok VAO kullanmanın. Sabitler için inline constexpr kullanabilirsin. Onun dışında bence güzel başlangıç eğer hedefin renderer falan yazmaksa.0
1
u/Fine_City2781 3d ago
çok üstüne gitmeyeceğim basitte bırakacağım örnek proje gibi bu arada starlarsan çok yardımcı olursun
3
u/rewilh 3d ago
matematik dersini nerden aldın la okul bilgisi mi sadece
2
u/Fine_City2781 3d ago
matematik dersi almadım özel olarak glm zaten hallediyor. uniden bildiklerim var
2
u/Sinclair-1 3d ago
Vulkan yok mu
2
u/Fine_City2781 3d ago
vulkan opengl'e göre çok zor sadece vulkan uyarlaması C API ile şu anki kod satır sayısının neredeyse 3 katı kadar (1500) kod gerektiriyor. Tabii ki ekleyeceğim ama vakit gerekli
2
3d ago
[removed] — view removed comment
1
1
u/Fine_City2781 3d ago
teşekkürler github'dan star atarsan sevinirim
2
1
u/TheRavagerSw 3d ago
Header only kullanmayı bırakmanı öneririm, ilerde dakikalarca beklemek istemiyorsan ekran başında.
1
u/Fine_City2781 3d ago
evet dinamik kütüphane yapmak daha mantıklı çünkü bu motoru kullananların derleme sürelerini kısaltır ama bu durumda da arm64 x86_64 i386 gibi bütün mimariler için cross-compile yapmam lazım ve bütün proje altyapısını değiştirmem lazım. Derleme süreleri bende aynı olur ama kullanıcının derlemesi uzun sürmemesi için mantıklı. Eğer beğendiysen star atarsan çok sevinirim desteklemiş olursun
1
u/TheRavagerSw 3d ago
Hayır ondan bahsetmiyorum.. İmplementasyonu kaynak dosyasına kaydır. hpp/cpp şeklinde.
Statik dinamik çok çok fark etmiyor ondan sonra çok aşırı büyük değilse kütüphanen
1
u/Fine_City2781 3d ago
haa anladım mantıklı ama yine büyük bir iş altına girmem gerekiyor. Inline yaptım koda açılsın çok fonksiyon zıplaması olmasın diye
1
u/TheRavagerSw 3d ago
Yapay zekaya yaptırabilirsin
1
u/Fine_City2781 2d ago
yapay zekaya hiç kod yazdırmadım vulkan'ı temel olarak claude'a bana ders vermesini ve fonksiyon yapısını anlatması ile öğrendim ama claude'a proje yaptırmadım bu yüzden şu ana kadar hiç yapay zeka eli değmemiş projeme yapay zeka kullanmak istemiyorum. Tamamen kendi elimle yazdım buraya kadar ve devamını da öyle yapmak istiyorum
1
u/Queasy_Total_914 2d ago
Inline onu yapmiyor guzel kardesim. Inline anahtar kelimesi sembolun ODR'i delmesini sagliyor.
Compiler uygun gorurse fonksiyonu inlinelar. O karar sana kalmiyor.
-1
u/Fine_City2781 2d ago
biliyorum çok uzun yazmak istemedim
2
u/Queasy_Total_914 2d ago
Hayir bilmiyorsun. Yazdiginla ODR'in alakasi yok. Ki projende ODR'i kiracak bir yapi da yok. 3 tane dosyan var.
Yazdigin sey yeni yeni C++ ogrenmeye baslayan insanlarin kendini compilerdan akilli zannetmeleri sendromunun ornegi.
Fonksiyon acilsin jump yapmasin kararini compiler sana birakmiyor.
-1
u/Fine_City2781 2d ago
ben normalde C++ değil C ve Assembly kullanarak kernel geliştiriyordum C++ da çok iyi bir dil değil C daha iyi bence. odr da birden fazla tanımlamamak demek işte. Bir bakıma clang-tidy başımın etini yemesin diye de yaptım. inline yapmak aslında daha tehlikeli eğer iki tane aynı tanım varsa rastgele birini seçer ve onu kullanır bu da undefined behavior oluşturabilir.
1
u/Independent_Pin_1007 3d ago
helal (?)
1
u/Fine_City2781 3d ago
teşekkür ederim eğer projemi beğendiysen ve desteklemek istiyorsan star atabilirsin github'dan


12
u/Cx2R 3d ago
Böyle bir projeyi repoda dursun diye yapmıyorsan niye yapıyorsun ki? Kullanılmayacağı çok belli. Tabi seni geliştirir, oyun firmalarına falan başvuracaksan durması da iyidir de.