Heya我目前正在从事我的学位最后一年的项目,这是2部分A)创建一个好的3D引擎和B)在其中实现一个IK系统和评估几种类型的IK解决方案。CCD (循环坐标下降)是我开始和遇到问题的地方.我使用了大量的源代码来尝试处理IK,特别是当涉及到http://www.darwin3d.com/gdm1998.htm时,我使用了源代码作为可用的基础:
在我开始发布我的源代码之前,我希望我的问题是一些显而易见或简单的东西,这是以前有人遇到过的。下面是一个显示问题的简短视频:http://www.youtube.com/watch?v=XtU8rFR-DuE
显然,这是不对的,IK剥离,一般似乎会感到困惑的很多!如果目标保持静止,那么它就收敛得很好,甚至是最小的运动(在这个系统中经常发生,因为目标是由基于红外的运动捕获驱动在我的引擎中),它似乎重新计算并重新开始旋转。
另外,当关节超出范围时,你会假设按照CCD技术,所有的关节都指向目标,只是达到了回路的极限,但是你仍然可以用正确的方式瞄准IK,但是如果目标超出了范围,视频中就可以清楚地看到IK再次坐着旋转。
如果有人能帮忙的话,我真的会的!很感激你。如果需要更多的信息(代码等),请随时询问。
提前谢谢克里斯
发布于 2011-03-10 01:43:59
很多事情都可能是错误的,你必须调试你的程序。
每个关节:
end.
target和末端效应位置target新的关节值q,了解关节的转换。endNew。如果从end到target的距离小于从endNew到target的距离,那么您已经发现了一个bug (所有旋转都是错误的)。要么是在2中选择q,要么是在计算1和3中的末端效应器位置。
我不愿意使用其他人的随机示例代码(or even my own)。例如,着陆器写
CrossProduct(&curVector, &targetVector, &crossResult);
NormalizeVector(&crossResult);但我们能肯定,如果除法为零(比如说,如果是curVector = -targetVector),它不会崩溃吗?
如果关节是旋转的(而不是像着陆器的例子那样是球形的),那么请参阅Lander的参考资料中的Wang & Chen。
https://stackoverflow.com/questions/5221676
复制相似问题