16-习题
习题
8.1 在程序8.1中,尝试在不同设置下使用glPolygonOffset(),并观察对像的伪影效果,如Peter Panning。
8.2 (项目)修改程序8.1,以便通过移动鼠标移动灯光,类似于练习7.1。你可能会注意到某些照明位置会出现阴影伪影,而其他位置则没有。
8.3 (项目)给程序8.1添加动画,使得对象或光源(或两者一起)自行移动——例如一个绕另一个旋转。如果向场景添加地平面,阴影效果将更加明显,如图8.14所示。
8.4 (项目)修改程序8.2,将lookup()函数中的硬编码值0.001替换为更准确的1.0 / shadowbufferwidth和1.0 / shadowbufferheight。观察在窗口大小变化的情况下,这种变化产生了何种程度的影响(或没有影响)。
8.5 (研究)更复杂的百分比邻近滤波(PCF)的实现会加入光和阴影与光和遮挡物之间的相对距离。通过光线靠近或远离遮挡物时(或当遮挡物靠近或远离阴影时),调整半影的大小,可以使柔和阴影更逼真。研究此功能现有的实现方法,并将其添加到程序8.2中。