Mat4x4の要素を取得する方法
たあし 2025/03/18(Tue) 09:01
Reputeless 2025/03/18(Tue) 13:32
DirectX::XMFLOAT4X4 を使うのが最も簡単だと思います。
s3d::Mat4x4 あるいは DirectX::XMMATRIX は、SIMD に最適化するために __m128[4] で構成されていて、SIMD 処理を阻害するような「簡単なコード」(例えば個別の要素にアクセスするなど)はもともと書けない仕様になっています。
場合によっては __m128 と Float4 の変換を行う s3d::SIMD_Float4 が便利かもしれません。
# include <Siv3D.hpp>
void Main()
{
Mat4x4 mat = Mat4x4::Identity();
for (int32 i = 0; i < 4; ++i)
{
Float4 r = SIMD_Float4{ mat.value.r[i] }.toFloat4();
r *= 2.0f;
mat.value.r[i] = SIMD_Float4{ r };
}
for (int32 i = 0; i < 4; ++i)
{
const Float4 r = SIMD_Float4{ mat.value.r[i] }.toFloat4();
Print << r;
}
//for (int32 i = 0; i < 4; ++i)
//{
// DirectX::XMVectorScale(mat.value.r[i], 2.0f);
//}
//for (int32 i = 0; i < 4; ++i)
//{
// DirectX::XMFLOAT4A r;
// DirectX::XMStoreFloat4(&r, mat.value.r[i]);
// Print << Float4{ r.x, r.y, r.z, r.w };
//}
while (System::Update())
{
}
}