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.h
ile 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 |