您好,欢迎来到河北厚宏金属丝网制品有限公司!

免费咨询热线:18632860991 同微信

热门关键词:声屏障

联系我们

河北厚宏金属丝网制品有限公司

联系人:张经理

电话:0318-8880555

手机:18632860991 同微信

地址:衡水市安平县工业区

冲孔板网加工冲孔厂

文章来源:发表时间:2020-07-24 14:32:42
分享到:

冲孔板网加工冲孔厂关键词:三角形冲孔网 标题: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冲孔板网加工冲孔厂

热门标签:
下一篇:冲孔板网厂 上一篇:冲孔板网加工冲孔

相关新闻