J'ai un objet avec lequel je voudrais faire suivre une courbe de bezier et je suis un peu perdu maintenant quant à la façon de le faire faire en fonction du temps plutôt que les points qui composent la courbe.Déplacer un objet dans le sens d'une courbe de Bézier?
. :: Système actuel ::. Chaque objet de mon graphe de scène est constitué de vecteurs de position, de rotation et d'échelle. Ces vecteurs sont utilisés pour former leurs matrices correspondantes: échelle, rotation et translation. Qui sont ensuite multipliés dans cet ordre pour former la matrice de transformation locale. Une transformation de monde (généralement la matrice d'identité) est ensuite multipliée par rapport à la transformée de matrice locale.
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;
}
La grande question que je
sont1) Comment puis-je orienter mon objet pour faire face à la tangente de la courbe de Bézier?
2) Comment est-ce que je déplace cet objet le long de la courbe sans juste placer la position d'objets à celle d'un point sur la cuve de bezier?
Heres un aperçu de la fonction jusqu'à
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);
}
Edit: désolé son pas très clair. Cela fait des années que je travaille là-dessus et que mon cerveau se transforme en bouillie.
Je souhaite que l'objet soit attaché à la courbe et fasse face à la direction de la courbe. En ce qui concerne le mouvement, je veux m'opposer à suivre la courbe en fonction de l'heure de cette façon, il crée un mouvement fluide tout au long de la courbe.
J'ai la courbe dans sa forme complète. J'ai une position sur la courbe basée sur la valeur de t (voir la fonction AnimateNode), qui se situe entre 0 et 1. La fonction "curve.GetPosition (m_t)" est basée sur l'équation paramétrique de la courbe. – Sent1nel