Author: Muhammet Esat BÜYÜKBULUT
-

Basic Shapes
Çizgi, çember, dikdörtgen gibi basit şekilleri çizdirmek için OpenCV’nin bize sunmuş olduğu bazı fonksiyonlar var. Bu fonksiyonları kullanarak basit bir deneme yapacağız. Öncelikle bu fonksiyonların bazılarını tanıyalım Şimdi koordinat sistemi demişken OpenCV’de tam olarak nasıl çalıştığına bakalım. Normalde X-ekseni sağa Y-ekseni yukarıya doğru artan değerlere sahiptir. OpenCV de ise Y-ekseni tam tersi olup aşağıya doğru…
-
Warp Divergence
GPU’da thread’ler warp adı verilen 32 thread‘lik gruplar halinde yürütülür. Bir warp içindeki thread’ler aynı instruction stream’i takip ederek farklı data üzerinde çalışır. Buraya kadar her şey güzel. Sıkıntı, farklı instructionlar çalışması gerektiğinde başlıyor. Örneğin if() koşulu koyduğumuzda threadlerin bir kısmı if bloğunu bir kısmı else bloğunu çalıştıracak. Fakat bir warp içinde her iki bloğun…
-
Measuring Execution Time
Yaptığımız işlemin daha optimize olup olmadığını anlayabilmek için ne kadar sürede çalıştığını ölçmemiz gerekli. Bu ölçümü ilk başta std::chrono kullanarak cpu üzerinden yapacağız. Daha sonra cudaEvent(?) ile gpu üzerinde ölçüm yapmayı da göreceğiz fakat o başka bir posttun konusu. githubda gördüğüm bir kodu sınıfa döktüm: Daha sonra kernel’ı çalıştırırken Dikkat ederseniz asekron olduğu için cudaDeviceSynchronize()…
-
CUDA Device Properties
GPU’nun özelliklerini sorgulamak istiyorsak bunu kullanıyoruz. Böylece üstünde çalıştığımız sistem hakkında daha fazla bilgi edinebiliriz. Çok fazla sayıda özellik var. Bir kısmı aşağıda listelenmiştir.
-
CUDA Error Handling
Çeşitli CUDA fonksiyonları dönüş tipi olarak cudaError_t döndürür. Bunu yakalayıp bir if checkiyle başarılı olup olmadığını kontrol ediyoruz. Genelde bu iş için Macro yazılıyormuş. gibi
-
GPU Memory and Data Transfer
Bazen tek başına bir array atmak yeterli olmaz yanında size da göndermemiz gerekir:
-
Kernel Dimensions
Herhangi bir döngü yazarken genelde (int i =0; i<N; i++) gibi şeyler kullanarak içinde bulunduğumuz indexi ayarlarız. Aynı olayı GPU da yapamıyoruz. Bize sunulan threadIdx, blockIdx gibi ifadelerle içinde bulunduğumuz indexi hesaplayabiliriz. Bu kavramlara daha önceki yazıda değinmiştik. Şimdi biraz daha detaylı bakalım Indexing Eğer çok boyutlu arraylerin indexlerinin nasıl hesaplandığının mantığını biliyorsanız bunun mantığını…
-
Hello CUDA
Bazı Kavramlar Kurulum Hello CUDA Şimdi <<< >>> olayına gelelim direk N tane thread çalışsın demek yerine bu şekilde bölerek dağıtıyoruz. Bu biraz donanımsal bir mesele. burada tek boyutlu dimension kullanıyoruz ama 2-3 boyutlu da yapabiliriz. Misal bir resmi işlerken 26. pixel yerine 27. satırdaki 14. pixel daha kullanışlı Burada sınırlarımız sonsuz değil. Misal benim…
-
Triangulate a Quad
Mesh editleri için quad’lar kullanışlı olsa da ekran kartı günün sonunda ekrana trisleri basacak. Bu sebepten ötürü elimizdeki quad’ları güzel bir şekilde ekrana basmamızı sağlayacak bir algoritma yazmamız lazım. İlk başta bu çok kolay görünebilir: ABCD quad’ımızı ABC ve ACD olmak üzere 2 tris’e bölebiliriz. Düzlemsel olup kare, dikdörtgen, yamuk gibi şekillere benzeyen quadlar için…
-
ImGui::DragDrop
Sürükle bırak operasyonu için ImGUI nin bize sağlamış olduğu drag drop isimli bir araç var. Kendi kodumda bir ağaç yapısındaki ögelerin birbirine sürüklenip bırakılarak parent-child ilişkisini kurmasını istiyordum. Kısacası şöyle. Başka bir öğenin üzerine bırakmak yerine boş alana bırakmak istersek şöyle bir kod ekleyebiliriz Kodun tamamı şöyle.
-
Zip Blender Files
Blender dosyalarını sıkıştırmak için farklı metodlar var. Örneğin Edit->preferences->Save&Load->Compress File seçeneği seçerek dosyalarını kayıt ederken sıkıştırılmış bir şekilde kayıt edebilirsiniz. Ben ise 7zip programıyla arşivledim. Elde ettiğim verileri burada paylaşıyorum. Sıkıştırılan dosyalar hakkında Nasıl sıkıştırdığımı anlatmadan önce neyi sıkıştırdığımı anlatayım ki bir referans olsun. Benim 30 tane ardışık kayıt edilmiş dosyam vardı. Yaklaşık 80 GB’lık…
-
Pawn
https://dev.epicgames.com/documentation/en-us/unreal-engine/pawn-in-unreal-engine Auto Posses Eğer bir pawn nesnesini sahneye yerleştirip oyuna başlarsak bu pawn ı kontrol edemediğimizi görebiliriz. Mouse klavye girdilerinin direk olarak bu yeni pawn’ı kontrol etmesinin istiyorsak. Nesneyi seçip details panel’den Auto Possess Player : Player0 yapabiliriz. Aynı şeyi kodla yapmak istersek: Bunu yaptıktan sonra oyunu başlattığımızda otomatik olarak yeni oluşturduğumuz pawn’ı kontrol ediyor…
-
Components
Component Nedir? Blueprint editörde sol tarafta aktörümüze eklediğimiz, staticmesh, collider vb unsurlara component diyoruz. Her aktörün en azından bir tane componenenti olur (default scene root). Var olan componentler dışında kendi componentlerimizi de üretebiliriz. Component Nasıl Eklenir Hali hazırda blueprint editörün sol panelinde Add butonu ile ekleyebiliriz. Fakat biz burada C++ ile nasıl ekleyebileceğimizi göreceğiz. Class…
-
Fonksiyon ve Değişkenleri Blueprint’te Göstermek
Değişkenleri Blueprint’te Göstermek In the Class Defaults Kodun içine gömülmüş değişkenleri ayarlamak için her seferinde kodla oynamak pratik bir iş değil. Unreal bize bu konuda bir esneklik sağlıyor. Değişkenin önüne ekleyeceğimiz UPROPERTY macrosu ile değişkeni blueprint içinde ya da nesne üzerinde değiştirmek mümkün. Eğer parametremizi read-only yapmak istersek: Edit yerine Visible kelimesini kullanmalıyız: In the…
-
Nesneleri Hareketlendirmek
Hareket Fonksiyonları Oyun yapıyorsak nesnelerimizi hareket ettirmemiz gerekli. Bunu c++ ile yapabilmek için Actor sınıfının bize sağlamış olduğu bazı fonksiyonlar var. Bu fonksiyonlar benzer isimlerle blueprint’te de mevcut. Objelerimize mutlak konum veya rotasyon atamak için “SetActorLocation” ve “SetActorRotation” fonksiyonlarını kullanabiliriz. Başka bir şekilde ifade etmek gerekirse nesnemiz konumu ve açısını ayarlıyoruz. Fakat mutlak bir son…
-
Debug Text & Shapes
Debug Text Metin halinde çıktı almak için iki tane metodumuz var: Aynı işlevi gören blueprint node’ları aşağıda verilmiştir. Formatlı Metinler Tıpkı C dilindeki printf fonksiyonu gibi formatlı bir şekilde çıktı almamız da mümkündür: 💡 When using %s parameters to include FStrings, the * operator must be used to return the TCHAR* required for the %s parameter. Debug…
