有很多教程,每个教程都建议使用gluPerspective
或glFrustum
以及其他内容,但我在设置正确的矩阵时遇到了困难。我需要用什么代码设置向下看+ z轴的45˚透视图?
到目前为止,我有:
glShadeModel(GL_SMOOTH);
glClearColor(0,0,0,0);
glClearDepth(1);
glDepthFunc(GL_LEQUAL);
glViewport(0,0,width,height);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,1,0.1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
但这似乎不起作用。当我试图画画时,我得到的只是黑屏。
编辑:这是最小的绘图代码:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3ub(255,255,255);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(20,20,20);
glVertex3f(20,30,20);
glVertex3f(30,20,20);
glVertex3f(30,30,20);
glEnd();
答案 0 :(得分:2)
诸如(1,1,1)和(2,50,23)点之类的东西。它们没有出现。
那是你的问题。默认的OpenGL摄像机的+ Z轴指向朝向摄像机。并且由于相机处于Z = 0,所以Z位置> 0的任何位置都在相机后面。
将您的点移动到相机前面。他们至少需要一个-Z的位置。
答案 1 :(得分:1)
编辑:这是最小的绘图代码:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3ub(255,255,255); glBegin(GL_TRIANGLE_STRIP); glVertex3f(20,20,20); glVertex3f(20,30,20); glVertex3f(30,20,20); glVertex3f(30,30,20); glEnd();
您的顶点坐标位于查看体积之外。首先,OpenGL默认情况下“向下看”负Z轴,所以你的Z坐标必须是-100 < z&lt; -0.1用于选择近和远剪裁平面。
但即使您在Z坐标上翻转了标记,您的顶点仍然会位于45°FOV之外。 (20,0,20)与观察轴成45°,并且(30,0,20)甚至更远。尝试将顶点坐标围绕(0,0,-5)居中,如(+/- 1,+ / - 1,-5)