//=====================================================================
//TITLE:
// 《OpenGL编程指南》示例笔记(2)--独立地移动光源
//AUTHOR:
// norains
//DATE:
// Monday 21-June-2010
//Environment:
// Windows XP
//=====================================================================
示例概述
例名:独立地移动光源
序号:5-6
页码:P135
源代码:
程序运行后的图像确实有点丑:
不知道为啥,源代码特别不喜欢很圆的圆,莫非是作者的机器配置不够?在做实验之前,还是老样子,将圆变得圆滑点。我们将glutSolidTorus的最后一个形参的数值更改为60,即:glutSolidTorus(0.275, 0.85, 8, 60);
这时候程序跑起来的圆环就圆滑多了:
点击两下鼠标,移动一下光源,看看效果:
呵呵,有点像手镯。
不过,原程序的渐进梯度太广了,只是点击几次就绕了一圈。其实可以更改代码中的spin = (spin + 30) % 360这句。我们将30改成5,那么渐进的梯度就小了。
如图所示:
光源移动到了之前原代码没有能到达的区域。
不过,用鼠标移动光源实在没啥意思,不如让程序自动来移动光源吧!
我们先定义一个Idle函数:
然后在glutMainLoop之前添加这么一段代码:
那么,我们现在的光源就可以自动移动啦。只不过,我所用的电脑的显卡可能性能不是很好,以代码所执行的速度,有破碎的现象:
其实我们也可以用5.1示例中的圆球,也能测试到不一样的光源效果。我们将代码中的glutSolidTorus(0.275, 0.85, 8, 60)以glutSolidSphere(1.0, 300, 16)替换,则显示效果如下: