【发布时间】:2017-10-30 15:27:18
【问题描述】:
我正在为我的计算机图形类做这个 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(-100, 100, -100, 100, 20, 200) 它看起来像这样,就像我越来越近了,但是 left、right、top 和 bottom 参数呢?他们同意这些价值观吗?
【问题讨论】:
-
尝试接近远近比例,你会得到更接近正交投影的结果。例如尝试 glFrustum(-100, 100 ,-100 ,100 , 20, 150)。 40 比 1 是极端的。
-
@Victor:
far/near的比例绝不会使透视投影更接近正交投影,40:1 的比例也绝不是“极端”的。