Как я могу установить камеру с высоты птичьего полета, используя GLM? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь настроить камеру с высоты птичьего полета.Под этим я подразумеваю указывать прямо вниз.Это то, что я инициализировал до сих пор:

glm::vec3 camPosition = glm::vec3(0.0f, 10.0f, 0.0f);  // camera's position
glm::vec3 camFront = glm::vec3(0.0f, 0.0f, 0.0f);  // where the camera is pointing
glm::vec3 camUp = glm::vec3(0.0f, 0.0f, 1.0f);

Я передаю это в функцию glm::lookat, но это не работает вообще.Возможно, я не очень хорошо это понял ...

1 Ответ

0 голосов
/ 02 марта 2019

Я пытаюсь настроить камеру с высоты птичьего полета.

Рекомендую сделать следующее.Определите 2 вектора.

  1. Определите вектор роста мира.Это означает вектор, который указывает землю на небо в системе координат вашего мира:

     glm::vec3 world_up( 0.0f, 0.0f, 1.0f );
    
  2. Определите направление на север в системе координат вашего мира:

     glm::vec3 world_north( 0.0f, 1.0f, 0.0f );
    

С помощью этой информации можно задать векторы системы координат вида.

  1. camPosition - это позицияптица".Точка в небе:

    float height = 10.0f;
    glm::vec3 camPosition = world_up * 10.0f;
    
  2. camTraget это позиция, на которую смотрит «птица».Точка на земле:

    glm::vec3 camTraget = glm::vec3(0.0f, 0.0f, 0.0f);
    
  3. camUp перпендикулярно вектору от camPosition до camTraget.Поскольку «птица» смотрит на землю, это направление полета птицы (например, на север):

    glm::vec3 camUp = world_north;
    

С помощью этих векторов матрицу вида можно настроить с помощьюglm::lookAt():

glm::mat4 view = glm::lookAt( camPosition, camTraget, camUp );
...