现在的位置: 首页 > 综合 > 正文

OpenGL-视点的建立

2013年03月27日 ⁄ 综合 ⁄ 共 838字 ⁄ 字号 评论关闭

在开始使用OpenGL时,屏幕上总是黑屏,这多是因为视点位置不正确的问题造成的。这篇文章中我们主要谈谈视点位置的设置。

视点设置的语句是:
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt(0,0,10,0,0,-20.0,0,1.0,0);

gluLookAt在世界坐标中建立了位于(0,0,10)的视点,并且朝向(0,0,-20.0)。经过这么几句,就建立了视点和模型的位置,视点位于(0,0,10),而模型的位置仍处在默认的(0,0,0)。视点和模型之间的距离是20。

如果要移动模型,可以用语句glTranslatef。如:
glTranslatef(0,0,-5);
这一句把物体移动到了(0,0,-5)的位置,如果当前视点是(0,0,10),则视点和模型之间的距离是15。

有些书上会说glTranslatef语句等价于移动了视点。在这里我建议大家别这么认为,还是将gluLookAt认为是移动视点,glTranslatef是移动模型。而不要因为仅执行glTranslatef移动了模型,而等价的认为是视点移动而模型不动。把二者分开考虑在分析时是较为清晰的。

虽然我们将视点和模型置在了合适的位置,可为何我们还是开不见物体呢?这应该和投影有关。

我在程序中经常使用gluPerspective作投影,它有着很重要的两个参数之间影响模型的可见性,一个是zNear,另一个是zFar。zNear是视景体近端与视点的距离,zFar是视景体远端与视点的距离。模型必须有部分在视景体中才能看见。所以我们总结出当满足zNear <= distance <= zFar,distance是模型与视点的距离。即模型与视点的距离在zNear和zFar之间,也即模型在视景体中,模型才可见。

综上,总结出模型可见的前提条件是:
1、视点方向朝向模型
2、视点与模型之间的距离zNear <= distance <= zFar,其中distance是模型与视点的距离。

抱歉!评论已关闭.