NeHe教程Qt实现——lesson04

NeHe 系列教程之四: 多边形旋转

英文教程地址:lesson04


本课在第三课的基础上增加了旋转多边形的代码,具体如下:

首先,在头文件中增加了两个旋转因子:

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include <QGLWidget>

class QTimer;
class QKeyEvent;

class MyGLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit MyGLWidget(QWidget *parent = 0);

protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();

    void keyPressEvent(QKeyEvent *);
    void closeEvent(QCloseEvent *);

private:
    QTimer *timer;

    bool fullscreen;

    GLfloat     rtri;                       // Angle For The Triangle ( NEW )
    GLfloat     rquad;                      // Angle For The Quad     ( NEW )
};

#endif // MYGLWIDGET_H

在构造方法初始化旋转因子:

MyGLWidget::MyGLWidget(QWidget *parent) :
    QGLWidget(parent), fullscreen(false),rtri(0), rquad(0)
{
    setWindowTitle(tr("nehe----lesson04"));
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));
    timer->start(10);
}

最后是实现旋转的部分:

void MyGLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // Clear The Screen And The Depth Buffer
    glLoadIdentity();       // Reset The Current Modelview Matrix

    glTranslatef(-1.5f,0.0f,-6.0f);     // Move Left 1.5 Units And Into The Screen 6.0
    glPushMatrix();
    glRotatef(rtri, 0, 1.0f, 0);
    glBegin(GL_TRIANGLES);                      // Drawing Using Triangles
        glColor3f(1.0f,0.0f,0.0f);	       // Set The Color To Red
        glVertex3f( 0.0f, 1.0f, 0.0f);              // Top
        glColor3f(0.0f,1.0f,0.0f);          // Set The Color To Green
        glVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom Left
        glColor3f(0.0f,0.0f,1.0f);          // Set The Color To Blue
        glVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom Right
    glEnd();                            // Finished Drawing The Triangle
    glPopMatrix();
    glTranslatef(3.0f,0.0f,0.0f);                   // Move Right 3 Units
    glColor3f(0.5f,0.5f,1.0f);              // Set The Color To Blue One Time Only
    glRotatef(rquad, 1.0f, 0, 0);
    glBegin(GL_QUADS);                      // Draw A Quad
           glVertex3f(-1.0f, 1.0f, 0.0f);              // Top Left
           glVertex3f( 1.0f, 1.0f, 0.0f);              // Top Right
           glVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom Right
           glVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom Left
    glEnd();                         // Done Drawing The Quad

    rtri += 0.2f;                    // Increase The Rotation Variable For The Triangle ( NEW )
    rquad -= 0.15f;                  // Decrease The Rotation Variable For The Quad     ( NEW )
}

运行效果如下所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值