我正在尝试编写一个自我练习程序来测试我的知识是否正确。但现在我发现透视图有问题
我正在使用新的 glfw 3 :)
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
//Pressing A key to pull the object up one unit
if( key==65 && action==GLFW_PRESS){
glMatrixMode(GL_MODELVIEW);
glTranslatef(0, 0, 1);
}
}
int main(int argc, char *argv[])
{
init();
GLFWwindow *window=initWindow(800, 600, "Projection Testing");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,800/ static_cast<float>(600), 4, 10);
//glOrtho(0, width/ (float)height, 0, 1, -10, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glVertex3f(0,0,0);
glVertex3f(800/ static_cast<float>(600),0,0);
glVertex3f(800/ static_cast<float>(600),1,0);
glVertex3f(0,1,0);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
注意这里
gluPerspective(90,800/ static_cast<float>(600), near clipping plane, 10);
我很确定其他代码是正确的......
我的眼睛被设置在位置 (0, 0, 5) 并以 FOV=60 度看着 (0, 0, 0)。
我知道对象必须在截锥体中才能被看到。如果我将剪裁平面附近设置为 4,我需要按 2 次 A 键才能使正方形消失(第二次使对象脱离平截头体)如果我将其设置为 2,我需要 4 次按 A 键才能让方块消失
但是,如果我将其设置为 1,则需要 4 次而不是 5 次,我不知道为什么
对不起,我的英语不好..