视景体裁剪课程---视景体形状

在这个章节中我们将在OpenGL应用程序中引进视景体的形状。它是使用函数gluPerspective来定义透视投影,然后使用gluLookAt函数来定义相机的位置。

首先,让我们回味一下这些函数的参数(都是float类型):

1. gluPerspective(fovy, ratio, nearDist, farDist)

2. gluLookAt(px, py, pz, lx, ly, lz, ux, uy, uz);

金字塔的顶点就是相机的位置(px, py, pz)。一个视线射线方式可以由下面计算 d = l - p,其中l = (lx, ly, lz),和原点p = (px, py, pz)。近平面和远平面都垂直于这条视线,并且相交于距离为nearDist和farDist的位置,近平面和远平面,就是函数中的距离,和fov(视线的垂直角度),和ratio(垂直和水平的比例)。

近平面的包围矩形的高度和宽度定义如下:

Hnear = 2 * tan (fov / 2) * nearDist;

Wnear = Hnear * ratio

同样的结论适用于远平面:

Hfar = 2 * tan (fov / 2) * farDist;

Wfar = Hfar * ratio.


为了定义视景体裁剪,我们需要两个步骤:

1. 算出视景体的信息-这个是在每一次视景体发生改变时做的,比如说,当相机移动或者透视改变时。

2. 测试物体跟视景体的相交结果来决定是否裁剪-这个是在每一帧中每个物体都需要计算的。如果每个裁剪状态在帧之间保持不变那么测试仅在相机移动时发生,比如说,视景体更新或者透视改变。

这个例子打开三个窗口:使用者相机窗口,一个由使用者相机和视景体可以在顶端可以看到的窗口,最后一个是从右边看的视景体。在视景体里面的球用绿色来表示,如果相交用黄色绘制,如果在外面用红色绘制。

英文地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值