我为网格生成随机位置,并在将生成的位置设置为最终位置之前检查它们是否太靠近另一个网格。代码在函数调用中未使用时有效,但通过函数调用完成时,只生成一组位置。
有人可以解释为什么会这样吗?
答案 0 :(得分:4)
您正在将std::vector
个实例复制到generateTargets
函数中,因此您不会看到来自调用方的原始向量发生任何更改。
最简单的解决方案是通过引用传递:
void generateTargets(
std::vector<glm::vec3>& positions,
std::vector<glm::quat>& orientations,
int targetNum) { // ...
否则,您可以返回std::tuple
个向量以保持函数纯度。由于移动语义和RVO,这很可能不会产生任何额外费用。
auto generateTargets(
std::vector<glm::vec3> positions, std::vector<glm::quat> orientations, int targetNum)
{
// ...
return std::make_tuple(std::move(positions), std::move(orientations));
}
用法:
std::vector<glm::vec3> positions(targetNum);
std::vector<glm::quat> orientations(targetNum);
auto result = generateTargets(std::move(positions), std::move(orientations), targetNum);