我正在为我的游戏物理引擎编写一个 vec3 类。
我做了一个运算符重载,允许我将一个向量乘以一个标量(以缩放向量):
const vec3 operator*( const real n ) const
{
return vec3(
m_x * n,
m_y * n,
m_z * n
);
}
如果我在计算中使用正确的顺序,这可以正常工作:
float rImpulse;
vec3 vContactNormal;
...
vec3 vImpulse = vContactNormal * rImpulse;
如果我改变乘法的顺序(例如,如果我在计算中将标量放在首位),那么编译器不喜欢这样并将其突出显示为错误。
我可以更新我的 vec3 类,这样乘法的顺序就无关紧要了吗?如何?(看到答案我估计要拍脑门了!)
更新
我已经从 vec3 类中删除了我原来的运算符重载,并将以下两个运算符重载放在 vec3 类之外:
const vec3 operator*( const vec3 & v, const real r )
{
return vec3(
v.x() * r,
v.y() * r,
v.z() * r
);
}
const vec3 operator*( const real n, const vec3 & v )
{
return v * n;
}