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 BufferglLoadIdentity();       // Reset The Current Modelview MatrixglTranslatef(-1.5f,0.0f,-6.0f);     // Move Left 1.5 Units And Into The Screen 6.0glPushMatrix();glRotatef(rtri, 0, 1.0f, 0);glBegin(GL_TRIANGLES);                      // Drawing Using TrianglesglColor3f(1.0f,0.0f,0.0f);           // Set The Color To RedglVertex3f( 0.0f, 1.0f, 0.0f);              // TopglColor3f(0.0f,1.0f,0.0f);          // Set The Color To GreenglVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom LeftglColor3f(0.0f,0.0f,1.0f);          // Set The Color To BlueglVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom RightglEnd();                            // Finished Drawing The TriangleglPopMatrix();glTranslatef(3.0f,0.0f,0.0f);                   // Move Right 3 UnitsglColor3f(0.5f,0.5f,1.0f);              // Set The Color To Blue One Time OnlyglRotatef(rquad, 1.0f, 0, 0);glBegin(GL_QUADS);                      // Draw A QuadglVertex3f(-1.0f, 1.0f, 0.0f);              // Top LeftglVertex3f( 1.0f, 1.0f, 0.0f);              // Top RightglVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom RightglVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom LeftglEnd();                         // Done Drawing The Quadrtri += 0.2f;                    // Increase The Rotation Variable For The Triangle ( NEW )rquad -= 0.15f;                  // Decrease The Rotation Variable For The Quad     ( NEW )
}

运行效果如下所示:

转载于:https://my.oschina.net/fuyajun1983cn/blog/263777

NeHe教程Qt实现——lesson04相关推荐

  1. NeHe教程Qt实现——lesson01

    NeHe 系列教程之一: 创建一个OpenGL 窗口 英文教程地址: lesson01 在Qt的实现中, 我们主要依赖QGLWidget类, 我们主要重载三个重要方法 :     void initi ...

  2. NeHe教程Qt实现——lesson10

    NeHe 系列教程之十:在3D空间中漫游 英文教程地址:lesson10 本课演示了从外部文件中加载数据构建3D模型的实例,代码基于第一课. 首先是3D模型的数据结构定义: namespace {bo ...

  3. NeHe教程Qt实现——lesson07

    NeHe 系列教程之七: 光照及纹理过滤 英文教程地址:lesson07 本课将以第一课的代码为基础, 实现光照效果. 首先是对象定义与纹理加载的代码: namespace { bool light; ...

  4. NeHe教程Qt实现——lesson08

    NeHe 系列教程之八: 混合 英文教程地址:lesson08 本课将在第七课的基础上添加颜色混合的代码: namespace { ... bool blend; // Blending OFF/ON ...

  5. NeHe教程Qt实现——lesson09

    NeHe 系列教程之九: 在3D空间中移动位图 英文教程地址:lesson09 本课基于第一课的代码, 利用颜色混合的方法,将一个黑白纹理与随机颜色进行混合,产生绚丽的效果. 首先是定义相关变量和数据 ...

  6. NeHe教程Qt实现——lesson16

    NeHe 系列教程之十四:雾 英文教程地址:lesson16 本课展示产生雾. 相关变量和函数定义: namespace { bool gp; GLuint fogMode[] = { GL_EXP, ...

  7. NeHe教程Qt实现——lesson06

    NeHe 系列教程之六: 纹理映射 英文教程地址:lesson06 本课以第一课的代码为基础,演示了加载纹理的过程. 首先给出的是绘制几何对象和加载纹理坐标的代码 namespace {GLfloat ...

  8. NeHe教程Qt实现——lesson15

    NeHe 系列教程之十四:纹理 轮廓字体 英文教程地址:lesson15 本课展示如何创建和显示纹理轮廓字体, 代码基于第一课. 首先是字体库的创建: namespace {#define USE_D ...

  9. NeHe教程Qt实现——lesson13

    NeHe 系列教程之十三: 位图字体 英文教程地址:lesson13 本课将展示位图字体的创建和显示, 代码基于第一课. 首先是字休库的创建,如下所示: namespace {#define USE_ ...

最新文章

  1. org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in r...
  2. 【跃迁之路】【724天】程序员高效学习方法论探索系列(实验阶段481-2019.2.14)...
  3. 配置开发ExtJS环境
  4. C#以post方式调用struts rest-plugin service的问题
  5. Maven-学习笔记05【基础-使用骨架创建Maven的Java工程】
  6. 二元偏导数存在的条件_多元函数 可导、可微、连续、一阶偏导数连续 之间关系的总结...
  7. MySQL吉连_Learn Jdbc : Java, Jdbc, Odbc
  8. 95-240-065-源码-state-托管算子状态
  9. epoll哪些触发模式_epoll的内部实现 百万级别句柄监听 lt和et模式非常好的解释...
  10. squid的sarg安装跟配置,版本2.3.5
  11. linux service和daemon
  12. 如何打开kernel最开始的打印
  13. 【python10个小实验】2、石头、剪刀、布
  14. Prometheus和它的xdm
  15. 一次性上传300张图片引发的思考
  16. 2020年下半年系统集成项目管理工程师上午试题解析(一)
  17. 【Python】项目实战一:外星人入侵 - 《Python编程:从入门到实践》
  18. android实训报告日记,android目实训报告.doc
  19. 【毕业设计】基于Stm32的家庭气象仪 天气监控系统 - 物联网 单片机 嵌入式
  20. 入校以来现实表现三段式

热门文章

  1. 数组的选择--固定大小数组模板array存在的意义!
  2. 两行 CSS 代码实现图片任意颜色赋色技术
  3. 初步理解Java的三大特性——封装、继承和多态
  4. Tomcat6.0的JNDI使用方法(连接池)
  5. Android技术经理+资深工程师+研发工程师-杭州
  6. JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
  7. 2007年下半年软考:网络工程师考试试题分析
  8. 12个不可不知的Sublime Text应用技巧和诀窍
  9. vector机器人 WHAT DO I USE THE VECTOR APP FOR? 我使用 VECTOR 应用程序做什么?
  10. linux ssh 设置的相关总结(ssh最大连接数、ssh连接时长、安全性配置等)