有人可以告诉我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();
}
答案 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个。你当然可以使用较小的视角范围("缩放"使用相机),或者只是将相机移近立方体,或者反过来。