NeHeチュートリアルQt実装-lesson 04
NeHeシリーズチュートリアルの4:多角形回転
英文教程住所:lesson 04
このレッスンでは、第3レッスンに加えて、回転ポリゴンのコードを追加しました.具体的には、次のようにします.
まず、ヘッドファイルに2つの回転係数を追加します.
構築方法で回転係数を初期化するには、次の手順に従います.
最後に、回転を実現する部分です.
次のように動作します.
英文教程住所:lesson 04
このレッスンでは、第3レッスンに加えて、回転ポリゴンのコードを追加しました.具体的には、次のようにします.
まず、ヘッドファイルに2つの回転係数を追加します.
#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 )
}
次のように動作します.