1

有很多教程都建议使用gluPerspectiveglFrustum结合其他东西,但我在设置正确的矩阵时遇到了困难。我需要什么代码来设置俯视 +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();
4

2 回答 2

2

诸如 (1,1,1) 和 (2,50,23) 上的点之类的东西。他们没有出现。

嗯,有你的问题。默认的 OpenGL 相机的 +Z 轴指向相机。并且由于相机在 Z=0,任何 Z 位置大于 0 的位置都在相机后面。

将您的点移动到相机前。他们至少需要有一个 -Z 位置。

于 2012-04-28T04:37:48.517 回答
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 < -0.1。

但即使您翻转 Z 坐标上的符号,您的顶点仍然会位于 45° FOV 之外。(20, 0, 20) 与视轴成 45°,并且 (30, 0, 20) 更远。尝试将您的顶点坐标围绕 (0,0,-5) 居中,例如 (+/-1, +/-1, -5)

于 2012-04-28T08:57:47.900 回答