Kayıtlar

Not:

Bu blog için açmış olduğum Twitter feed hesabımı takip ederek, yeni yazılarımdan daha rahat haberdar olabilirsin!

Fizik Motoru Devlog #02: Rijit Nesneler ve Coulomb Sürtünmesi

Resim
--- --- Bildiğiniz gibi verlet tabanlı, mass-spring ve volume tabanlı bir fizik motorum var. Fakat oyunlarda sıkça sert nesneler kullanırız. Mass-spring modeli ile sert cisimler yapmanız tabiki mümkün, fakat makul hassasiyette bir sert cisim fiziği uygulamanız için hem segment kısıtlamaları hem de çarpışmalar için çok fazla iterasyon kullanmanız gerekecektir. Bu yüzden simülasyon modellerime diğer simülasyon modelleriyle etkileşime girecek rigid body dynamics dediğimiz bir simülasyon modeli daha ekledim. Aşağıda farklı simülasyon modellerinin etkileşimlerini görebilirsiniz. Rijit cisim simülasyonlarında(Box2d, Chipmunk gibi motorlarda) hız manipülasyonu dediğimiz bir metod uygulanır. Benim fizik motorumda asıl zorluk bunu pozisyon tabanlı dinamiklerle uygulayabilmekti. Bu nedenle birçok farklı yol denedim ve makul bir sonuca ulaştığımı düşünüyorum. Öncelikle rijit cisim simülasyonlarda pozisyon tabanlı dinamiklerin avanajları ve dezavantajları var. Avantajılarından biri direk p

Fizik Motoru Devlog #01

Resim
--- --- Oyun motorları genel ihtiyaçlar için gayet güzel rijit fizik motorlarına sahiptir. Fakat bu fizik motorları beni özellikle gerçek fiziğe yakın arayışlarımın dışındaki bazı projelerde kısıtlar.(Çoğu projemde bu geçerlidir. ) Ben de bu yüzden kendi esnek fizik motorumu geliştirmeye karar verdim. Daha önce iptal ettiğim bu oyun projesinde bu konuda tecrübeler edinmiştim. Bu projede amacım yumuşak nesne simülasyonlarını canlandırabilmekti. Şimdi yeni baştan genel kullanımlarım için bir fizik motoru geliştiriyorum. Amaçladığım Özellikler; Saf c# ile yazılmış olmalıdır. Unity, Godot, Mono game gibi c# oyun geliştirme ortamlarına adapte edilebilmeli. Projem için en düşük seviyede modifikasyonlar yapabilmeliyim. Geleneksel karakter fiziği ile geliştirme yapmaya olanak tanımalı. Aynı zamanda fizik dünyası ile etkileşim kurabilmeli. Hem sert nesneleri hem yumuşak nesneleri simüle edebilmeli. Performans dostu olmalı ve modern optimizasyon geliştirmelerine sahip olmalı. Sırad

Git Sistemi ve Kullanımı

Resim
Bildiğiniz gibi Git sistemi yazılım dünyasında en çok tercih edilen VCS’dir. Ben de çoğu zaman kullanmayı tercih ederim. Hiç VCS alışkanlığınız yoksa kavramlara alışmak zaman alsa da, bunlara aşina olduktan sonra kullanmak daha basit bir hal alıyor. Bu yazıda Linus Torwalds ’ın vakti zamanında kullandığı VCS sisteminin ücretli olması akabininde söylentilere göre ilk sürümünü 3 haftada geliştirerek yazılım dünyasına armağan ettiği Git sistemi hakkında bir yazı yazmasam olmazdı, Git ile başlangıç Öncelikle terminal ile projemizin içine giriyoruz $cd dosyalar/ornekproje Sonrasında git init kodu ile projemizi git için hazırlıyoruz; $git init Oluşturduğumuz git projesinin durumunu öğrenmek için; $git status Ayrıca git log komutu ile projede ne olup bitmiş görebiliyoruz $git log ` ya da ` $git log —oneline Yeni bir dosya eklediğimizde yada dosya değiştirdiğimizde status komutuyla bunu görürüz ve yapılan değişikler ve yeni dosyaları git içine eklemek için; $git ad

Linux ile Yaşadığım Sorunlar ve Çözümleri

Daha önce bu yazımda Linux’e geçiş serüvenim başlığı altında bir yazı yazmıştım. Şimdi sık yaşadığım ve not ettiğim sorunlar ve bu sorunların çözümü hakkında daima güncel tutmak istediğim bir yazı yazmak istiyorum. Umarım benzer sorunlarınıza da çözüm olabilir. Not : apt ile yapacağınız işlemler öncesi sudo apt-get update ile paket datanızı güncel tutmanızı tavsiye ederim. Broadcom wifi sürücüm görülmüyor Eğer wifi broadcam sürücünüz sistemi yüklediğinizde tanımıyorsa sorununuz broadcom kaynaklı olabilir. Ethernet kablosu ile ya da telefonunuzdan bluetooth ile sisteminize internet paylaşarak terminal’e şu komutu yazın. sudo apt-get --reinstall install bcmwl-kernel-source Bu ilgili broadcam sürücünüzü en güncel haliyle tekrar yükleyecek ve sorununuzu çözecektir. Windows ile dualboot linux kurdum fakat Windows ile boot ettiğimde sadece siyah ekran görüyorum Bu sorunun sebebi GPT tablosu ile biçimlendirdiğiniz diskinize linux kurduğunuzda bazen windows aslında GPT olan diski

Linux'e Geçiş Serüveni

Resim
Son yıllarda öyle ya da böyle kullandığım yazılımların çoğu açık kaynaklı yazılımlara dönüştü. Açıkçası bunun için bir çaba sarfettiğim de söylenemez. Fakat buna etken olarak günümüzde açık kaynaklı projeler yaygınlaştı ya da geçmişi olan yazılımlar yeterli ve stabil hale gelebildi diyebilirim. Ama öyle ya da böyle bir gün oturduğumda kullandığım ve beğendiğim yazılımlarının birçoğunun açık kaynaklı olduğunu farkettim. Kod editörüm - VSCode Oyun motorum - Godot Engine Çoklu platformlu IDE tercihim - QT Müzik ve sound: LMMS , Audacity Grafik: Gimp , Inkscape Evimdeki eski bilgisayarıma geçen sene bir linux dağıtımı kurmuştum, aslında o bilgisayarda çeşitli dağıtımları kuruyor, onları gündelik bazı işler için deniyor, sonra başka bir dağıtımı kurup onu irdeliyordum. Bu süreçte linux hakkında birçok bilgim oldu. İyi bir dağıtımla beraber sistemin hızlı çalışması, eğer gerçekten doğru ayarları yaparsanız stabil olması, kullanımının zevkli olması bu süreçte aklıma kazındı. Wine ile

Nokta Poligonun İçinde mi? (Point in Polygon)

Resim
Bir noktanın bir poligonun içinde olup olmadığını nasıl anlarız? Bu öyle önemli bir sorudur ki bir oyun geliştiricisi de bu soruyu sorabilir, grafik işlemleri veya harita işlemleri üzerine bir desktop yada mobil application geliştiren bir yazılımcı da sorabilir. Daha başka alanlarda da karşımıza çıkabilir. Bununla ilgili buradan göreceğiniz üzere ön plana çıkan 2 tür algoritma vardır. Bunlardan kısa kısa söz edelim ardından kendi kullandığım farklı ve basit bir yöntemden söz etmek istiyorum. Ray Casting Algoritması Ray Casting algoritması oldukça basit bir mantık üzerine kuruludur. Bize şunu söyler; eğer bir poligonun dışından hedef noktaya doğru bir ışın gönderirseniz ve çarpıştığı çizgi segmenti sayısı tekse poligon içindedir, çiftse eğer poligon dışındadır. Belli başlı istisnalar dışında iyi çalışır. Cpu dostu bir algoritma olduğu için sık kullanılır ve populerdir. Bununla hazırlanmış bir kodu buradan inceleyebilirsiniz . Winding Number Algoritması Trigonometrik hesaplamal

2 Doğrunun Kesişim Noktası (Line-Line Intersection)

Resim
Sanırım basit gibi görünen fakat ilk defa karşılaşanlar için basit olmayan hesaplamalardan biridir bu. İki doğrunun kesişim noktasını farklı yollardan hesaplayabiliriz. Bunu doğru denklemi yöntemiyle yapanlar var, mümkün ve mantıklı bir yaklaşım. Trigonometrik işlemlerle yapanlar var ki eskiden bunlardan biri bendim; optimizasyona önem veriyorsanız ve pratik bir çözüm arıyorsanız tavsiye etmiyorum. Biz bunu vektör hesaplamalarıyla gayet temiz ve optimize bir şekilde yapacağız. Şimdi öncelikle d1 ve d2 adında 2 tane vektörümüz olsun. Kesişim noktamız da P olsun. Şimdi burada amacımız P noktasını bulabilmek. Öncelikle bu doğrularımızın noktalarını tanımlayalım. Şimdi bu noktalarla ihtiyacımız olan V1 ve V2 vektörlerini tanımlayalım. var v1 = new vec2 ( P2 . x - P1 . x , P2 . y - P1 . y ) ; var v2 = new vec2 ( P4 . x - P3 . x , P4 . y - P3 . y ) ; Şimdi öncelikle P1 noktasından P3 noktası yönünde bir vektör tanımlayacağız. var v3 = new vec2 ( P3 . x - P1 . x , P3 . y -