У меня есть объект, с помощью которого я хотел бы сделать так, чтобы он следовал кривой Безье, и сейчас я немного не понимаю, как это сделать, основываясь на времени, а не на точках, составляющих кривая.
. :: Каждый объект в моем графике сцены состоит из векторов положения, вращения и масштаба. Эти векторы используются для формирования соответствующих им матриц: масштаб, поворот и перенос. Которые затем умножаются в указанном порядке для формирования матрицы локального преобразования. Затем мировое преобразование (обычно единичная матрица) умножается на преобразование локальной матрицы.
class CObject
{
public:
// Local transform functions
Matrix4f GetLocalTransform() const;
void SetPosition(const Vector3f& pos);
void SetRotation(const Vector3f& rot);
void SetScale(const Vector3f& scale);
// Local transform
Matrix4f m_local;
Vector3f m_localPostion;
Vector3f m_localRotation; // rotation in degrees (xrot, yrot, zrot)
Vector3f m_localScale;
}
Matrix4f CObject::GetLocalTransform()
{
Matrix4f out(Matrix4f::IDENTITY);
Matrix4f scale(), rotation(), translation();
scale.SetScale(m_localScale);
rotation.SetRotationDegrees(m_localRotation);
translation.SetTranslation(m_localTranslation);
out = scale * rotation * translation;
}
У меня есть большой вопрос:
1) Как мне сориентировать мой объект так, чтобы он смотрел на касательную кривой Безье?
2) Как мне перемещать этот объект по кривой, не просто устанавливая положение объектов в положение точки на кюве Безье?
Вот обзор функции на данный момент
void CNodeControllerPieceWise::AnimateNode(CObject* pSpatial, double deltaTime)
{
// Get object latest pos.
Vector3f posDelta = pSpatial->GetWorldTransform().GetTranslation();
// Get postion on curve
Vector3f pos = curve.GetPosition(m_t);
// Get tangent of curve
Vector3f tangent = curve.GetFirstDerivative(m_t);
}
Редактировать: извините, это не очень ясно . Я работал над этим целую вечность, и от этого мой мозг превратился в кашу.
Я хочу, чтобы объект был прикреплен к кривой и смотрел в направлении кривой.
Что касается движения, я хочу возразить чтобы следовать кривой в зависимости от времени, таким образом создается плавное движение по кривой.