OpenGL有两种投影:正射投影(垂直投影)和透视投影。透视投影通过指定一个平截头体来定义视见体的范围,平截头体如下图所示:

void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
fovy是眼睛上下睁开的幅度,角度值,值越小,视野范围越狭小(眯眼),值越大,视野范围越宽阔(睁开铜铃般的大眼);
zNear表示近裁剪面到眼睛的距离,zFar表示远裁剪面到眼睛的距离,注意zNear和zFar不能设置设置为负值(你怎么看到眼睛后面的东西)。
aspect表示裁剪面的宽w高h比,这个影响到视野的截面有多大。
下图中又三个模型,这时我们想要看到全部三个模型,绘制方法见代码:
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度缓存
glLoadIdentity(); // 重置当前的模型观察矩阵
//glutSolidSphere(1.0, 400, 16); //繪製一個球體
/*当您调用glLoadIdentity()之后,您实际上将当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。
glTranslatef(x, y, z)沿着 X, Y 和 Z 轴移动。根据前面的次序,下面的代码沿着X轴左移1.5个单位,Y轴不动(0.0f),最后移入屏幕6.0f个单位。注意在glTranslatef(x, y, z)中当您移动的时候,您并不是相对屏幕中心移动,而是相对与当

该博客详细解释了OpenGL中的正射投影和透视投影,重点讨论了透视投影的gluPerspective函数,包括fovy、aspect、zNear和zFar参数的作用。通过示例代码展示了不同fovy值如何改变视野效果,并提供了多个模型的绘制,以说明投影原理。同时,提到了zNear和zFar的设置对观察范围的影响。
最低0.47元/天 解锁文章
3099

被折叠的 条评论
为什么被折叠?



