-1

我正在为我的计算机图形类做这个 OpenGL 项目,我在其中显示一个对象并旋转它和其他东西,事情是在我们使用的项目开始时glOrtho()它看起来非常棒。

glOrthoOBJ

但是现在老师说我们必须使用glFrustum()透视,如果我使用那个函数,对象是这样绘制的,我真的不知道为什么会这样:

glFrustumOBJ

这是我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(-100, 100, -100, 100, 20, 200) 它看起来像这样,就像我越来越近了,但是 left、right、top 和 bottom 参数呢?他们同意这些价值观吗?

在此处输入图像描述

4

1 回答 1

0

如果没有更多信息,很难确定。也许该模型可以提供一些见解。但我怀疑这可能与您传递给( ) 的剪裁平面(nearVal并且如此farVal所述)参数有关。也许尝试将它们设置为更广泛的范围,例如您的调用:(注意:传递给时既不是也不是负数)。glFrustum1, 40glOrtho1, 150nearValfarValglFrustum

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

于 2017-10-30T15:35:06.277 回答