我正在尝试创建骨骼和 IK 系统。下面是递归的方法,计算每个骨骼的绝对位置和绝对角度。我用根骨骼和零参数调用它。它工作正常,但当我尝试使用 CCD IK 时,结果终点与计算终点之间存在差异。因此,即使它有效,也许我做错了。
谢谢
void Skeleton::_updateBones( Bone* root,float realStartX, float realStartY, float realStartAngle )
{
if(!root->isRelative())
{
realStartX = 0.0f;
realStartY = 0.0f;
realStartAngle = 0.0f;
}
realStartX += root->getX();
realStartY += root->getY();
realStartAngle += root->getAngle();
float vecX = sin(realStartAngle);
float vecY = cos(realStartAngle);
realStartX += (vecX * root->getLength());
realStartY += (vecY * root->getLength());
root->setFrame(realStartX,realStartY,realStartAngle);
float angle = fmod(realStartAngle,2.0f * 3.141592f);
if( angle < -3.141592f )
angle += (2.0f * 3.141592);
else if( angle > 3.141592f )
angle -= (2.0f * 3.141592f);
for(std::list<Bone>::iterator it = root->begin(); it != root->end(); ++it)
{
_updateBones(&(*it),realStartX,realStartY,angle);
}
}
最佳答案
这看起来不对。
float vecX = sin(realStartAngle);
float vecY = cos(realStartAngle);
交换 sin()
和 cos()
。
float vecX = cos(realStartAngle);
float vecY = sin(realStartAngle);
关于c++ - 我是否正确地将局部空间转换为世界空间坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230288/