Я реализую игру в трехмерный лабиринт на C ++, используя OpenGL, где камера находится в фиксированном положении точно над серединой лабиринта, глядя на середину. Он работает и выглядит так, как я хотел, но мой код не так хорош, потому что мне нужно было поместить + 0.01f
в положение, чтобы оно работало хорошо. Если я пропущу это, лабиринт не появится, кажется, что камера направлена в противоположную сторону .. Как я могу это исправить элегантно?
glm::vec3 FrontDirection = glm::vec3(((GLfloat)MazeSize / 2) + 0.01f, 0.0f, ((GLfloat)MazeSize / 2)
The (0,0,0) ori go location - это левый угол лабиринта (начальная позиция), поэтому я установил позицию следующим образом:
glm::vec3 CameraPosition = glm::vec3(((GLfloat)MazeSize / 2), ((GLfloat)MazeSize + 5.0f), ((GLfloat)MazeSize / 2))
UpDirection is (0.0f, 1.0f, 0.0f)
Функция lookAt выглядит так:
Matrix = glm::lookAt(CameraPosition, FrontDirection, UpDirection);
Я знаю, что по соглашению в OpenGL камера указывает на отрицательную ось z, поэтому FrontDirection в основном указывает в направлении, обратном тому, на что она нацелена. Для меня было бы совершенно ясно установить позиции, как я сделал выше, но это все еще не работает, как я ожидал. (если я не поставлю это + 0.01f
)
Заранее спасибо за ваш ответ!