我是否正确地将局部空间转换为世界空间坐标

Am I converting local space to world space coordinates properly?

本文关键字:空间 转换 世界 坐标 局部 是否 正确地      更新时间:2023-10-16

我正在尝试创建一个骨骼和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);