需要对direct3D11中的向量概念进行一些澄清

时间:2015-07-19 02:40:53

标签: c++ vector direct3d11

我首先想到的是,向量只是可以存储多个相同类型值的数组。但我认为direct3d在" vector"

中使用了不同的术语

让我们举例说,我们使用函数XMVectorSet()

创建一个向量
XMVECTOR myvector;

myvector = XMVectorSet(0.0f, 0.0f, -0.5f, 0.0f);

我在myvector内存储了什么?我只存储一个浮点值数组吗?

3 个答案:

答案 0 :(得分:1)

C ++"" vector"确实是类似阵列的存储容器。

你是正确的,因为Direct3D正在使用术语"向量的不同含义":它们更具全球性的数学意义。这些向量是方向大小的数量。

进一步阅读:

答案 1 :(得分:1)

一般来说,Direct3D中的向量是2到4个相同浮点或整数类型元素的有序集合。从概念上讲,它们与数组相似,但更像是一个结构。这些元素通常由xyzw之类的名称引用,而不是数字。根据上下文,您可以使用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成员的结构。或者它可能是完全不同的东西。