为什么glm :: vec表示VEC值为工会

Why does glm::vec represent vec values as unions?

本文关键字:表示 glm vec 为什么 VEC      更新时间:2023-10-16

我正在查看 vec4 glm的源代码实现,我想知道为什么它们代表与联合的矢量值,而不是诸如 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

有什么区别

,因为vec4通常用于:

  • 空间坐标xyzw
  • 颜色组件rgba
  • 纹理坐标stpq(尽管这些标准化较少,而且我也看到了在不同上下文中使用的ru

使用工会允许访问例如第二个数据成员为.y.g,具体取决于您的喜好&语义。

glm设计的表现就像glsl一样多。在GLSL中,向量的Swizzle操作可以使用xyzwrgbastpq,其中相应的元素名称引用了向量的相同元素。因此,联合用于匹配此行为。