绘制太阳系
目录
一、实验任务
二、原理和分析
材质设置
三、图形绘制
四、结果与分析
一、实验任务
绘制出一个太阳系: 要求:
1. 有详细的计算步骤
2. 至少包含太阳、地球和月亮
3. 用 OpenGL 进行绘制Bonus:
1. 用代码实现出可执行的实例
2. 绘制出行星的轨道
二、原理和分析
1. OpenGL 材质和光照
OpenGL 在处理光照时把光照系统分为三部分,分别是光源、材质和光照模型。
光源、材质和光照模式都有各自的属性,尽管属性种类繁多,但这些属性都只用很少的几个函数来设置:
使用 glLight*函数可设置光源的属性,
使用 glMaterial*函数可设置材质的属性, 使用 glLightModel*函数可设置光照模式。
GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR 这三种属性是光源和材质所共有的,如果某光源发出的光线照射到某材质的表面,则最终的漫反射强度由两个 GL_DIFFUSE 属性共同决定,最终的镜面反射强度由两个 GL_SPECULAR 属性共同决定。
在 OpenGL 中,仅仅支持有限数量的光源。使用 GL_LIGHT0 表示第 0 号光源,
GL_LIGHT1 表示第 1 号光源,依次类推,OpenGL 至少会支持 8 个光源,即 GL_LIGHT0 到 GL_LIGHT7。使用 glEnable 函数可以开启它们。例如,glEnable(GL_LIGHT0);可以开启第 0 号光源。使用 glDisable 函数则可以关闭光源。一些 OpenGL 实现可能支持更多数量的光源,但总的来说,开启过多的光源将会导致程序运行速度的严重下降。
OpenGL 场景中模型颜色的产生,大致为如下的流程图所描述:
光源设置
设置环境光:glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight); 设置漫射光成分:glLightfv(GL_LIGHT0,GL_DIFFUSE,DiffuseLight)
设置镜面光成分:glLightfv(GL_LIGHT0,GL_SPECULAR,SpecularLight);