Правильно ли я конвертирую локальное пространство в координаты мирового пространства? - PullRequest
0 голосов
/ 03 июня 2011

Я пытаюсь создать систему костей и ИК. Ниже приведен рекурсивный метод, который рассчитывает абсолютные положения и абсолютные углы каждой кости. Я называю это с корневой костью и нулевыми параметрами. Это работает нормально, но когда я пытаюсь использовать 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);
    }

}

1 Ответ

1 голос
/ 03 июня 2011

Это выглядит неправильно.

float vecX = sin(realStartAngle);
float vecY = cos(realStartAngle);

Своп sin() и cos().

float vecX = cos(realStartAngle);
float vecY = sin(realStartAngle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...