spin += 0.01f;
star[loop].angle += float(loop)/num;//角度是在慢慢增大的
star[loop].dist -= 0.01f;//距离慢慢减小,被吸向了屏幕中心
if(star[loop].dist < 0)
{
star[loop].dist += 5.0f;
star[loop].r = rand()%256;
star[loop].g = rand()%256;
star[loop].b = rand()%256;
}
}
}
//该程序是设置opengl场景透视图,程序中至少被执行一次(程序启动时).
void GLWidget::resizeGL(int width, int height)
{
if(0 == height)
height = 1;//防止一条边为0
glViewport(0, 0, (GLint)width, (GLint)height);//重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了
glMatrixMode(GL_PROJECTION);//选择投影矩阵
glLoadIdentity();//重置选择好的投影矩阵
gluPerspective(45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0);//建立透视投影矩阵
glColor4f(1.0f, 1.0f, 1.0f, 0.5f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glMatrixMode(GL_MODELVIEW);//以下2句和上面出现的解释一样
glLoadIdentity();
}
void GLWidget::keyPressEvent(QKeyEvent *e)
{
switch(e->key())
{
/*PageUp键为将木箱移到屏幕内部方向*/
case Qt::Key_T:
twinkle = !twinkle;
updateGL();
break;
/*B键位选择是否采用色彩融合*/
case Qt::Key_B:
blend = !blend;
if(blend)
{
glEnable(GL_BLEND);//色彩融合和深度缓存不能同时开启
glDisable(GL_DEPTH_TEST);
}
else
{
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
}
updateGL();
break;
/*PageUp键为将木箱移到屏幕内部方向*/
case Qt::Key_PageUp:
zoom -= 0.2;
updateGL();
break;
/*PageDown键为将木箱移到屏幕外部方向*/
case Qt::Key_PageDown:
zoom += 0.2;
updateGL();
break;
/*Up键为加快立方体旋转的速度*/
case Qt::Key_Up:
title += 0.5;
updateGL();
break;
/*Down键为减慢立方体旋转的速度*/
case Qt::Key_Down:
title -= 0.5;
updateGL();
break;
/*F1键为全屏和普通屏显示切换键*/
case Qt::Key_F1:
fullscreen = !fullscreen;
if(fullscreen)
showFullScreen();
else
{
setGeometry(300, 150, 500, 500);
showNormal();
}
updateGL();
break;
/*Ese为退出程序键*/
case Qt::Key_Escape:
close();
}
}