Как плавно перемещать камеру в соответствии с позициями GPS в OpenGL ES 2 на Android? - PullRequest
0 голосов
/ 06 февраля 2020

Я занимаюсь разработкой приложения для пилотов самолетов. У меня есть 3D-сцена, которая представляет окружающую местность. Камера должна двигаться в соответствии с реальными местоположениями, предоставленными датчиком GPS (я пропускаю способ преобразования реальных координат в координаты OpenGL, это не является проблемой для меня). То, что я хочу получить, это не просто грубый перевод с GPS-положения на другое, что дает резкий эффект. Но я хочу плавного перевода.

Поэтому я попытался построить траекторию с использованием 3D-интерполяции BSpline, считая контрольными точками:

  1. Предыдущая позиция GPS
  2. Текущий Позиция GPS
  3. Прогнозируемая позиция (с использованием сферических координат, с текущим отклонением и шагом)
  4. Другая прогнозируемая позиция (на основе точек 2. и 3.)

Это повторяется каждый раз, когда новая позиция GPS получена. Кроме того, учтите, что BSpline не учитывает первую и последнюю контрольные точки в сгенерированных точках. Очевидно, что трудно точно предсказать следующие позиции, поэтому результат не так хорош, чтобы видеть. Фактически, когда получено новое положение GPS, камера «переходит» на первую позицию списка точек анимации.

Этот код выполняет перевод:

int currentFrame = plane.getCurrentFrame();

if(currentFrame < animationPoints.size() && animationPoints.get(currentFrame) != null) {
    Point currentAnimPoint = animationPoints.get(currentFrame);
    translateM(viewMatrix, 0, -currentAnimPoint.x, -currentAnimPoint.y, currentAnimPoint.z);
}

Как я могу решить это? Можете ли вы предложить мне другую стратегию для создания списка точек?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...