XMVECTOR 奇怪的值
XMVECTOR weird values
从 DirectX 开始,然后弄乱 XMVECTOR
(我知道我不会在上下文中使用它们,我只是好奇)
// Vectors.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <DirectXMath.h>
#include <DirectXPackedVector.h>
int main()
{
using namespace DirectX;
XMVECTOR vector = XMVectorSet(1, 2, 3, 1);
int x = XMVectorGetIntX(vector);
std::cout << "vector.x: " << x << std::endl;
system("pause");
return 0;
}
这会打印一个值 1065353216
虽然很有趣,但我想知道我做错了什么,或者这是否确实是预期的功能。
底层 SIMD 指令是无类型的。您可以将相同的数据视为 4 个浮点数或 4 个整数(或 8 个短整型或 16 个字节)。 DirectXMath 通常使用 4 个浮点数,这是你的 XMVECTOR
从 XMVectorSet
.
得到的
如果您使用 float x = XMVectorGetX(vector);
,您会返回“1.0”。
或者,您可以使用 XMVECTOR vector = XMVectorSetInt(1, 2, 3, 1);
见DirectXMath Programmer's Guide as well as the GitHub project。
从 DirectX 开始,然后弄乱 XMVECTOR
(我知道我不会在上下文中使用它们,我只是好奇)
// Vectors.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <DirectXMath.h>
#include <DirectXPackedVector.h>
int main()
{
using namespace DirectX;
XMVECTOR vector = XMVectorSet(1, 2, 3, 1);
int x = XMVectorGetIntX(vector);
std::cout << "vector.x: " << x << std::endl;
system("pause");
return 0;
}
这会打印一个值 1065353216
虽然很有趣,但我想知道我做错了什么,或者这是否确实是预期的功能。
底层 SIMD 指令是无类型的。您可以将相同的数据视为 4 个浮点数或 4 个整数(或 8 个短整型或 16 个字节)。 DirectXMath 通常使用 4 个浮点数,这是你的 XMVECTOR
从 XMVectorSet
.
如果您使用 float x = XMVectorGetX(vector);
,您会返回“1.0”。
或者,您可以使用 XMVECTOR vector = XMVectorSetInt(1, 2, 3, 1);
见DirectXMath Programmer's Guide as well as the GitHub project。