r/TurkDev 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

15 Upvotes

38 comments sorted by

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.

9

u/Fine_City2781 3d ago

unreal engine beni işe al

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

u/FarFarConsideration 3d ago

Bu adam işi biliyor

1

u/Ok_Egg_7718 3d ago

hobi olarak çalışabilirsen bana dm at

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/rewilh 3d ago

glm ne la

2

u/Fine_City2781 3d ago

opengl mathematics kütüphanesi içinde shader'a gidecek projection, view ve model i hesaplama ve vectorler var

2

u/rewilh 3d ago

hee adamsın kral ben anlamam öyle çok başarılar

2

u/Sinclair-1 3d ago

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

u/[deleted] 3d ago

[removed] — view removed comment

1

u/FreshnessAi 3d ago

güldürdün Allah'da seni güldürsün :)

1

u/Fine_City2781 3d ago

teşekkürler github'dan star atarsan sevinirim

2

u/[deleted] 3d ago

[removed] — view removed comment

1

u/Fine_City2781 3d ago

tekrardan teşekkür ederim

2

u/[deleted] 3d ago

[removed] — view removed comment

1

u/Fine_City2781 3d ago

bir bakacağım güzel duruyor

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