我首先想到的是,向量只是可以存储多个相同类型值的数组。但我认为direct3d在" vector"
中使用了不同的术语让我们举例说,我们使用函数XMVectorSet()
XMVECTOR myvector;
myvector = XMVectorSet(0.0f, 0.0f, -0.5f, 0.0f);
我在myvector
内存储了什么?我只存储一个浮点值数组吗?
答案 0 :(得分:1)
C ++"" vector"确实是类似阵列的存储容器。
你是正确的,因为Direct3D正在使用术语"向量的不同含义":它们更具全球性的数学意义。这些向量是方向和大小的数量。
进一步阅读:
答案 1 :(得分:1)
一般来说,Direct3D中的向量是2到4个相同浮点或整数类型元素的有序集合。从概念上讲,它们与数组相似,但更像是一个结构。这些元素通常由x
,y
,z
和w
之类的名称引用,而不是数字。根据上下文,您可以使用C ++结构或C ++数组来表示Direct3D向量。
然而,XMVECTOR类型具体是4个元素的有序集合,同时包含32位浮点和32位无符号整数类型。每个元素都具有浮点数的值和共享相同机器表示的无符号整数。因此,使用您的示例,变量myvector
同时包含浮点向量(0.0,0.0,-0.5,0.0f)和无符号整数向量(0,0,0xbf000000,0)。
(如果我们使用通常的XYZW解释myvector
的浮点值,那么它将表示一个长度为0.5的向量,指向负Z轴的方向。如果我们使用一个不寻常的RGBA解释无符号整数值myvector
然后它将代表100%透明的蓝色。)
使用哪个值取决于XMVECTOR对象使用的函数。因此,例如,XMVectorAdd函数将其参数视为两个浮点向量,而XMVectorAndInt将参数视为两个无符号整数向量。可以使用XMVECTOR对象执行的大多数操作都使用浮点值。无符号整数操作数通常用于处理浮点值的机器表示中的位。
答案 2 :(得分:0)
XMVECTOR有unspecified internal layout:
在DirectXMath库中,完全支持可移植性和 优化,XMVECTOR在设计上是一种不透明的类型。实际上 XMVECTOR的实现取决于平台。
所以它可能是一个包含四个元素的数组,或者它可能是一个包含.x,.y,.z和.w成员的结构。或者它可能是完全不同的东西。