产品中心Product center
- 冲孔网
- 铝板冲孔网
- 钢板冲孔网
- 冲孔板
- 菱形冲孔网
- 装饰冲孔网
- 过滤冲孔网
- 通风冲孔网
- 隔音冲孔网
- 不锈钢冲孔网
- 低碳钢冲孔网
- 各种孔型冲孔网
- 爬架网
- 建筑爬架网
- 米型爬架网
- 铝板爬架网
- 镀锌爬架网
- 喷塑爬架网
- 租赁爬架网
- 金钢防护爬架网
- 防滑板
- 鳄鱼嘴防滑板
- 圆孔防滑板
- 起鼓防滑板
- 花纹防滑板
- 防风抑尘网
- 单峰防风抑尘网
- 双峰防风抑尘网
- 三峰防风抑尘网
- 煤场用防风抑尘网
- 电厂用防风抑尘网
- 围墙用防风抑尘网
联系我们Contact us
- 联系人:王经理
- 手 机:188-3289-5556
- 固 话:0318-7668809
- 传 真:
- 邮 箱:494965355@qq.com
- 地 址:河北省衡水市安平县西何庄村村北200米处
冲孔板网加工冲孔厂
文章作者:admin 上传更新:2021-04-27 01:21:21 浏览次数:-
冲孔板网加工冲孔厂关键词:三角形冲孔网
标题:OpenGL + Qt: 0 - 三角形绘制
来源:知乎
文章内容: 今天开一个大坑,我将写一系列关于 OpenGL + Qt 编程的入门教程,内容包括 OpenGL 的 Shading Language (现代 OpenGL,9102年都要结束了,不要再用glBegin/glEnd啦!)以及如何通过 Qt 做用户冲孔板网加工冲孔厂交互来配合OpenGL。虽然 OpenGL 和 Qt 的中文教程、文档、资源都是很丰富的,但是使用 Qt 写 OpenGL 程序却几乎没有,甚至连英文文档都相当少,这个系列算是我自己试错的一些经验总结,给有兴趣的小伙伴看看。
本系列不假设读者有任何 OpenGL 或者 Qt 或者图形学的基础知识,但是要求读者了解基本的 C++ 语法。所有相关的图形学、Qt、OpenGL 的内容都会单独介绍。
为什么用 Qt 写 OpenGL
OpenGL 本身虽然是一个图形库,但是它只负责产生绚丽的图形效果,并不管理用户界面本身,也不与操作系统打交道接受用户的输入,而是依靠其他图形界面库的帮助。
目前能找到的 OpenGL 教程大部分是使用一些为 OpenGL 打造的工具库(如 GLUT、glfw 这些),这些库虽然对于发挥 OpenGL 本身的特性都很方便,但是在如果要搭建完整的应用,却十分捉襟见肘。另一方面在 Windows 上安装这些工具库都异常复杂,需要用 CMake + Visual Studio 冲孔板网加工冲孔厂一顿操作,往往安装就把人吓退了,而 Linux 又会因为显卡驱动的问题,做这种和显卡高度相关的事情会很麻烦。
而 Qt 作为最成熟的跨平台 GUI 库之一,有大量的子模块完成各种交互、多媒体处理、网络等等完整应用所必须的功能,而且其开发的程序几乎可以无缝在不同的操作系统上运行,也有非常简单的安装程序和完善的文档。对于开发 OpenGL 程序来说更重要的是,从 Qt 5 开始,OpenGL 不再是单独的模块,而是融入了 Qt 核心包中,在 qmake 的加持下,几乎无需额外配置就能使用。如果使用 Qt 专用的 IDE QtCre冲孔板网加工冲孔厂ator,可以一键编译运行,极大提高开发体验。
话不多说,我们从最基本的绘图开始吧!本节所有代码公开于Github上,链接linmx0130/QGLDemo。
搭建脚手架
首先强烈推荐去 Qt 主页下载最新版的 Qt 工具包,由于只是学习目的,我们可以在安装的时候直接选择以开源协议安装。最后因为 Qt 使用了 LGPL 协议,所以如果只是动态链接也可以在商业程序中使用 Qt。
安装好完整的 Qt 开发环境后,我们直接打开 Qt Creator,选择创建一个Qt Widgets Application,这是最基本最传统的基于 C++ 的 Qt 程序。
然后会要求选择创建项目路径和名称、选择的工具链等等,这些都可以随意选择,但是在接下来 Details 项中,要十分小心,我们需要去掉“创建界面”的勾选,这样就不会生成界面文件,可以完全由代码操控界面。
然后一个基本的 Qt GUI 工程就搭建完成了,是时候开始绘图了!
QWidget 和 QOpenGLWidget
在开始编程之前,我们先需要搞清楚 QWidget 和 QOpenGLWidget 这两个类。在 Qt 中,一切用户界面中的对象,不论是窗口、输入框、按钮还是其他各种控件,都是 QWidget 的子类。有些 QWidget 可以承载其他 QWidget,并通过各种 Layout 管理子组件的排放,从而构成丰富且有序的界面。一般而言,如果我们需要设计一个窗口或者自己的小控件,就需要继承 QWidget 类并填充其他控件或者直接绘图。
QWidget 是一个 QObject,这是 Qt 自建的一种 C++ 语法扩展,不仅仅有基本的成员变量和成员函数,还有信号(signal)和槽(slot),在 Qt 中,一些事件发生后会产生信号,而连接到这个信号上的槽函数则会被调用用于处理这个信号。我们自己设计的控件也可以触发信号,从而让控件的使用者接收并处理这些信号。但是在这一节中我们不会遇到它们。
不过本节我们会继承 QOpenGLWidget 类。它是 QWidget 的子类,并且携带了调用 OpenGL 所必须的一些函数和对象,也给出了几个用于重载的方法便于绘图,因此我们直接使用它来完成基本的绘图操作。
继承QOpenGLWidget
在这一篇中我们只写一个 QOpenGLWidget 来绘图,然后放置到默认生成的主窗口 MainWindow 中展示,所以首先我们需要继承 QOpenGLWidget 来进行绘图。我们可以直接用 Qt Creator 添加一个新类,起名为 PaintingWidget 这样会自动生成好头文件和实现文件,生成的时候直接选择以 QOpenGLWidget 为基类。在头文件中我们进行如下声明:
#include #include #include #include #include #include class PaintingWidget : public QOpenGLWidget { Q_OBJECT public: PaintingWidget(QWidget *partent); ~PaintingWidget(); protected: void initializeGL(); void paintGL(); void resizeGL(int w, int h); private: QOpenGLBuffer *m_vbo; // 存储点数据 QOpenGLVertexArrayObject *m_vao; // VAO对象 QOpenGLShaderProgram *m_shader; // 渲染器程序对象 };
这里我们需要注意几点
我们重载了三个方法:initializeGL(),paintGL()和 resizeGL()。这三个方法都是来自QOpenGLWidget 的,在 initializeGL() 中我们需要进行初始化,这个方法在冲孔板网加工冲孔厂 Widget 刚加载时被调用。而在 paintGL() 中进行绘图,每一次绘图请求产生,都会进行一次绘图。最后 resizeGL() 是用于处理窗口大小变化的情况,这个我们会在以后讨论。
我们定义了三个成员变量:m_vbo , m_vao, m_shader。VBO 是指 Vertex Buffer Object,顾名思义就是存放顶点的缓冲区,所有顶点的数据会存入这个对象,交给OpenGL进行绘图。VAO 则是用于管理多个 VBO 的。最后用一个渲染器对象管理渲染器程序。这些对象都是 OpenGL 中设计的,而Qt进行了封装,并提供了一些更方便使用的方法。其详细的概念冲孔板网加工冲孔厂可以在其他介绍 OpenGL 编程的教程中找到。
构造函数需要接受一个 QWidget 对象为参数,作为图形显示中的父节点,这是所有 QWidget 中都需要的。我们只需要把它传递给父类的构造函数就可以了。
在生成的 paintingwidget.cpp 中我们首先定义最简单的构造函数和析构函数,把那些 OpenGL 的对象的指针初始化为空。
#include "paintingwidget.h" Painting冲孔板网加工冲孔厂
- 上一篇:冲孔板网价格
- 下一篇:冲孔板网加工冲孔厂家多少钱一平米介绍
热门标签:
圆孔防滑板
相关新闻
- [2017-01-18 16:05:08]要选就选性价比高的冲孔网
- [2017-01-18 16:05:31]冲孔网生产厂家现货供应
- [2017-01-18 16:05:52]哪里有卖冲孔网的?
- [2017-01-18 16:07:07]通风冲孔网专业厂家为客户着想
- [2017-01-18 16:07:39]通风冲孔网质量与价格成正比
- [2017-01-18 16:07:59]如何选择好的通风冲孔网生产厂家?