为什么glm :: vec表示VEC值为工会
Why does glm::vec represent vec values as unions?
我正在查看 vec4
glm的源代码实现,我想知道为什么它们代表与联合的矢量值,而不是诸如 float
或 int
?
这是我在vec4
实现中找到的代码:
union { T x, r, s; };
union { T y, g, t; };
union { T z, b, p; };
union { T w, a, q; };
如果我们只写T x
,T y
,T z
,T w
?
,因为vec4
通常用于:
- 空间坐标
x
,y
,z
,w
- 颜色组件
r
,g
,b
,a
- 纹理坐标
s
,t
,p
,q
(尽管这些标准化较少,而且我也看到了在不同上下文中使用的r
和u
)
)
使用工会允许访问例如第二个数据成员为.y
或.g
,具体取决于您的喜好&语义。
glm设计的表现就像glsl一样多。在GLSL中,向量的Swizzle操作可以使用xyzw
,rgba
或stpq
,其中相应的元素名称引用了向量的相同元素。因此,联合用于匹配此行为。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何将ampl中的集合表示为c++中的向量
- 了解 GLM- openGL 中的相机转换
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- OpenGl glm rotate
- c++模板来表示多项式
- 询问在设计我的手臂模拟器功能表示格式1
- CMakeLists.txt中的命名空间表示法
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 如何计算Big-O表示法中的平均渐近运行时间
- 发布旋转矩阵(openGL/glm)
- 我应该如何表示我拥有的连续元素序列?
- 如何在 glRotatef 中使用 glm::mat4
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 表示类模板C++空类型
- 为什么glm :: vec表示VEC值为工会