我无法为这个问题找到更好的标题,因为,说实话,我不知道为什么我会收到这个错误。 代码是:
std::sort(VisibleMeshes.begin(), VisibleMeshes.end(), [](const MeshBase* m1, const MeshBase* m2) -> bool
{
float d1 = CamerasManager::ActiveCamera->Position.Distance(m1->MeshPosition);
float d2 = CamerasManager::ActiveCamera->Position.Distance(m2->MeshPosition);
return d1 > d2;
});
VisibleMeshes是MeshBase对象(指针)的向量。 目的是按照距离摄像机的距离,从最远到最近的距离对这些对象进行排序。 代码几乎总是有效,但是,我不时会遇到断言失败。 错误是
"invalid operator <"
有什么想法吗?
答案 0 :(得分:0)
我会回答自己,因为我发现问题并且解决方案可以帮助其他人。 我正在构建一个渲染引擎,我使用两个线程绘制场景并更新它。绘制循环以60 fps运行,而更新循环以500 fps运行。 更新循环中更新摄像机位置(更快),并在绘制循环中进行此排序。更新循环更快,有时(很少)发生相机位置在vectort排序中间变化。此代码修复了问题
Vector3 CameraPosition(CamerasManager::ActiveCamera->Position); // Copy current camera position
std::sort(VisibleMeshes.begin(), VisibleMeshes.end(), [&](const MeshBase* m1, const MeshBase* m2) -> bool
{
float d1 = CameraPosition.Distance(m1->MeshPosition);
float d2 = CameraPosition.Distance(m2->MeshPosition);
return d1 > d2;
}
);
基本上我是将相机位置的副本捕捉到lambda中,以确保它在排序过程中不会改变