gluPerspective需要显示哪个参数才能显示此立方体?

时间:2014-08-24 19:54:29

标签: opengl

有人可以告诉我gluPerspective的正确参数是什么,因为线条立方体可见,类似于glOrtho在这个例子中呈现它的方式? (glOrtho可以用于交换gluPerspective)。按原样,这会显示一个空白窗口。

我尝试了货物结果(a)许多不同的值到gluPerspective,(b)不同大小的立方体,(c)不同的摄像机角度,(d)平移到Z上的不同点;似乎没有工作。我没有尝试调整glViewport,我的理解是这样的简单示例不需要它。

我也正确理解glOrtho,gluPerspective和glFrustum通常是互斥的(它们是指定观看体积的所有不同方式)并且所有这些都与gluLookAt一样可用吗?

void display() {
    glClearColor (1, 1, 1, 0);
    glClear (GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //glOrtho (0, 500, 0, 500, -100, 100);
    gluPerspective (20, 1, 1, 100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt (0, 0, 0, 0, 0, -1, 0, 1, 0); // these are the defaults
    glColor3f(1, 0, 0);
    glTranslatef (250, 250, 0);
    glScalef (2, 2, 2);
    glutWireCube (100.0);
    glFlush();
}

void main (int argc, char **argv) {
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH) ;
    glutInitWindowSize (500, 500);
    glutInitWindowPosition (100, 100);
    int windowHandle = glutCreateWindow ("COMP 390 TME  2 Question 1");
    glutSetWindow (windowHandle);
    glutDisplayFunc (display);
    glutMainLoop();
}

1 个答案:

答案 0 :(得分:2)

仅仅不可能可视化完整立方体,只需修改有效性参数。在顶视图中,您设置的内容如下:+ x向右,+ z向下:

      viewing direction   ^
                          |                 +-+
                          +                 | |
                                            +-+
                       camera at        cube, centered
                        origin         around (250,250,0) 

现在使用正交视图,您实际上可以在相机后面包含对象。但是有一个看法,这是不可能的(至少在一个有用的意义上,你当然可以改变平截头体,但投影中心将随之移动,所以你基本上会移动相机)。您所能做的就是使用一个非常宽的视角(接近180度)来使立方体的一部分可见。但你不能用gluPerspecitve()设置任何东西,让你看到那个立方体的前半部分。

我建议你使用一些更正常的投影,只看一下立方体的方向。如果您将该外观更改为

gluLookAt (0, 0, 0,  1, 1, 0, 0, 1, 0);

这样你可以看到立方体,你可以使用像

这样的常用视角
gluPerspective (90, aspect, 10, 1000);

请注意,aspect应该是视口的宽度除以高度。这是必需的,以便图像不失真,并且正方形被实际显示为正方形。

立方体可能看起来很小,因为它只有4个单位大,但相隔250个。你当然可以使用较小的视角范围("缩放"使用相机),或者只是将相机移近立方体,或者反过来。