Tengo un objeto con el que me gustaría hacer seguir una curva bezier y ahora estoy un poco perdido en cuanto a cómo hacerlo en función del tiempo en lugar de los puntos que forman la curva.¿Mover un objeto en la dirección de una curva bezier?
. :: Sistema actual ::. Cada objeto en mi gráfico de escena está hecho de vectores de posición, rotación y escala. Estos vectores se utilizan para formar sus matrices correspondientes: escala, rotación y traducción. Que luego se multiplican en ese orden para formar la matriz de transformación local. Una transformación mundial (generalmente la matriz de identidad) se multiplica luego por la transformación de matriz local.
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 gran pregunta que tengo son
1) ¿Cómo puedo orientar mi objeto hacer frente a la tangente de la curva de Bezier?
2) ¿Cómo muevo ese objeto a lo largo de la curva sin solo colocar la posición de los objetos a la de un punto en la cumbre bezier?
Heres una visión general de la función hasta ahora
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);
}
Editar: lo siento no es muy clara. He estado trabajando en esto por años y está haciendo que mi cerebro se convierta en papilla.
Quiero que el objeto se una a la curva y quede orientado en la dirección de la curva.
En cuanto al movimiento, quiero objetar seguir la curva en función del tiempo, de esta manera se crea un movimiento suave a lo largo de la curva.
Tengo la curva en su forma completa. Obtengo una posición en la curva basada en el valor de t (Véase la función AnimateNode), que se encuentra entre 0 y 1. La función "curve.GetPosition (m_t)" se basa en la ecuación paramétrica de la curva. – Sent1nel