如果我使用 glFrustum,为什么这个对象绘制不同?
Why is this object drawn different if I use glFrustum?
我正在为我的计算机图形做这个 OpenGL 项目 class,我在其中显示一个对象并旋转它等等,问题是在项目开始时我们使用 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(-100, 100, -100, 100, 20, 200) 它看起来像这样,好像我越来越近了但是左、右、上和下参数呢?他们接受这些价值观吗?
没有更多信息,很难确定。也许该模型可以提供一些见解。但我怀疑这可能与传递给 glFrustum
(1, 40
) 的参数有关(nearVal
和 farVal
,如 here 所述)。也许尝试将它们设置为更广泛的范围,例如您的 glOrtho
调用:1, 150
(注意:当传递给 glFrustum
时,nearVal
或 farVal
都不能为负数)。
这完全取决于模型的比例以及它相对于相机的定位方式。如果模型的一部分落在裁剪平面之外,那么它将被裁剪。
我正在为我的计算机图形做这个 OpenGL 项目 class,我在其中显示一个对象并旋转它等等,问题是在项目开始时我们使用 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(-100, 100, -100, 100, 20, 200) 它看起来像这样,好像我越来越近了但是左、右、上和下参数呢?他们接受这些价值观吗?
没有更多信息,很难确定。也许该模型可以提供一些见解。但我怀疑这可能与传递给 glFrustum
(1, 40
) 的参数有关(nearVal
和 farVal
,如 here 所述)。也许尝试将它们设置为更广泛的范围,例如您的 glOrtho
调用:1, 150
(注意:当传递给 glFrustum
时,nearVal
或 farVal
都不能为负数)。
这完全取决于模型的比例以及它相对于相机的定位方式。如果模型的一部分落在裁剪平面之外,那么它将被裁剪。