Opengl 如果使用glFrustum,为什么绘制的对象不同?

Opengl 如果使用glFrustum,为什么绘制的对象不同?,opengl,glfrustum,Opengl,Glfrustum,我正在为我的计算机图形学课程做这个OpenGL项目,在那里我显示一个对象,然后旋转它等等,问题是在项目开始时我们使用了glOrtho(),它看起来非常棒 但是现在老师说我们必须使用glFrustum()进行透视,如果我使用该函数,对象是这样绘制的,我真的不知道为什么会发生这种情况: 这是我在init()函数中的代码,其中所有内容都会更改: void init (void) { /* select clearing (background) color */ gl

我正在为我的计算机图形学课程做这个OpenGL项目,在那里我显示一个对象,然后旋转它等等,问题是在项目开始时我们使用了
glOrtho()
,它看起来非常棒

但是现在老师说我们必须使用
glFrustum()
进行透视,如果我使用该函数,对象是这样绘制的,我真的不知道为什么会发生这种情况:

这是我在
init()
函数中的代码,其中所有内容都会更改:

void init (void)
{
    /*  select clearing (background) color       */
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-100.0, 100.0, -60.0, 160.0, -100.0, 100.0);
    //glFrustum(-100, 100 ,-100 ,100 ,1 , 40);


    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glRotatef(90,0,1,0);
}
谢谢你的帮助

编辑:如果我使用glFrustum(-100100,-100100100,20200),看起来像这样,好像我越来越接近了,但是左、右、上、下参数呢?他们同意这些价值观吗


没有更多的信息,很难确定。或许该模型可以提供一些见解。但我怀疑这可能与传递给
glFrustum
1,40
)的剪裁平面(
nearVal
farVal
)参数有关。也许可以尝试将它们设置为更大的范围,如
glor to
调用:
1150
(注意:
nearVal
farVal
在传递到
glFrustum
时都不能为负值)


这一切都取决于模型的比例以及模型相对于摄影机的位置。如果模型的一部分落在剪裁平面之外,那么它将,嗯。。。剪裁。

尝试更接近的近远比,您将得到更接近正交投影的结果。例如,尝试glFrustum(-100100,-100100,20150)。40:1是极端的。@Victor:
far/near
的比率决不会使透视投影更接近正射投影,40:1的比率也不会“极端”。