- Katılım
- 11 May 2023
- Konular
- 270
- Mesajlar
- 1,141
- Çözüm
- 2
- Online süresi
- 1mo 25d
- Reaksiyon Skoru
- 744
- Altın Konu
- 1
- Başarım Puanı
- 199
- MmoLira
- 1,170
- DevLira
- 381
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
liste
Bu üç kütüphane, Microsoft tarafından geliştirilen ve modern C++ ile DirectX (özellikle DirectX 11 ve 12) uygulamaları geliştirmeyi kolaylaştıran açık kaynaklı yardımcı araçlardır.
Kısacası; DirectX'in "ham" hali çok karmaşık olduğu için bu kütüphaneler işleri standartlaştırmak ve hızlandırmak için kullanılır.
Bu kütüphanelerin DirectX 9 ve DirectX 8 ile kullanımı konusunda durum biraz farklıdır. Microsoft bu araçları modern DirectX (11 ve 12) için geliştirmiş olsa da, bazılarını eski sürümlerle kullanmak mümkündür:
1. DirectXMath (Kullanılabilir
Bu kütüphaneyi DirectX 9 projelerinde rahatlıkla kullanabilirsiniz.
2. DirectXTex (Kısmen / Hazırlık İçin
Doğrudan DirectX 9 çalışma zamanı (runtime) içinde çalışmaz ama içerik hazırlığı için kullanılır.
3. DirectXTK (Hayır, Ama Alternatifi Var
Orijinal DirectXTK paketi doğrudan DirectX 9 veya 8'i desteklemez. Sadece DirectX 11 ve 12 için tasarlanmıştır.
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Bu üç kütüphane, Microsoft tarafından geliştirilen ve modern C++ ile DirectX (özellikle DirectX 11 ve 12) uygulamaları geliştirmeyi kolaylaştıran açık kaynaklı yardımcı araçlardır.
Kısacası; DirectX'in "ham" hali çok karmaşık olduğu için bu kütüphaneler işleri standartlaştırmak ve hızlandırmak için kullanılır.
1. DirectXMath
Bu, DirectX oyun geliştirmede kullanılan matematik motorudur. Tamamen "header-only" (sadece başlık dosyalarından oluşan) bir yapıdadır.- Ne yapar: 3D grafikler için hayati olan vektörler, matrisler ve kuaterniyonlar (quaternions) üzerinde işlem yapar.
- Özelliği: İşlemcinin SIMD (Single Instruction, Multiple Data) komut setlerini (SSE2, AVX, ARM NEON gibi) kullanarak matematiksel işlemleri donanım seviyesinde çok hızlı gerçekleştirir.
- Neden kullanılır: D3DXMATH kütüphanesinin modern halidir ve yüksek performanslı lineer cebir işlemleri için endüstri standardıdır.
2. DirectXTex
Grafik uygulamalarında doku (texture) dosyalarını işlemek için kullanılan kapsamlı bir kütüphanedir.- Ne yapar: .dds, .png, .jpg, .bmp gibi formatları okur, yazar ve dönüştürür.
- Özelliği: Dokuların formatını değiştirme (resize), mipmap oluşturma veya GPU'nun anlayacağı sıkıştırılmış formatlara (BC1-BC7) dönüştürme gibi ağır işleri üstlenir.
- Neden kullanılır: Ham bir resim dosyasını ekran kartının belleğine (VRAM) doğru formatta göndermek için gereken tüm "hamallık" işlerini halleder.
3. DirectXTK (DirectX Tool Kit)
DirectX 11 veya 12 öğrenmeye başlayanların en çok işine yarayacak olan "alet çantasıdır."- Ne yapar: DirectX'in karmaşık yapısını basitleştiren yüksek seviyeli bileşenler sunar.
- İçinde neler var:
- SpriteBatch: 2D resim çizdirmek için.
- SpriteFont: Ekrana yazı yazdırmak için.
- Model Loaders: .sdkmesh veya .vbo dosyalarını yüklemek için.
- CommonStates: Blend, Depth, Rasterizer gibi ayarları kolayca yönetmek için.
- Keyboard & Mouse: Basit giriş (input) kontrolleri.
- Neden kullanılır: "Ekrana sadece bir kare çizmek için neden 500 satır kod yazıyorum?" sorusunun cevabıdır; işleri birkaç satıra indirir.
Bu kütüphanelerin DirectX 9 ve DirectX 8 ile kullanımı konusunda durum biraz farklıdır. Microsoft bu araçları modern DirectX (11 ve 12) için geliştirmiş olsa da, bazılarını eski sürümlerle kullanmak mümkündür:
1. DirectXMath (Kullanılabilir )
Bu kütüphaneyi DirectX 9 projelerinde rahatlıkla kullanabilirsiniz.- Neden: DirectXMath tamamen matematiksel hesaplamalarla (vektör, matris) ilgilidir ve GPU'ya bağımlı değildir.
- Avantajı: Eski D3DX9Math kütüphanesi artık eskimiş (deprecated) kabul ediliyor. DirectXMath, modern işlemcilerin hızlandırma özelliklerini (SIMD) kullandığı için çok daha performanslıdır.
- Dikkat: DirectXMath, matris yapısı olarak XMMATRIX kullanır. DirectX 9'un beklediği D3DMATRIX tipine dönüştürmek için basit "cast" işlemleri yapmanız yeterlidir.
2. DirectXTex (Kısmen / Hazırlık İçin )
Doğrudan DirectX 9 çalışma zamanı (runtime) içinde çalışmaz ama içerik hazırlığı için kullanılır.- Kullanımı: Dokularınızı (texture) DirectX 9'un anlayacağı formatlara (örneğin .dds formatı ve uygun sıkıştırma yöntemleri) dönüştürmek için texconv aracını veya kütüphaneyi kullanabilirsiniz.
- Runtime: DirectX 9 için özel yazılmış DDSTextureLoader9 gibi açık kaynaklı portları GitHub üzerinde bulabilirsiniz.
3. DirectXTK (Hayır, Ama Alternatifi Var )
Orijinal DirectXTK paketi doğrudan DirectX 9 veya 8'i desteklemez. Sadece DirectX 11 ve 12 için tasarlanmıştır.- Neden: İçindeki çizim komutları ve API çağrıları tamamen modern DirectX mimarisine göredir.
- Alternatif: Eğer DirectX 9 kullanıyorsanız, Microsoft'un artık desteklemediği ama internette hala bulunan Legacy DirectX SDK (June 2010) içindeki D3DX9 kütüphanesini kullanmanız gerekir.
- Not: Bazı geliştiriciler DirectXTK'nın ses (Audio) ve girdi (Input) kısımlarını DirectX 9 projelerine port etmiştir ancak resmi bir destek yoktur.
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Paylaşımda düşünceli olduğun için teşekkürler. DirectX gibi bir oyun motorunu akademik bir geçmişin yoksa veya oyun şirketinde çalışmıyorsan öğrenemezsin, öyle ki desteği kesilmiş Dx8 veya 9 u hiç öğrenemezsin, ayrıca şunun da altını çizerek söylüyorum böyle saçma sapan forumlarda dx8 ile yazılmış bir motoru 9 u geçirecek 1 tane allahın kuluda çıkamaz, öyle ex mex yapıp kimse gelmesin, 3-5 deneyimli kişiler ile 5-6 ayda ancak motor güncellenebilir...
hocam bu radikallık nereden geliyor bilmiyorum ama bu lafların çok keskin ve dediklerine asla katılmıyorum tam aksini ispatlı ve videolu şekilde buraya atabilirim. Bence burada çok fazla radikal konuşmuşsun c++ ve dx9 un konusu oldugu bir yerde bu kadar keskin net cümleyi kimse kuramaz , belki birileri seni birşeylere inandırmıştır diye düşünüyorum.
- directx kapalı bir bilgi değil , microsoftun sdk ları dökümantosyonları yıllardır halka açık.
- akademik geçmiş bir avantajdır ama asla asla şart ve ya zorunlu değildir. 18 yaşında bana diz çöktüren hevesli hobi tarzında bu işlerle uğraşan gençler gördüm ben.
- desteği kesilmiş olan birşeyin öğrenilemez diye bir kuralı da yok.
tamam karmaşıktır , zordur ama bu kimse öğrenemez düşüncesini aklına getirmemeli
niye godot unity yada unreal engineden yazmadın herkez ordan yazıyor.neden metin2yi kullandın 9 u bile yüskeltemiyom ben3 gun dusunup mu yazdin? Server tarafli engelleri pythondan yapam, 15 senelik miladi konulari kendim sifirdan yapmis gibi paylasam. Batched islemine drawcall diyem. Yok dedigin FPS duzenlemesini Steptimer ile 5 sene once felan yaptik biz sen bizi kavga ettigin modelciler ile karistirma, Dun turedin ciktin bir anda kendini canli yayin acacak kadar ozguvenle kim gazladi seni bilmiyorum. Metin2 de yapay zeka ile 15 sene onceki seyleri yaptim diye paylasan birisiyle canli yayin acacak kadar bos vaktim yok benim(yapay zeka kullanan arkadaslara lafim yok ki ben de islerimi hizlandirmasi icin kullaniyorum, bu bir teknoloji ve ayak uydurulmasi gerek). Otur paylastigimiz ve yaptigimiz seylere bakin biraz fikir edin ozgun birseyler cikarirsin
Öğeyi görmek için üye olmalısınız.
- Katılım
- 19 Kas 2009
- Konular
- 1,188
- Mesajlar
- 4,208
- Çözüm
- 11
- Online süresi
- 26d 23h
- Reaksiyon Skoru
- 2,736
- Altın Konu
- 32
- Başarım Puanı
- 344
- MmoLira
- 18,954
- DevLira
- 90
paylaşım için teşekkürler.
- Katılım
- 4 May 2018
- Konular
- 229
- Mesajlar
- 3,331
- Online süresi
- 10mo 20d
- Reaksiyon Skoru
- 1,304
- Altın Konu
- 2
- Başarım Puanı
- 289
- Yaş
- 26
- MmoLira
- 3,927
- DevLira
- 63
Dostum Yanlış anlama Konularını Bazen Görüyorum Özenmiyorsun Paylaşımlarda Paylaştıgın Şeyler Kimsenin Asla işine Yaramayacagı Chatgpt Gibi Yerlerden 2 Kelime Promt ile Elde Edilen Cümleler Turkmmo C++ Bölümünü Masaüstün Gibi Kullanıyorsun Felan Hoş Bir Görünüm Değil Paylaştıgın Konuların Yorumlarında Felanda Sadece Seni Görüyorum Githubda Gördüğün Şeyleri Atıyorsun Buraya Nedir Ne Değildir Metin2 İçin İşe Yarar Mı Eminim Sende Bilmiyorsun @Rien Şuanda Bu Paylaşımın C++ Bölümününe Ne Faydası Var Mesela Mmo Market Parası Kasmak İçin Hazır Konu Açılan Yerlerde Paylaşılsa Daha Hit Olur Bu Şekilde Karmaşadan Başka bişey değil
- Katılım
- 11 May 2023
- Konular
- 270
- Mesajlar
- 1,141
- Çözüm
- 2
- Online süresi
- 1mo 25d
- Reaksiyon Skoru
- 744
- Altın Konu
- 1
- Başarım Puanı
- 199
- MmoLira
- 1,170
- DevLira
- 381
Dostum Yanlış anlama Konularını Bazen Görüyorum Özenmiyorsun Paylaşımlarda Paylaştıgın Şeyler Kimsenin Asla işine Yaramayacagı Chatgpt Gibi Yerlerden 2 Kelime Promt ile Elde Edilen Cümleler Turkmmo C++ Bölümünü Masaüstün Gibi Kullanıyorsun Felan Hoş Bir Görünüm Değil Paylaştıgın Konuların Yorumlarında Felanda Sadece Seni Görüyorum Githubda Gördüğün Şeyleri Atıyorsun Buraya Nedir Ne Değildir Metin2 İçin İşe Yarar Mı Eminim Sende Bilmiyorsun @Rien Şuanda Bu Paylaşımın C++ Bölümününe Ne Faydası Var Mesela Mmo Market Parası Kasmak İçin Hazır Konu Açılan Yerlerde Paylaşılsa Daha Hit Olur Bu Şekilde Karmaşadan Başka bişey değil
şuan dx math ve dxtext kullanıyorum.
microsoftun desteklediği sürekli güncellediği bir paket.
clietn srcyi dx9 hesaplamalarını dxmath hesaplaması olarak tekrar güncelliyorum.
aynı şekilde dxtext
hangi kodu değitşirceksin hangi kodu yazıcaksın saatlerimi alır.
o yüzden başlıklarını ekliyorum.
örnek
Kod:
#include "ActorInstance.h"
#include "RaceData.h"
#include "StdAfx.h"
#include <game/MotionConstants.hpp>
void CActorInstance::__Push(int x, int y)
{
// 1. DirectXMath kullanarak pozisyonları al
const Vector3& v3Src = GetPosition();
const Vector3 v3Dst(static_cast<float>(x), static_cast<float>(-y), v3Src.z);
// Delta (Fark) vektörünü hesapla
Vector3 v3Delta = v3Dst - v3Src;
// 2. Uzaklık kontrolü (Karekök almadan kare mesafesiyle kontrol - Daha Hızlı)
float distSq = v3Delta.LengthSquared();
if (distSq < 0.01f) // Hareket yoksa çık
return;
IPhysicsWorld* pWorld = IPhysicsWorld::GetPhysicsWorld();
if (!pWorld) return;
// 3. Çarpışma Testi Optimizasyonu
// 100 sabit döngü yerine mesafeye göre adım belirlemek daha mantıklıdır.
const int LoopValue = 100;
Vector3 v3Inc = v3Delta / static_cast<float>(LoopValue);
Vector3 v3CurrentCheck = v3Src;
for (int i = 0; i < LoopValue; ++i) {
v3CurrentCheck += v3Inc; // Her adımda ilerle
if (pWorld->isPhysicalCollision(v3CurrentCheck)) {
// Duvara çarptıysa itilmeyi orada durdur
ResetBlendingPosition();
return;
}
}
// Çarpışma yoksa yeni konuma yumuşak geçişi başlat
SetBlendingPosition(v3Dst);
// 4. Animasyon Mantığı
if (IsResistFallen())
return;
if (!IsUsingSkill()) {
// DirectXMath ile mesafe ölçümü
float len = sqrt(distSq);
if (len > 150.0f) {
InterceptOnceMotion(MOTION_DAMAGE_FLYING);
PushOnceMotion(MOTION_STAND_UP);
}
}
}
void CActorInstance::TEMP_Push(int x, int y)
{
__Push(x, y);
}
bool CActorInstance::__IsSyncing()
{
if (IsDead())
return true;
if (IsStun())
return true;
//Düello esnasında kilitlenme olayını devre dışı bıraktık, denendi şuan için sorun görünmedi.
if (IsPushing())
return true;
return false;
}
bool CActorInstance::IsPushing()
{
return m_PhysicsObject.isBlending();
}
Son düzenleme:
- Katılım
- 11 May 2023
- Konular
- 270
- Mesajlar
- 1,141
- Çözüm
- 2
- Online süresi
- 1mo 25d
- Reaksiyon Skoru
- 744
- Altın Konu
- 1
- Başarım Puanı
- 199
- MmoLira
- 1,170
- DevLira
- 381
örnek
Kod:
DirectXMath, veriyi işlemci kayıtlarında tutan XMVECTOR ve XMMATRIX yapılarını kullanır. Bunlar 16-byte hizalıdır.
İşlem,Eski (D3DX),Yeni (DirectXMath)
Vektör,D3DXVECTOR3,XMFLOAT3 (Depolama) / XMVECTOR (Hesaplama)
Matris,D3DXMATRIX,XMFLOAT4X4 (Depolama) / XMMATRIX (Hesaplama)
bu yapılmadı.
Renk,D3DCOLOR,XMFLOAT4 veya XMVECTOR
İşlem,Eski (D3DX),Yeni (DirectXMath)
Matris Çarpımı,D3DXMatrixMultiply,XMMatrixMultiply
Identity (Birim),D3DXMatrixIdentity,XMMatrixIdentity
Translation,D3DXMatrixTranslation,XMMatrixTranslation
Rotation (Y ekseni),D3DXMatrixRotationY,XMMatrixRotationY
LookAt (Kamera),D3DXMatrixLookAtLH,XMMatrixLookAtLH
Projection,D3DXMatrixPerspectiveFovLH,XMMatrixPerspectiveFovLH
Normalizasyon,D3DXVec3Normalize,XMVector3Normalize
4. DirectX 9 Device ile Bağlantı (SetTransform)
DirectX 9'un SetTransform fonksiyonu hala eski D3DMATRIX yapısını bekler. XMMATRIX tipini doğrudan buraya gönderemezsiniz.
// 1. Hesaplama (Hızlı SIMD işlemleri)
XMMATRIX matWorld = XMMatrixRotationY(3.14f);
// 2. Depolama tipine aktarma (Belleğe yazma)
XMFLOAT4X4 storageMat;
XMStoreFloat4x4(&storageMat, matWorld);
// 3. DX9 Device'a gönderme (Reinterpret cast ile)
pd3dDevice->SetTransform(D3DTS_WORLD, reinterpret_cast<const D3DMATRIX*>(&storageMat));
XMVECTOR ve XMMATRIX tiplerini bir class veya struct içinde doğrudan kullanırsanız, uygulamanız 32-bit (x86) sistemlerde çökebilir.
Çözüm: Sınıf üyeleri için her zaman XMFLOAT3, XMFLOAT4X4 gibi "Float" ile biten tipleri kullanın. Bu tiplerin hizalama zorunluluğu yoktur ve güvenlidir.
// ESKİ
D3DXVECTOR3 a(1,0,0), b(0,1,0), c;
c = a + b;
// YENİ
XMVECTOR vA = XMLoadFloat3(&myFloat3A);
XMVECTOR vB = XMLoadFloat3(&myFloat3B);
XMVECTOR vResult = XMVectorAdd(vA, vB);
XMStoreFloat3(&myFloat3C, vResult);
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 0
- Görüntüleme
- 15
- Cevaplar
- 1
- Görüntüleme
- 20