4.OpenGL学习之几何变换

几何变换

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

其中:
这里写图片描述

几何变换函数

  在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 <QGLWidget>

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学习系列导航

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值