立体五角星从总体上讲,需要绘制前面,侧边 10 个面,以及后面,但由于二维五角星是个凹多边形,
OpenGL 只提供直接绘制凸多边形的函数,因此对于前面和后面的两个二维五角星需要进行三角剖分,在
这里,我们把它们分成 5 个三角形以及一个正五边形。侧面 10 个面均是一个三维共面矩形。在顶点计算时
候,以正五角星的外接圆和内切圆两个半径为参数,计算得到的二维五角星在 x>0 半平面的 2 个顶点以及
2 个内陷点,共四个点的坐标分别为:
(r
0
cos 54
°
, r
0
sin 54
°
)
(r cos 18
°
, r sin 18
°
)
(r
0
cos 18
°
, −r
0
sin 18
°
)
(r cos 54
°
, −r sin 54
°
)
剩下的 6 个点有两个位于 y 轴上,另外 4 个可以通过对称性得到坐标。
这样我们就把一个立体的五角星分成了 22 个面,对着 22 个面指定光照和材质,就可以看到立体效果。
五角星的转动效果是通过程序在空闲时间对旋转角度进行增加并重绘得到的。旋转出现的判断依据要通过
小球点击中累积消失小球的个数决定。