Aracılığıyla paylaş


XNA Matematik Kitaplığından Kod Geçişi

Bu genel bakış, XNA Matematik kitaplığını kullanarak mevcut kodu DirectXMath kitaplığına geçirmek için gereken değişiklikleri açıklar.

Üst Bilgi Değişiklikleri

DirectXMath kitaplığı yeni bir üst bilgi kümesi kullanır.

xnamath.h üst bilgisini DirectXMath.hile değiştirin ve GPU paketli türleri için DirectXPackedVector.h ekleyin.

xnacollision.h'daki DirectX SDK Çakışma örneğinden sınırlayıcı türler artık DirectXCollision.h'deki DirectXMath kitaplığının bir parçasıdır. Bunlar C stili API yerine C++ sınıflarını kullanacak şekilde değiştirildi.

Sabit Değişiklikler

XNAMATH_VERSION (200, 201, 202, 203, 204 vb.) DIRECXTMATH_VERSION (300, 301, 302, 303 vb.) ile değiştirildi.

Not

DirectXMath 3.00 ve 3.02, Windows SDK'nın ön sürümleriyle birlikte gönderilir. DirectXMath 3.03, Windows 8 SDK'sının son sürümündedir.

Ad Alanları

DirectXMath kitaplığı, türleri düzenlemek için C++ ad alanlarını kullanır. XNA Math yalnızca genel ad alanını kullandı. XNA Math ile ortak olan DirectXMath türleri DirectX veya DirectX::P ackedVector ad alanındadır.

C++ kaynak dosyalarında basit bir çözüm using deyimleri eklemektir.

#include "DirectXMath.h"
#include "DirectXPackedVector.h"

using namespace DirectX; 
using namespace DirectX::PackedVector;

Üst bilgiler için using deyimleri eklemek en iyi yöntem olarak kabul edilmez. Bunun yerine, tam ad alanları ekleyin.

struct mystruct
{
   DirectX::XMFLOAT3 position;
   DirectX::PackedVector::HALF packedValue;
};

Kısmi Yükler

XMVECTOR'ın 4'ten az öğesini yükleyen çeşitli işlevler için, XNA Matematik kitaplığı ek öğeleri tanımsız bıraktı. DirectXMath bu ek öğeleri her zaman 0 ile doldurur.

Xbox 360'a Özgü Türlerin Kaldırılması

Aşağıdaki XNA Matematik kitaplığı türleri, işlevleri ve sabitleri DirectXMath'ta kullanılamaz.

  • HENDN3, XMHEND3, XMUHENDN3, XMUHEND3, XMDHENN3, XMDHEN3, XMUDHENN3, XMUDHEN3
  • XMLoadHenDN3(), XMLoadHenD3(), XMLoadUHenDN3(), XMLoadUHenD3(), XMLoadDHenN3(), XMLoadDHen3(), XMLoadUDHenN3(), XMLoadUDHen3()
  • XMStoreHenDN3(), XMStoreHenD3(), XMStoreUHenDN3(), XMStoreUHenD3(), XMStoreDHenN3(), XMStoreDHen3(), XMStoreUDHenN3(), XMStoreUDHen3()
  • g_XMMaskHenD3, g_XMMaskDHen3, g_XMAddUHenD3, g_XMAddHenD3, g_XMAddDHen, g_XMMulHenD3, g_XMMulDHen3, g_XMXorHenD3, g_XMXorDHen3
  • XMXICON4, XMXICO4, XMICON4, XMICO4, XMUICON4, XMUICO4
  • XMLoadXIcoN4(), XMLoadXIco4(), XMLoadIcoN4(), XMLoadIco4(), XMLoadUIcoN4(), XMLoadUIco4()
  • XMStoreXIcoN4(), XMStoreXIco4() ,XMStoreIcoN4(), XMStoreIco4(), XMStoreUIcoN4(), XMStoreUIco4()
  • g_XMMaskIco4, g_XMXorXIco4, g_XMXorIco4, g_XMAddXIco4, g_XMAddUIco4, g_XMAddIco4, g_XMMulIco4

__vector4i kullanım dışıdır. Bunun yerine XMVECTORI32 veya XMVECTORU32 kullanın.

Aşağıdaki işlevler ve türler yalnızca Xbox 360 olduklarından kullanım dışıdır: XMLoadDecN4, XMStoreDecN4, XMDECN4, XMLoadDec4, XMStoreDec4, XMDEC4, XMLoadXDec4, XMStoreXDec4, XMXDEC4.

ARM-NEON İç Bilgileri

Bu kodla bir vektör sabiti bildirilmesi SSE ve NO-INTRINSICS için XNA Math için derlenir, ancak ARM-NEON kullanılarak DirectXMath için başarısız olur.

XMVECTOR v = { 1.f, 2.f, 3.f, 4.f }

Genel olarak, bu XMVECTORbaşlatma yöntemini önermeyiz. Ancak, vektör sabiti istiyorsanız, XMVECTORF32 sınıfı bu başlatma stilini destekler ve XMVECTOR türünü otomatik olarak döndürür, böylece aynı bağlamların çoğunda XMVECTORF32 kullanabilirsiniz. XMVECTORF32 sınıfına yapılan tüm yazma işlemleri için .v XMVECTOR üyesine açıkça başvurmanız gerekir.

Permute

XNA Matematik kitaplığında genel vektör permute için aşağıdaki form vardı:

XMVECTOR XMVectorPermuteControl(UINT ElementIndex0, UINT ElementIndex1, UINT ElementIndex2, UINT ElementIndex3);
XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Control);

DirectXMath için XMVectorPermuteControl ortadan kaldırılmıştır ve XM_PERMUTE_0X .. XM_PERMUTE_1Z sabitleri basit 0-7 dizinleri olacak şekilde yeniden tanımlanmıştır. XMVectorPermuteiçin yeni imza:

XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2, uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW);

Denetim sözcüğü yerine, bu işlev doğrudan parametre olarak 4 dizin alır ve bu da bunu yeni XM_SWIZZLE_X kullanarak XMVectorSwizzle işlevine benzetir. XM_SWIZZLE_W sabitleri basit 0-3 dizinleri olarak tanımlanır.

XMVECTOR XMVectorSwizzle(FXMVECTOR V, uint32_t E0, uint32_t E1, uint32_t E2, uint32_t E3);

Not

Sabit değerler için, permat uygulamanın çok daha verimli bir yolu vardır. XMVectorPermuteişlev biçimini kullanmak yerine şablonunu formu kullanın:

template<uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW>
    XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2)</code></pre></td>

Şablon Formları

Genel olarak, aşağıdaki işlevlerin işlev formu üzerinde bir şablon formu kullanmak çok daha verimlidir ve kitaplığın şablon özelleştirmesi aracılığıyla platforma özgü iyileştirmeler yapmasına olanak tanır.

template<uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW>
    XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2)

template<uint32_t SwizzleX, uint32_t SwizzleY, uint32_t SwizzleZ, uint32_t SwizzleW>
    XMVECTOR XMVectorSwizzle(FXMVECTOR V)

template<uint32_t Elements>
    XMVECTOR XMVectorShiftLeft(FXMVECTOR V1, FXMVECTOR V2)

template<uint32_t Elements>
    XMVECTOR XMVectorRotateLeft(FXMVECTOR V)

template<uint32_t Elements>
    XMVECTOR XMVectorRotateRight(FXMVECTOR V)

template<uint32_t VSLeftRotateElements, uint32_t Select0, uint32_t Select1, uint32_t Select2, uint32_t Select3>
    XMVECTOR XMVectorInsert(FXMVECTOR VD, FXMVECTOR VS)</code></pre></td>

Ortadan Kaldırılan İşlevler

Eliminated İşlevi Yedek
XMStoreFloat3x3NC XMStoreFloat3x3
XMStoreFloat4NC XMStoreFloat4
XMStoreFloat4x3NC XMStoreFloat4x3
XMStoreFloat4x4NC XMStoreFloat4x4
XMStoreInt4NC XMStoreInt4
XMVector2InBoundsR XMVector2InBounds? XM_CRMASK_CR6BOUNDS : 0
XMVector2TransformStreamNC XMVector2TransformStream
XMVector3InBoundsR XMVector3InBounds? XM_CRMASK_CR6BOUNDS : 0
XMVector3TransformStreamNC XMVector3TransformStream
XMVector4InBoundsR XMVector4InBounds? XM_CRMASK_CR6BOUNDS : 0
XMVectorCosHEst XMVectorCosH
XMVectorExpEst XMVectorExp
XMVectorLogEst XMVectorLog
XMVectorPowEst XMVectorPow
XMVectorSinHEst XMVectorSinH
XMVectorTanHEst XMVectorTanH

DirectXMath Programlama Kılavuzu