如何将GLM :: VEC3(1.f,0.f,0.f)设置为枚举值
How can I set glm::vec3(1.f, 0.f, 0.f) as a value of an enum?
我想拥有一个包含glm :: vec3的枚举。
目前,我有一个名为" Axis"的枚举,其中包含X,Y和Z。而且,每次使用它们时,我都必须将其映射到带有相应值的glm :: vec3中。
这是我的轴枚举:
enum Axis
{
X,
Y,
Z
};
这就是我当前将其转换为GLM :: vec3:
的方式glm::vec3 angleVector;
switch (axis)
{
case X:
angleVector = glm::vec3(1.0f, 0.0f, 0.0f);
break;
case Y:
angleVector = glm::vec3(0.0f, 1.0f, 0.0f);
break;
case Z:
angleVector = glm::vec3(0.0f, 0.0f, 1.0f);
break;
}
这就是我要使用它的方式:
enum Axis
{
X = glm::vec3(1.0f, 0.0f, 0.0f),
Y = glm::vec3(0.0f, 1.0f, 0.0f),
Z = glm::vec3(0.0f, 0.0f, 1.0f)
};
我尝试了很多事情来获得GLM :: vec3(1.0f,0.0f,0.0f(作为我的枚举确实接受的常数,但没有任何效果。
(
这样:
static const glm::vec3 vec3x = glm::vec3(1.0f, 0.0f, 0.0f);
,然后:
enum Axis
{
X = vec3x
};
(
您可以使用具有静态变量的名称空间。然后,您将能够像枚举一样大致使用它。
namespace Axis
{
static const glm::vec3 X = glm::vec3(1.0f, 0.0f, 0.0f);
static const glm::vec3 Y = glm::vec3(0.0f, 1.0f, 0.0f);
static const glm::vec3 Z = glm::vec3(0.0f, 0.0f, 1.0f);
};
如果要将其传递到函数,则可以创建一个类。但是,然后,您必须在传递该对象时实例化。
class Axis
{
public:
glm::vec3 X = glm::vec3(1.0f, 0.0f, 0.0f);
glm::vec3 Y = glm::vec3(0.0f, 1.0f, 0.0f);
glm::vec3 Z = glm::vec3(0.0f, 0.0f, 1.0f);
};
static const Axis euclidean_space_axis;
void DoStuff(Axis axis)
{
std::cout << "X-axis: " << axis.X.x << ", " << axis.X.y << ", " << axis.X.z << "n" <<
std::cout << "Y-axis: " << axis.Y.x << ", " << axis.Y.y << ", " << axis.Y.z << "n" <<
std::cout << "Z-axis: " << axis.Z.x << ", " << axis.Z.y << ", " << axis.Z.z << std::endl;
}
int main()
{
DoStuff(euclidean_space_axis);
}
您可以使用表而不是切换:
enum Axis { X, Y, Z };
const glm::vec3 axes[] = { glm::vec3(1.0f, 0.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 0.0f, 1.0f)};
,然后
Axis axis = ... whatever ...;
glm::vec3 angleVector = axes[axis];
相关文章:
- 不带大括号的枚举形式
- C++为类中的枚举项设置值
- C++如何将字符串数组中的一个点设置为枚举变量
- 如何在枚举上设置范围?
- 使用索引设置矢量枚举时的奇怪行为
- C++:如何将枚举元素设置为无限?
- 设置类的枚举成员无效地使用"枚举"
- 是否有C++准则将第一个枚举设置为"safe"默认值?
- 如何将GLM :: VEC3(1.f,0.f,0.f)设置为枚举值
- 在类中获取并设置枚举变量
- 可以将枚举的默认类型设置为无符号字符
- 有没有一种方法可以为枚举设置运算符=
- 使用包含QProcess枚举的QString在QTextBrowser中设置文本
- 获取和设置C++中的枚举
- 不按递增顺序手动取消枚举和设置值
- 如何使用包含不同typedef枚举的派生类模板设置构造函数初始化列表
- cpp文件中设置静态枚举变量的正确方法
- 专用模板根据变量类型返回/设置枚举值
- 当试图添加类构造时,C++未设置枚举类型
- 在相同的命名空间但不同的类中为枚举设置值?C++