Путь Безье - рассчитать X, Z, дав T из более чем 3 баллов - PullRequest
0 голосов
/ 04 января 2012

Хорошо, вот именно то, что я пытаюсь сделать.

  • Когда я перемещаю мышь по поверхности, я собираю точки CVector2 в std :: vector

  • Эти точки должны создать путь Безье для моего объекта, который будет следовать за ним

На данный момент у меня есть сохраненные позиции, и мне нужно

  • Рассчитайте X, Z на этом пути Безье, чтобы мой объект следовал по этому пути.

Теперь вот что у меня есть:

  • Storeвсе точки как std :: vector
  • И когда двигатель помечает объект i:

// Возвращаем позицию на Безье при текущем fTime

CVector3 CBezierPath :: Calculate (const float & fTime) {CVector3 vPosition;... вернуть vPosition;}

Да, как рассчитать позицию в fTime на пути Безье из N количества точек?

1 Ответ

0 голосов
/ 04 января 2012

Хорошо найдено решение,

Зная, что у меня есть x количество точек маршрута, я генерирую кривые Безье, где количество кривых равно:

iCurves = iWaypointsCount / 3

Теперь, после того как я вычислю T для текущей кривой, я просто перехожу к другой кривой и возобновляю вычисление с 0 до 1.

   // If we are not finished on this curve
    if(m_fBezierT < 1.0)
    {
        m_vPosition = m_BezierPath.CalculateBezierPoint(m_iCurrentCurve, m_fBezierT);

        m_fBezierT += 0.3f * fDelta;
    }
    // Finished, go next curve
    else
    {
        // No more curves
        if(m_iCurrentCurve+1 >= m_BezierPath.GetCurveCount())
        {
            m_fBezierT = 1.0f;
        }
        // Switch to next Curve
        else
        {
            m_fBezierT = 0.0f;
            m_iCurrentCurve++;
        }
    }
...