与gluPerspective的Opengl混淆

时间:2015-01-31 18:50:48

标签: c++ opengl

大家好,我是opengl的初学者,并试图理解gluPerspective()函数的概念。我浏览了这篇帖子gluPerspective parameters- what do they mean?帖子并写了这段代码

glClearColor(1.0,1.0,1.0,1.0);
glClear(GL_DEPTH_BUFFER_BIT);
glViewport(0,0,500,500);
gluPerspective(45,16/9,1.0,3.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_QUADS);
    glVertex3f(100.0f,0.0f,2.0f);
    glVertex3f(0.0f,0.0f,2.0f);
    glVertex3f(0.0f,100.0f,2.0f);
    glVertex3f(100.0f,100.0f,2.0f);
glEnd();
glFlush();

这是调度功能,但渲染黑屏。我的代码出错了

2 个答案:

答案 0 :(得分:2)

在致电glMatrixMode(GL_PROJECTION);之前致电gluPerspective 之后切换回glMatrixMode(GL_MODELVIEW);

答案 1 :(得分:0)

gluPerspective()在您的视点位于原点的情况下设置投影矩阵,并且您正在向下看负z轴。 zNearzFar参数指定将包含在视图卷中的负z轴的距离范围。

因此,当zNear设置为1.0且zFar设置为3.0时,-1.0到-3.0范围内的z值将位于视图卷内。

要使四边形可见,您必须使用该范围内的坐标。将所有z坐标从2.0更改为-2.0都可以。更典型的方法是应用视图变换将几何图形放置在投影变换所需的位置。

例如,在您的情况下,您可以将四边形放置在原点周围,然后使用gluLookAt()或简单的平移,将几何向下移动到负z轴。

您还需要注意矩阵模式。投影矩阵通常应设置为相应的矩阵模式。

整件事情看起来像这样:

glMatrixMode(GL_PROJECTION);
gluPerspective(45,16/9,1.0,3.0);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0.0f, 0.0f, -2.0f);
glColor3f(1.0,0.0,0.0);
glBegin(GL_QUADS);
glVertex3f(100.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 100.0f, 0.0f);
glVertex3f(100.0f, 100.0f, 0.0f);
glEnd();

请注意,x和y坐标的范围远远超出[-1.0,1.0]的默认坐标范围。您可能希望使用其他转换/缩放,或使用更小的值。