程序运行截图如下:

源码如下:

myglwidget.h

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H#include <QWidget>
#include <QOpenGLWidget>
class QTimer;class MyGLWidget : public QOpenGLWidget
{Q_OBJECT
public:explicit MyGLWidget(QWidget *parent=0);void setRelyX(const double x);void setRelyY(const double y);protected:void initializeGL();void resizeGL(int w, int h);void paintGL();protected slots:void beginRotate();private:int m_angle;double m_relyX;double m_relyY;QTimer *m_timer;
};#endif // MYGLWIDGET_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void rotateXClicked();void rotateYClicked();void rotateXAndYClicked();void rotateAngleChanged();private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

myglwidget.cpp

#include "myglwidget.h"
#include <GL/glu.h>
#include <QTimer>MyGLWidget::MyGLWidget(QWidget *parent):QOpenGLWidget(parent)
{m_angle=0;m_relyX=0.0;m_relyY=1.0;    //默认向Y轴转m_timer=new QTimer;connect(m_timer,SIGNAL(timeout()),this,SLOT(beginRotate()));m_timer->start(0);
}void MyGLWidget::setRelyX(const double x)
{m_relyX=x;
}void MyGLWidget::setRelyY(const double y)
{m_relyY=y;
}void MyGLWidget::initializeGL()
{glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);glClearDepth(1.0);glEnable(GL_DEPTH_TEST);
}void MyGLWidget::resizeGL(int w, int h)
{glViewport(0,0,(GLint)w,(GLint)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0,(GLfloat)w/(GLfloat)h,0.1,100);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}void MyGLWidget::paintGL()
{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0,0.0,-6.0);glRotatef(m_angle,m_relyX,m_relyY,0.0);glBegin(GL_QUADS);// 上面glColor3f(1.0,0.0,0.0);glVertex3f(1.0,1.0,1.0);glVertex3f(1.0,1.0,-1.0);glVertex3f(-1.0,1.0,-1.0);glVertex3f(-1.0,1.0, 1.0);//下面glColor3f(0.0,1.0,0.0);glVertex3f(1.0,-1.0,1.0);glVertex3f(1.0,-1.0,-1.0);glVertex3f(-1.0,-1.0,-1.0);glVertex3f(-1.0,-1.0,1.0);//前面glColor3f(0.0,0.0,1.0);glVertex3f(1.0,1.0,1.0);glVertex3f(-1.0,1.0,1.0);glVertex3f(-1.0,-1.0,1.0);glVertex3f(1.0,-1.0,1.0);//左面glColor3f(0.2,0.2,0.5);glVertex3f(-1.0,-1.0,1.0);glVertex3f(-1.0,1.0,1.0);glVertex3f(-1.0,1.0,-1.0);glVertex3f(-1.0,-1.0,-1.0);//右面glColor3f(0.5,0.4,0.5);glVertex3f(1.0,1.0,1.0);glVertex3f(1.0,-1.0,1.0);glVertex3f(1.0,-1.0,-1.0);glVertex3f(1.0,1.0,-1.0);//后面glColor3f(0.8,0.1,0.7);glVertex3f(1.0,1.0,-1.0);glVertex3f(-1.0,1.0,-1.0);glVertex3f(-1.0,-1.0,-1.0);glVertex3f(1.0,-1.0,-1.0);glEnd();
}void MyGLWidget::beginRotate()
{if(m_angle==360){m_angle=0;update();}m_angle++;update();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->rotateXPushButton,SIGNAL(clicked(bool)),this,SLOT(rotateXClicked()));connect(ui->rotateYPushButton,SIGNAL(clicked(bool)),this,SLOT(rotateYClicked()));connect(ui->rotateXandYpushButton,SIGNAL(clicked(bool)),this,SLOT(rotateXAndYClicked()));
}Widget::~Widget()
{delete ui;
}void Widget::rotateXClicked()
{ui->openGLWidget->setRelyX(1);ui->openGLWidget->setRelyY(0);
}void Widget::rotateYClicked()
{ui->openGLWidget->setRelyX(0);ui->openGLWidget->setRelyY(1);
}void Widget::rotateXAndYClicked()
{ui->openGLWidget->setRelyX(1);ui->openGLWidget->setRelyY(1);
}

Qt|OpenGL学习笔记-绕X轴、Y轴、以及XY轴旋转的四边体相关推荐

  1. OpenGL学习笔记:使用深度缓冲(Depth Buffer)创建一个旋转的立方体

    如果不使用深度缓冲,创建的立方体的某些本应被遮挡住的面被绘制在了这个立方体其他面之上.OpenGL是一个三角形一个三角形地来绘制你的立方体的,所以即便之前那里有东西它也会覆盖之前的像素.因为这个原因, ...

  2. OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7866 ...

  3. OpenGL学习笔记:矩阵变换

    文章目录 缩放 glm矩阵表示 glm缩放矩阵实现 位移 齐次坐标 glm位移矩阵实现 旋转 沿x轴旋转 沿y轴旋转 沿z轴旋转 沿任意轴旋转 glm旋转矩阵实现 矩阵的组合 glm矩阵组合使用 接上 ...

  4. OpenGL学习笔记(一)绘制点线面及多面体

    OpenGL学习笔记(一)绘制点线面及多面体 绘制点线面 #include <iostream> #include <GL/GLUT.h> #define PI 3.14159 ...

  5. 【OpenGL学习笔记】地月系

    OpenGL学习笔记2-地月系 文章目录 OpenGL学习笔记2-地月系 前言 运行结果 纹理图片 一.TexturePool 1.**TexturePool.h** 2.**TexturePool. ...

  6. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  7. QT+opencv学习笔记(5)——霍夫直线检测、圆检测及椭圆检测

    开发环境为:win10+QT5.8+opencv3.2 Hough变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛.最基本的Hough变换是从黑白图像中检测直线,还可以经过改进检测圆.椭 ...

  8. 【OpenGL学习笔记⑥】——3D变换【旋转的正方体 实现地月系统 旋转+平移+缩放】

    ✈️ 文章目录 零. 成果预览图 一.3D立方体的顶点数组 二.纹理旋转 三.纹理缩放 四.画n个3D图形 五.轨道的数学公式 六.深度缓冲(Z 缓冲) 七.完整代码 八.参考附录: 神器的正方体 ☁ ...

  9. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

    ✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...

最新文章

  1. 梦到计算机坏了无法算账,梦见算账,做梦梦见算账是什么征兆?
  2. [转载] 故宫第三集 礼仪天下(下)
  3. git: git add --ignore-removal git add --all 区别
  4. 《JavaScript凌厉开发 Ext详解与实践》的目录
  5. chapter16 计算机体系结构基础
  6. 分享:我是怎么在github上找到优秀的仓库的?
  7. aqs clh java_【Java并发编程实战】—– AQS(四):CLH同步队列
  8. 临床医学与计算机考研哪个好考,临床医学考研院校难度概况
  9. rss的普及需要一个容易理解的中文名字,叫“新闻源”如何?
  10. Java Spring源代码学习之DispatcherServlet.getHandler
  11. 智能卡门禁管理系统_汉中停车场智能门禁系统简介,保安服务收费,行业知识
  12. python创建角色_如何使用 Python 创建一名可操控的角色玩家
  13. ECharts力导向布局图增加滚动条
  14. 测绘地理信息标准规范汇总下载
  15. 纤亿通带您了解生活小妙招--构建家庭网络指南
  16. css里给文字加下划线代码,css给文字加下划线
  17. L.G.ALEXANDER 访谈录(ZT)
  18. 实战派网站优化运营总监白杨 分享从业十年的seo优化干货!
  19. 【计算机视觉】边缘检测
  20. 用100元换10元、5元和1元的纸币共50张,能换各种纸币多少张。

热门文章

  1. 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化...
  2. ASP.NET 常见参考项目的 UI、BLL 、Model 、 DAL 分析
  3. 树还没有叶子的飞鸽传书
  4. 可到了关键部分的作文
  5. 最近在SDK下使用WebBrowser遇到了个问题
  6. 北上广深的程序员,房子在向你们招手了!
  7. STM32----ADC多通道采集
  8. 内蒙古农大孙志宏教授证实超深度混合宏基因组测序能够对人类肠道微生物组中的低丰度物种进行基因组和功能表征...
  9. 那些文献阅读能力爆表的科研学子,都在偷偷做这件事……
  10. 大名鼎鼎的电影胶片滤镜--DxO FilmPack 5 mac