Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

DirectXMath DirectXTex DirectXTK

  • Konuyu başlatan Konuyu başlatan apikomt2
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 26
  • Görüntüleme Görüntüleme 1K

apikomt2

Level 6
Uzman
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
Ticaret - 0%
0   0   0

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.


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
3 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.
niye godot unity yada unreal engineden yazmadın herkez ordan yazıyor.neden metin2yi kullandın 9 u bile yüskeltemiyom ben
paylaşım için teşekkürler.
 
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
 
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:
ö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)

Geri
Üst