QT与OpenGL之三维旋转(2)

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();
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6f8d80c1f83b8fd1708ab1d7f90411e4.html