首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CCD中的无级旋转

CCD中的无级旋转
EN

Stack Overflow用户
提问于 2011-03-07 15:44:14
回答 1查看 4.5K关注 0票数 0

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再次坐着旋转。

如果有人能帮忙的话,我真的会的!很感激你。如果需要更多的信息(代码等),请随时询问。

提前谢谢克里斯

EN

回答 1

Stack Overflow用户

发布于 2011-03-10 01:43:59

很多事情都可能是错误的,你必须调试你的程序。

每个关节:

end.

  • Calculate
  1. 检索目标位置target和末端效应位置target新的关节值q,了解关节的转换。
  2. 计算新的关节值的末端效应位置endNew

如果从endtarget的距离小于从endNewtarget的距离,那么您已经发现了一个bug (所有旋转都是错误的)。要么是在2中选择q,要么是在计算1和3中的末端效应器位置。

我不愿意使用其他人的随机示例代码(or even my own)。例如,着陆器写

代码语言:javascript
复制
CrossProduct(&curVector, &targetVector, &crossResult);
NormalizeVector(&crossResult);

但我们能肯定,如果除法为零(比如说,如果是curVector = -targetVector),它不会崩溃吗?

如果关节是旋转的(而不是像着陆器的例子那样是球形的),那么请参阅Lander的参考资料中的Wang & Chen。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5221676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档