QT5 OPenGL(三, 图形旋转)

概要

图形旋转在很多游戏里面,或一些需要特效的场合用得比较多,一个动态的图形图片是比静态的有更好的动态效果的。


实例效果图

这里写图片描述


主要实现代码

void OpenglWidget::initializeGL()
{
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClearDepth(1.0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

void OpenglWidget::initWidget()
{
    setGeometry( 400, 200, 640, 480 );
    setWindowTitle(tr("opengl demo"));
}

void OpenglWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    glTranslatef( -1.5,  0.0, -6.0 );
    glRotatef( m_rotateRectangle,  0.0,  1.0,  0.0 );

    glBegin( GL_QUADS );
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(  -1.0,  1.0,  0.0 );
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(  1.0,  1.0,  0.0 );
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(  1.0, -1.0,  0.0 );
    glColor3f(1.0, 1.0, 1.0);
    glVertex3f( -1.0, -1.0,  0.0 );
    glEnd();

    glLoadIdentity();

    glTranslatef(  1.5,  0.0, -6.0 );
    glRotatef( m_rotateTriangle,  1.0,  0.0,  0.0 );

    glColor3f((GLfloat)0.3, (GLfloat)0.2, (GLfloat)0.5);
    glBegin( GL_TRIANGLES );
    qDebug() << "this is a paintGL test!";
    glVertex3f(  0.0,  1.0,  0.0 );
    glVertex3f( -1.0, -1.0,  0.0 );
    glVertex3f(  1.0, -1.0,  0.0 );
    glEnd();

    m_rotateRectangle += 20;
    m_rotateTriangle += 20;
}

关键点解析

在图片的旋转的过程中,主要调用的是这个函数

void APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);

这个函数有四个参数, 我们怎么来理解这些参数呢? 下面是我总结的一些内容。

第一个是旋转的角度。我们如果要让上面的图片快速动起来,就必须不停地拖动窗口, 这样才能不停地画图。 而旋转的角度,也就必须不停地添加,或者说变动,才会动起来。

就如同在画一张图片,而这个图片的角度, 就是我们设置的angle角度, 如果这个角度不变动,图片也将不会变动, 所以会是一张固定的图片显示,只有当角度在变动的时候, 由于我们拖动窗口,导致不停地重画不同角度的这个图片, 才产生动态的效果。

后面,三个参数, x, y, z代表着这个三维空间的坐标。这个图片的旋转,可以理解为, 我们以坐标原点为起点,再以(x, y, z)为终点, 这两点连成一条线, 而图片以它的中心为原点就绕着这条线来旋转。 所以, 当(x, y, z)三个参数中,有两个为空时,就如同绕着一个坐标轴在旋转。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小K小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值