算法机制
如上图所示,实现的是地球(绿色)围绕太阳(红色)公转,月亮(黄色)围绕地球转,同时地球也在自转的动画。具体原理如下:
首先初始化一块画布,开启深度测试,虽然当下视角看不到遮盖效果,但是在改变观测视角的情况下,还是有必要开启深度测试,避免天体之间的前后关系混乱。
利用到了openGL里的glMatrixMode(GL_PROJECTION)函数将矩阵设置成投影模式,满足绘图所需执行的矩阵变换,glLoadIdentity()函数将当前矩阵设为单位矩阵,因为在变换前需要将矩阵设置为单位矩阵,也用到了gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)透视投影的函数来设置 眼睛上下睁开的幅度 、实际窗口的横纵比、 近截面和远截面。以及glMatrixMode(GL_MODELVIEW)将矩阵设置成视图模式,满足绘图所需执行的矩阵变换。gluLookAt()来设置观测点坐标,观测物体坐标,以及观测方向。
在绘图函数draw()里,我定义一个全局变量day,来控制地球绕太阳旋转的角度,以及月亮绕地球旋转的角度,以及控制地球自转。太阳,地球和月亮是利用OpenGL里自带的画球函数glutWireSphere来绘制的。通过glRotatef()