Box2D断言失败:kNormal>;1.19209289550781250000e-7F 我在一个C++程序中运行了一个Box 2D仿真,当这个错误中止了程序: a.out: ./Box2D/Dynamics/Contacts/b2ContactSolver.cpp:96: b2ContactSolver::b2ContactSolver(b2Contact**, int32, b2StackAllocator*, float32): Assertion `kNormal > 1.19209289550781250000e-7F' failed. 这个断言失败表示什么 是什么引起的 我可以用什么方法修复它
我没有任何与该问题相关的进一步上下文。断言至少意味着三件事: One:您正在运行Box2D的调试版本 2:您运行的是比Erin的GitHub repo托管的源代码更旧的Box2D版本 在四处搜索之后,Erin发布的包含此断言的最新源代码似乎是。此zip文件的上载日期为2010年4月17日 您正在运行的旧版Box2D版本2.1.2中的Box2D断言失败:kNormal>;1.19209289550781250000e-7F 我在一个C++程序中运行了一个Box 2D仿真,当这个错误中止了程序: a.out: ./Box2D/Dynamics/Contacts/b2ContactSolver.cpp:96: b2ContactSolver::b2ContactSolver(b2Contact**, int32, b2StackAllocator*, float32): Assertion `kNormal > 1.19209289550781250000e-7F' failed. 这个断言失败表示什么 是什么引起的 我可以用什么方法修复它,c++,runtime-error,box2d,game-physics,assert,C++,Runtime Error,Box2d,Game Physics,Assert,我没有任何与该问题相关的进一步上下文。断言至少意味着三件事: One:您正在运行Box2D的调试版本 2:您运行的是比Erin的GitHub repo托管的源代码更旧的Box2D版本 在四处搜索之后,Erin发布的包含此断言的最新源代码似乎是。此zip文件的上载日期为2010年4月17日 您正在运行的旧版Box2D版本2.1.2中的b2ContactSolver.cpp的源代码显示了第96行中围绕断言的以下相关代码: float32 kNormal = bodyA->m_invMass +
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;
三:物体A和物体B的逆质量及其有效逆旋转质量之和不大于b2_ε
,其中在本版本的Box2Db2_ε
中设置为FLT_ε
(在b2Settings.h
)
这可能是由于各种原因造成的,比如两个物体的质量都为零。例如,如果kNormal
的任何组件值为NaN
,我相信大于检查也会失败kNormal
小于零当然也会导致该检查失败
至于你能做些什么来进一步评估和解决问题,这里有一些想法浮现在你的脑海中
您是否创建了很多固定器和/或关节?这些线程是旧的,但两者(第一个链接有到第二个帖子的链接)似乎都遇到了错误,分辨率(在第二个帖子中,box2d的创建者在末尾的评论)通常与身体的质量有关-被操纵为负值或接近于0,您使用的是什么版本/版本的box2d?我没有在最近提交的
b2ContactSolver.cpp
文件的第96行附近找到任何断言。感谢您的全面回答!我已经解决了另一个不相关的问题,所以我现在没事了。但这个答案可能对未来的人们有所帮助。