欢迎光临河北厚宏金属制品有限公司 关于我们| 联系我们
咨询热线 :
188-3289-5556

产品中心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冲孔板网加工冲孔厂

热门标签: 圆孔防滑板

网站首页 |关于我们 |产品中心 |公司动态 |常见问题 |案例展示 |客户见证 |车间展示 |荣誉资质 |联系我们