为什么glm :: vec将vec值表示为联合?

时间:2017-02-24 15:44:57

标签: c++ glm-math

我正在查看vec4 glm的源代码实现,我想知道为什么它们用union表示向量值,而不是像floatint这样的原始数据类型?

这是我在vec4实施中找到的代码:

union { T x, r, s; };
union { T y, g, t; };
union { T z, b, p; };
union { T w, a, q; };

如果我们只写T xT yT zT w,会有什么不同?

2 个答案:

答案 0 :(得分:19)

因为vec4通常用于:

  • 空格坐标xyzw
  • 颜色成分rgba
  • 纹理坐标stpq(尽管这些标准不太标准化,我也​​看到r和{ {1}}在不同的情境中使用)

使用联合允许使用访问例如第二个数据成员为u.y,具体取决于您的偏好&语义。

答案 1 :(得分:16)

GLM的设计与GLSL一样,与C ++允许的一样。在GLSL中,向量的混合操作可以使用xyzwrgbastpq,相应的元素名称引用向量的相同元素。因此,union用于匹配此行为。