Ich habe ein Objekt, mit dem ich eine Bezier-Kurve folgen lassen möchte und bin jetzt ein wenig verloren, um es auf der Grundlage der Zeit und nicht der Punkte zu machen, die die Kurve ausmachen.Ein Objekt in Richtung einer Bezier-Kurve bewegen?
. :: Aktuelles System ::. Jedes Objekt in meinem Szenegraph wird aus Positions-, Drehungs- und Skalierungsvektoren erstellt. Diese Vektoren werden verwendet, um ihre entsprechenden Matrizen zu bilden: Skalierung, Rotation und Translation. Diese werden dann in dieser Reihenfolge multipliziert, um die lokale Transformationsmatrix zu bilden. Eine Welttransformation (normalerweise die Identitätsmatrix) wird dann mit der lokalen Matrixtransformation multipliziert.
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;
}
Die große Frage, die ich habe sind
1) Wie kann ich mein Objekt orientieren die Tangente der Bezier-Kurve stellen?
2) Wie bewege ich dieses Objekt entlang der Kurve, ohne nur die Position des Objekts auf die eines Punktes auf der Bezier-Kurve zu setzen?
Heres eine Übersicht über die Funktion bisher
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: traurig es ist nicht ganz klar. Ich arbeite seit Ewigkeiten daran und es macht mein Gehirn zu Brei.
Ich möchte, dass das Objekt an der Kurve befestigt wird und der Richtung der Kurve zugewandt ist.
Wie für die Bewegung möchte ich ablehnen, um die Kurve basierend auf der Zeit folgen, auf diese Weise schafft es eine gleichmäßige Bewegung in der gesamten Kurve.
Ich habe die Kurve in ihrer vollen Form. Ich bekomme eine Position auf der Kurve basierend auf dem Wert von t (siehe die Funktion AnimateNode), die zwischen 0 und 1 liegt. Die Funktion "curve.GetPosition (m_t)" basiert auf der parametrischen Gleichung der Kurve. – Sent1nel