忆龙2009:OPENGL 我的格子到哪里去了

      这是一个简单的OPENGL示例程序,目的是显示有层次感的(Z坐标不同)3*3的彩色格子。细心的朋友已经注意到了,下图中只出现了上面两排的格子,第三排格子在画面上没有出现。我的格子去哪里了?

 

 

以下是该程序的源代码:

 

 

      我们注意到,这个例子是一个正投影的例子。与透视投影不同,视景体两端的大小并没有什么不同,也就是说,物体和照相机之间的距离不会影响它看上去的大小。这种类型的投影通常用于建筑蓝图及计算机辅助设计之中。在这类应用程序中,当物体经过投影之后,保持他们的实际大小以及它们之间的角度关系是非常重要的。

 

      glOrtho()函数用来创建一个正交平行的视景体。该函数需要在参数中指定近侧裁剪平面的各个角度以及它与远侧裁剪平面的距离。函数原型如下:

GLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );

 

      其用法是:创建一个表示正交平行视景体的矩阵,并把它与当前矩阵相乘。(left,bottom,-near)和(right,top,-near)是近侧裁剪平面上的点,分别映射到视窗的左下角和右上角。(left,bottom,-far)和(right,top,-far)是远侧裁剪平面上的点,分别映射到视窗的左下角和右上角。near或far可以是正值或负值,也可以设为0,但是不应该设置成相同的值。

 

     这里有一种特殊情况,如果把二维图像摄影到二维屏幕上,可以使用gluOrtho2D这个函数。这个函数与三维版的glOrtho基本相同,只是场景中物体的所有z坐标都假定位于(-1.0,1.0)之间。(如果使用二维版本的顶点函数绘制二维物体,所有的z坐标都是0,因此不会出现有物体因为z值被裁剪的情况)

 

     说到这里,应该已经可以解释我们的格子去哪里了。我们第三排格子的z坐标=2,已经超出了视景体的可视范围。

 

     以下是修改后的代码,采用了三维版本的投影函数,修改位于60~61行,效果如下:

 

 

 

 

      按下键盘<b>键,格子绕y轴转动,这样可以更好地观察正投影的显示效果。有兴趣的朋友可以试试。

 

 

      最后再说明一点:使用投影函数时,近侧和远侧裁剪平面是根据它们在z轴的负方向上与观察点的距离进行测量的。因此,如果近侧平面的距离是1.0,远侧平面的距离是3.0,则在场景中可见的所有物体其z坐标应该处于(-1.0,-3.0)之间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值