4.OpenGL学习之几何变换

几何变换

  应用于对象几何描述并改变它的位置、方向或大小的操作成为几何变换(geometric transformation)。一个三维位置在齐次坐标中表示为四元列向量。因此,每一次几何变换操作表示成一个从左边去乘坐标向量的4*4矩阵。
在三维齐次坐标表示中,任意点P=(x,y,z)经过几何变换到位置P‘
4.OpenGL学习之几何变换_第1张图片

其中:
4.OpenGL学习之几何变换_第2张图片

几何变换函数

  在OpenGL的核心库中,每一种基本的几何变换都有一个独立的函数。由于OpenGL是作为三维图形应用编程接口来设计的,所有的变换都在三维空间中定义。在内部,所有坐标均使用4元素列向量表示,而所有变换均使用4*4矩阵来表示。基本的OpenGL几何变换函数

  • glTranslate*(tx, ty, tz); //平移参数tx、ty和tz可以为任意的实数值。
  • glRoate*(theta, vx, vy, vz) //参数theta表示旋转角度数,向量v = (vx, vy, vz)用于定义通过坐标原点的旋转轴的方向。
  • glScale*(sx, sy, sz); //缩放参数可以为任意实数值。
    备注:*或者是f(浮点)或者d(双倍长浮点)

旋转三角形

首先在myQGLWidget.h头文件中,添加一个控制三角形旋转角度的私有变量。

#ifndef MY_QGLWIDGET_H
#define MY_QGLWIDGET_H

#include 

class MyQGLWidget : public QGLWidget
{
    Q_OBJECT

public:
    MyQGLWidget(QWidget *parent = 0);

protected:
    void initializeGL();
    void resizeGL(int width, int height);
    void paintGL();

private:
    void drawTriangles();
    GLfloat rotateAngle_;
};

#endif

在drawTriangles函数中使用glRotatef函数,让三角形对象绕着某个某个轴旋转

void MyQGLWidget::drawTriangles()
{
    glRotatef(rotateAngle_, 0.0f, 0.0f, 1.0f);
    glBegin(GL_TRIANGLES);
        glColor3f(1.0f, 0.0f, 0.0f);                    //设置当前色为红色
        glVertex3f(0.0f, 1.0f, -6.0f);
        glColor3f(0.0f, 1.0f, 0.0f);                    //设置当前色为绿色
        glVertex3f(-1.0f,-1.0f, -6.0f);
        glColor3f(0.0f, 0.0f, 1.0f);                    //设置当前色为蓝色
        glVertex3f(1.0f,-1.0f, -6.0f);
    glEnd();
    rotateAngle_ += 0.5f;
}

为了使三角形旋转起来,我们使用定时器,每隔10ms调用updateGL()函数。

MyQGLWidget::MyQGLWidget(QWidget *parent)
    : QGLWidget(parent),rotateAngle_(0.0f)
{
    setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer));
    QTimer *timer = new QTimer(this);                //创建一个定时器
    connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));  //将定时器的计时信号与updateGL()绑定
    timer->start(10);                                //以10ms为一个计时周期

}

运行结果:

代码下载
OpenGL学习系列导航

你可能感兴趣的:(Study-OpenGL)