glm :: perspective()和glm :: lookAt()如何一起工作?

时间:2018-04-24 10:17:23

标签: c++ opengl graphics glm-math arcball

我正在试图弄清楚lookAt和perspective函数是如何工作的。

我想改变glm :: lookAt的值(特别是相机位置的z值),我注意到如果该值与glm :: perspective中的近平面值不同,它会破坏我的对象(看起来很正常)。然后,我不知道我的问题是否与弧球有关(但我不这么认为,因为在移动对象之前问题也出现了)或者由于某种原因我应该使用相同的值lookAt函数中的摄像机位置(z值)和透视函数中的近平面。

有什么建议吗?

我从https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Arcball

开始实施了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 ...

1 个答案:

答案 0 :(得分:0)

更新问题。解决!

我刚刚发现这是一个z战斗的问题。

对于遇到同样问题的其他用户,我建议使用以下页面:https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm