目的
通过键盘控制魔方每层转动,实现真正魔方效果
实施
- 旋转
主要是先找到需要旋转的9个小立方块,18个保持原状态的小立方块,旋转的时候通过旋转坐标轴来达到效果,timeline 控制动画
/*保存timeline变化数值 */
void GLWidget::rotateCube(int angle)
{
timelineRotateangle = angle;
updateGL();
}
旋转坐标轴
//绘制旋转要动的方块
glRotatef( timelineRotateangle, xRoll, yRoll, zRoll );
for(int i=0;i<9;i++)
{
drawOneCube(rotatecube[i],rotatecube[i]->x,rotatecube[i]->y,rotatecube[i]->z);
}
glRotatef( -timelineRotateangle, xRoll, yRoll, zRoll );
//绘制不用旋转的方块
for(int i=0;i<18;i++)
{
drawOneCube(othercube[i],othercube[i]->x,othercube[i]->y,othercube[i]->z);
}
- 计算颜色变化
正确更新旋转后的颜色是重点之一
比如,最外层白色 绕z轴旋转90度,9个小立方块颜色变化?
绕z轴旋转,立方块前后面的颜色不变,上右下左面颜色依次更改。实际中,拿一个真实的魔方比较,可以更直观的感受。
3.旋转角度
旋转的角度有90,180,270,360四种情况,每种情况都可以用90度来表示,比如旋转270度,即3个90度,所以实现旋转90即可。