Box2D 断言失败:kNormal > 1.19209289550781250000e-7F
Box2D assertion failed: kNormal > 1.19209289550781250000e-7F
我是运行 C++ 程序中的 Box2D 模拟,当这个错误中止程序时:
a.out: ./Box2D/Dynamics/Contacts/b2ContactSolver.cpp:96: b2ContactSolver::b2ContactSolver(b2Contact**, int32, b2StackAllocator*, float32): Assertion `kNormal > 1.19209289550781250000e-7F' failed.
- 这个断言失败说明什么?
- 可能是什么原因造成的?
- 我可以用什么方法解决它?
我没有任何与此问题相关的进一步背景信息。
断言至少意味着三件事:
一个: 你是 运行 Box2D 的调试版本。
二:您 运行 Box2D 的版本比 Erin Box2D GitHub 存储库中托管的源代码旧。
经过四处搜索,Erin 发布的最新源代码中似乎有这个断言是Box2D_v2.1.2。此 zip 文件的上传日期是 2010 年 4 月 17 日。
您是 运行 的旧 Box2D 版本 2.1.2 中 b2ContactSolver.cpp
的源代码显示了以下围绕第 96 行断言的相关代码:
float32 kNormal = bodyA->m_invMass + bodyB->m_invMass + bodyA->m_invI * rnA + bodyB->m_invI * rnB;
b2Assert(kNormal > b2_epsilon);
ccp->normalMass = 1.0f / kNormal;
三:bodyA和bodyB的反质量和它们的有效反rotational-based质量之和,不大于 b2_epsilon
,在此版本的 Box2D 中 b2_epsilon
设置为 FLT_EPSILON
(在 b2Settings.h
中)。
这可能由于多种原因而发生,例如两个物体都以某种方式具有零反质量。例如,如果 kNormal
的任何组件值是 NaN
,我相信 greater-than 检查也会失败。 kNormal
小于零当然也会导致此检查失败。
至于您可以做些什么来进一步评估和解决问题,这里有一些想法...
- 您可以查看使用 Box2D 的源代码,看看您的身体是否存在无效质量、无效反质量、无效转动惯量或无效逆转动惯量。
- 您可以升级到较新版本的 Box2D,看看问题是否消失。
- 您可以使用 non-debug 构建的 Box2D 并查看是否得到除以零的错误。
我是运行 C++ 程序中的 Box2D 模拟,当这个错误中止程序时:
a.out: ./Box2D/Dynamics/Contacts/b2ContactSolver.cpp:96: b2ContactSolver::b2ContactSolver(b2Contact**, int32, b2StackAllocator*, float32): Assertion `kNormal > 1.19209289550781250000e-7F' failed.
- 这个断言失败说明什么?
- 可能是什么原因造成的?
- 我可以用什么方法解决它?
我没有任何与此问题相关的进一步背景信息。
断言至少意味着三件事:
一个: 你是 运行 Box2D 的调试版本。
二:您 运行 Box2D 的版本比 Erin Box2D GitHub 存储库中托管的源代码旧。
经过四处搜索,Erin 发布的最新源代码中似乎有这个断言是Box2D_v2.1.2。此 zip 文件的上传日期是 2010 年 4 月 17 日。
您是 运行 的旧 Box2D 版本 2.1.2 中 b2ContactSolver.cpp
的源代码显示了以下围绕第 96 行断言的相关代码:
float32 kNormal = bodyA->m_invMass + bodyB->m_invMass + bodyA->m_invI * rnA + bodyB->m_invI * rnB;
b2Assert(kNormal > b2_epsilon);
ccp->normalMass = 1.0f / kNormal;
三:bodyA和bodyB的反质量和它们的有效反rotational-based质量之和,不大于 b2_epsilon
,在此版本的 Box2D 中 b2_epsilon
设置为 FLT_EPSILON
(在 b2Settings.h
中)。
这可能由于多种原因而发生,例如两个物体都以某种方式具有零反质量。例如,如果 kNormal
的任何组件值是 NaN
,我相信 greater-than 检查也会失败。 kNormal
小于零当然也会导致此检查失败。
至于您可以做些什么来进一步评估和解决问题,这里有一些想法...
- 您可以查看使用 Box2D 的源代码,看看您的身体是否存在无效质量、无效反质量、无效转动惯量或无效逆转动惯量。
- 您可以升级到较新版本的 Box2D,看看问题是否消失。
- 您可以使用 non-debug 构建的 Box2D 并查看是否得到除以零的错误。