部屋 我目前正在完成我的学位最终年度项目,这是2部分A)创建一个好的3D引擎,B)在其中实现IK系统并评估几种类型的IK解决方案。 CCD(Cyclic-Coordinate Descent)是我开始的地方,我遇到了一个问题。 我已经使用了大量的资源来尝试掌握IK,特别是在CCD方面,我使用了源代码作为基础:http://www.darwin3d.com/gdm1998.htm
在我开始发布我的源代码之前,我希望我的问题是某个人之前遇到过的明显或简单的问题。 以下是显示问题的简短视频:http://www.youtube.com/watch?v=XtU8rFR-DuE
显然这是不对的,IK旋转并且通常看起来很混乱! 如果目标保持不变,那么它会很好地收敛,但即使是最小的运动(由于我的引擎中的目标由基于IR的运动捕捉驱动,在该系统中发生很多)并且它似乎重新计算并再次开始旋转。
当关节超出范围时,您会假设遵循CCD技术,关节将全部指向目标并且只是达到循环限制,但您仍然会以正确的方式获得IK目标,但很明显在视频中,如果目标超出范围,则IK会再次迭代并旋转。
如果有人可以提供帮助,我会真的!欣赏它。 如果需要更多信息(代码等),请随时提问。
提前致谢 克里斯
答案 0 :(得分:0)
大量的事情可能是错的;你必须调试你的程序。
对于每个关节:
target
和末端效应器位置end
。q
。endNew
的末端效应器位置q
。如果从end
到target
的距离小于从endNew
到target
的距离,则表示您发现了一个错误(所有旋转错误)。要么是在2.中选择q
,要么在1.和3中计算末端效应器位置。
我不愿意使用其他人的随机示例代码(or even my own)。例如Lander写道
CrossProduct(&curVector, &targetVector, &crossResult);
NormalizeVector(&crossResult);
但是我们确定这不会因为除零而崩溃(例如,如果curVector = -targetVector
)?
如果关节是旋转的(并且不像兰德的例子那样是球形的),那么请参见Wang&陈在兰德的数学参考文献中。