Я пытаюсь выяснить, как именно работают 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 ...
Обновление вопроса. РЕШИТЬ!
Я только что обнаружил, что это была проблема z-борьбы.
Для других пользователей, имеющих такую же проблему, я предлагаю эту страницу: https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm
Других решений пока нет …