где v является локальной осью x, y или z, трансформированная в мировое пространство.
Вот фрагмент кода для этого: < /p>
Код: Выделить всё
glm::vec3 forward = transforms[parent].forward();
glm::vec3 forwardCross = glm::cross(bone, forward);
ikt.jacobi(index + 0, j + 2) = forwardCross.x;
ikt.jacobi(index + 1, j + 2) = forwardCross.y;
ikt.jacobi(index + 2, j + 2) = forwardCross.z;
< /code>
и после затухания наименьших квадратов я добавляю тета-изменения через Eulers.glm::vec3 oldEul = transforms[child].getEulerRotation();
glm::vec3 eulDelta = { dTheta(jointNum + 0), dTheta(jointNum + 1), dTheta(jointNum + 2) };
transforms[child].setEulerRotation(oldEul + eulDelta);
Подробнее здесь: https://stackoverflow.com/questions/794 ... acobian-ik
Мобильная версия