我想要一个包含glm :: vec3“ constants”的枚举。
当前,我有一个名为“轴”的枚举,其中包含X,Y和Z。每次使用它们时,都必须将它们与开关盒映射为具有相应值的glm :: vec3。
这是我的Axis枚举:
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
};
)
希望您能在那里帮助我。 谢谢
如果这可能是转发,对不起,我搜索了但没有发现任何东西。
答案 0 :(得分:2)
您可以使用带有静态变量的名称空间。然后,您将可以像使用枚举一样大致使用它。
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:
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);
} 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);
}
答案 1 :(得分:1)
您可以使用表格代替切换:
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];