当前位置:首页>资讯 >焦点>冲孔板网加工冲孔厂-护栏大全网

冲孔板网加工冲孔厂-护栏大全网

2022-09-08 来源:护栏网大全责任编辑:护栏网大全 浏览数:29 护栏大全

冲孔板网加工冲孔厂关键词:三角形冲孔网 标题: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#includeclass 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冲孔板网加工冲孔厂
打赏
分享到:
0相关评论
阅读上文 >> 围栏网价格-护栏大全网
阅读下文 >> 围栏网价格_1-护栏大全网

版权与免责声明:

凡注明稿件来源的内容均为转载稿或由企业用户注册发布,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;


本文地址:http://www.hulandaquan.cn/news/show-13403.html

转载本站原创文章请注明来源:护栏大全

行业专题

更多行业专题

微信“扫一扫”
即可分享此文章

(c)2020-2022 护栏大全(石家庄学语教育科技有限公司旗下) https://www.hulandaquan.cn All Rights Reserved
公路护栏网隔离网围栏网锌钢护栏护栏网厂家大全护栏网大全

服务热线:18519193281 ICP备案号:冀ICP备2020020235号