Как glm :: перспектива () и glm :: lookAt () работают вместе?

Я пытаюсь понять, как работают функции lookAt и перспективы.

Я хотел бы изменить значение glm :: lookAt (в частности, значение z положения камеры), и я заметил, что если это значение отличается от значения ближней плоскости в glm :: перспектива, оно ломает мой объект (это выглядит ненормально). Тогда я не знаю, связана ли моя проблема с аркболом (но я так не думаю, поскольку проблема возникает также до перемещения объекта) или с тем фактом, что по какой-то причине я должен использовать то же значение для положения камеры (значение z) в функции lookAt и в ближней плоскости в функции перспективы.

Какие-либо предложения?

Я взял реализацию аркбола из https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Arcball

Main.cpp:

// ... Something ...

// lookAt function
glm::mat4 view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), glm::vec3(0., 
0., 0.), glm::vec3(0., 1., 0.));

// ... Something ...

while(!glfwWindowShouldClose(window)) {

    // ... Something ...

    // perspective
    glm::mat4 projection = glm::perspective(glm::radians(45.0f), 
    (float)WIDTH / (float)HEIGHT, 0.1f, 10.f);

    // arcball
    glm::mat4 rotated_view = view * arcball.rotation_matrix_view();
    glm::mat4 rotated_model = model * 
    arcball.rotation_matrix_model(rotated_view);

    ourShader.setMat4("projection", projection);
    ourShader.setMat4("view", rotated_view);
    ourShader.setMat4("model", rotated_model);

    // ... Something ...

}
// ... Something ...

person cphtr    schedule 24.04.2018    source источник


Ответы (1)


Обновление вопроса. РЕШЕНО!

Я только что обнаружил, что это проблема z-боя.

Для других пользователей, у которых есть такая же проблема, я предлагаю эту страницу: https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm

person cphtr    schedule 24.04.2018