图形图像
文章平均质量分 92
图形图像知识库
会飞的代码UP
自强不息,厚德载物。
展开
-
【OpenGL ES】同步对象和栅栏
OpenGL ES 3.0为客户-服务器模型,客户即应用程序,发送命令,服务器即OpenGL ES实现,处理命令,因为针对的是手持和嵌入平台,所以客户和服务器通常在同一个设备上。在客户-服务器模型中,一个常见的问题是,客户如何发送命令,每次发送一个命令还是缓存后批量发送,服务器如何处理命令,同步等待所有命令完成还是异步处理立即返回,下面介绍这个问题的几种解决方案。void glFlush(void)原创 2017-12-21 17:05:25 · 4999 阅读 · 0 评论 -
【OpenGL ES】帧缓冲区对象FBO
1、FBO使用OpenGL ES,一般要通过EGL来配置本地窗口系统,关于EGL的介绍可参照“【OpenGL ES】EGL简介”http://blog.csdn.net/ieearth/article/details/71180457。默认情况下,OpenGL ES使用窗口系统提供的帧缓冲区作为绘图表面,但是许多应用程序需要渲染到纹理,可行的方案是使用glCopyTexImage2D和glCopyT原创 2017-12-21 15:41:12 · 2791 阅读 · 0 评论 -
【OpenGL ES】片段操作
在OpenGL ES 3.0的可编程管线中,片段操作在片断着色器之后,下一步是帧缓冲区。片段着色器执行之后,片断着色器的输出是片段的颜色和深度值,片段在前往帧缓冲区途中经历的测试和操作包括裁剪区域测试、模板缓冲区测试、深度缓冲区测试、混合、抖动,下面逐个介绍。1、缓冲区缓冲区包括颜色缓冲区、深度缓冲区和模板缓冲区,它们都保存帧缓冲区中每个像素的不同数据,其中颜色缓冲区由前台和后台颜色缓冲区组成。缓冲原创 2017-12-20 16:26:31 · 1113 阅读 · 0 评论 -
【OpenGL ES】片段着色器
1、管线片段着色器在OpenGL ES 3.0的可编程管线的位置如下图所示。 2、输入输出片段着色器为片段操作提供了通用功能的可编程方法,输入和输出如下图所示。 输入或者可变值,in,是顶点着色器生成的插值数据,顶点着色器输出跨图元进行插值,并作为输入传递给片段着色器。 统一变量,uniform,是片段着色器使用的状态,为常量值,在每个片段上不会变化。 采样器,sampler2D,用于访问着原创 2017-12-19 21:12:42 · 2333 阅读 · 0 评论 -
【OpenGL ES】纹理
1、2D纹理2D纹理是OpenGL ES中最基本和最常用的纹理形式,它是一个图像数据的二维数组,纹理坐标(s, t)或(u, v)用作纹理图像中的索引,代表用于查找一个纹理贴图的规范化坐标。纹理图像的左下角由st坐标(0.0, 0.0)指定,右上角由坐标(1.0, 1.0)指定,在[0.0, 1.0]区间之外的坐标是允许的,在该区间外的纹理读取行为由纹理包装模式定义。一个纹理的单独数据元素称作纹素T原创 2017-12-19 17:27:17 · 2553 阅读 · 0 评论 -
【OpenGL ES】顶点着色器
1、输入输出顶点着色器可用于传统的基于顶点操作,例如通过矩阵变换位置、计算照明方程式以生成逐顶点的颜色以及生成或者变换纹理坐标。顶点着色器的输入、输出如下图所示。输入变量或属性:用顶点数组提供的逐顶点数据。 统一变量和统一变量缓冲区:顶点着色器使用的不变数据。 采样器:代表顶点着色器使用的纹理的特殊统一变量类型。 着色器程序:顶点着色器程序源代码或者描述在操作顶点的可执行文件。 输出或可变变原创 2017-10-24 20:36:54 · 3046 阅读 · 0 评论 -
【QT】float double的范围与精度及Qt中的qfloat16
1、格式float和double都是浮点数据类型,前者为单精度占四个字节,后者为双精度占八个字节。浮点数的存储格式采用IEEE标准,float包括1个符号位、8个指数位和23个尾数位,double包括1个符号位、11个指数位和52个尾数位,其中符号位表示正负,为1时表示负数,为0时表示正数。2、范围浮点数的范围由指数决定,以float为例,指数共8个二进制位,以无符号形式存储,指数范围为0~255,原创 2017-08-25 18:12:37 · 11364 阅读 · 0 评论 -
【QT】QObject简介
1、简介QObject类是所有Qt对象的基类,是Qt对象模型的核心,这个模型的主要特征为信号与槽,信号与槽是一个非常重要的机制,用于对象间的通信。连接信号与槽使用connect()函数,断开连接使用disconnect()函数,blockSignals()函数可以临时屏蔽信号,避免循环不断的通知,另外,protected级别的connectNotify()和disconnectNotify()函数还翻译 2017-08-16 19:33:26 · 4921 阅读 · 0 评论 -
【QT】QApplication简介
1、QApplicationQApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结束收尾工作。 对于使用了Qt的任何GUI程序来说,不管何时何地有多少个Window,但只有一个QApplication对象,如果不是基于QWidget的程序,相应的则使用QGuiApplication,翻译 2017-08-16 19:34:16 · 23766 阅读 · 0 评论 -
【QT】Qt对大小端字节序的处理
1、Endian Order什么是大小端字节序(Endian Order)?以四字节十六进制整型数0x12345678为例,按照书写习惯,从左到右,高位在前,低位在后,我们称0x12为最高有效字节,0x78为最低有效字节,在存储这个数字时,需要四字节的地址空间,比如说从0x00到0x03,地址空间是从低地址0x00到高地址0x03的一段连续地址,那么,低地址存储最高有效字节的形式为大端(Big En原创 2017-08-09 18:36:14 · 19833 阅读 · 3 评论 -
【QT】Qt QFlags源码分析
QFlags是个模板类,目的是提供类型安全的enum,在头文件qflags.h中定义,传统上C++使用int或uint存储enum值,却没有作类型检查。1、QFlagQFlag是一个基础类,还用到了QTypeInfo类,定义如下:// 在C++11中Q_DECL_CONSTEXPR为constexpr// 在C++11中Q_DECL_NOTHROW为noexcept// 重载了operator(原创 2017-08-09 18:37:15 · 3220 阅读 · 0 评论 -
【QT】Qt Compiler Detection(编译)
1、Compiler&GNUQt是跨平台的,从下面的编译配置选项(宏)中可以看出Qt支持的编译环境。// qcompilerdetection.h/* The compiler, must be one of: (Q_CC_x) SYM - Digital Mars C/C++ (used to be Symantec C++) MSVC - Micros原创 2017-08-08 18:22:27 · 5748 阅读 · 0 评论 -
【QT】Qt 5.9 QWidget程序执行过程分析
一个最简单的QWidget程序可能是下面这个样子:int main(int argc, char *argv[]){ QApplication a(argc, argv); QWidget w; w.show(); return a.exec();}首先是QApplication实例化,然后创建QWidget对象并show出来,最后通过exec进入事件循环,下面逐个分原创 2017-08-08 12:30:44 · 3121 阅读 · 1 评论 -
【QT】QPA
1、QPAQPA即Qt Platform Abstraction,是Qt5里面的平台抽象层,用以取代Qt for Embedded Linux以及Qt4中的平台接口。QPA插件通过定义QPlatform开头的一系列类的子类实现,其中有两个根类,QPlatformIntegration和QPlatformTheme,前者用于窗口系统的集成,后者用于更深层次的平台主题化和集成,QStyle不属于QPA,原创 2017-07-28 17:56:18 · 5963 阅读 · 0 评论 -
【QT】Qt for Embedded Linux Architecture
1、简介Qt for Embedded Linux(Qt4.8),是用于嵌入式设备(Linux)的开发GUI和应用程序的C++框架,提供了一个轻量级的窗口系统(QWS)以及标准的Qt API,基本架构如下图所示。Qt for Embedded Linux程序直接向Framebuffer写数据,Framebuffer设备是图形硬件的一种抽象,使得我们通过定义好的接口就可以访问图形硬件,而不比关心底层更翻译 2017-07-05 21:56:52 · 1966 阅读 · 0 评论 -
【QT】Qt for Embedded Linux Hardware Accelerated Graphics
1、硬件加速在嵌入式设备上设计应用程序时,通常要在图形特效与性能之间作出选择,不过在大多数设备上由于硬件特性,以及越来越多的设备上硬件能够很好地支持图形操作,可能不必担心这个问题。使用图形加速,不仅可以使用动态图形特效,还有其它两方面好处。一方面,图形硬件加速比CPU的电源使用率更高,当完成同样的事情时,CPU所需的时钟频率可能是GPU的20倍,例如,一个典型的硬件加速的手机图形单元可以在一个时钟周翻译 2017-07-05 21:58:36 · 1916 阅读 · 0 评论 -
【QT】深入qt信号与槽实现原理
1、先上示例代码先上示例代码直观地感受一下qt信号与槽的用法,后面再详细解释。通过QtCreator创建一个Qt Widget工程(没有创建ui文件,其它选项为默认值),工程名为SS,最后在SS目录下会生成5个文件:main.cpp、mainwindow.cpp、mainwindow.h、SS.pro和SS.pro.user,然后对这几个文件稍作修改,最终的源码如下。SS.pro——QT += co原创 2017-07-01 05:19:38 · 12384 阅读 · 1 评论 -
【QT】Qt的pro文件
在Qt的.pro文件中有许多变量和函数,下面列举一些常用的。两个连续的美元符号$$,可用来访问下面列出的变量,如$$SOURCES。代码注释以#开头。SOURCES += xxx.cppSOURCES声明.cpp文件。HEADERS += xxx.hHEADERS声明.h文件。INCLUDEPATH += include_pathINCLUDEPATH声明#includ原创 2015-04-10 11:02:00 · 1643 阅读 · 0 评论 -
【QT】Qt单元测试浅析
Qt单元测试框架,使用于基于Qt的应用程序和库,先从一个简单的demo工程说起吧。我们可以通过QtCreator来创建一个简单的Qt单元测试工程,夏天到了,这个demo工程的名字就叫Summer好了,创建过程中其它选项默认,完成后生成两个文件:Summer.pro和tst_summertest.cpp,先来看一下这两个文件。Summer.pro——QT += testlib原创 2015-04-09 19:46:25 · 6713 阅读 · 0 评论 -
【QT】Qt的自文档化工具qdoc
在《人月神话》一书中,提及了软件工程中必备的一个概念:自文档化。所谓自文档化,就是把文档和代码合二为一,既增强了文档的可维护性,又增强了代码的可读性,一举两得,何乐而不为呢?在Qt开发中,就有这样的自文档化工具:qdoc。使用qdoc,通常分三步走。第一步,添加QDoc注释到必要的.cpp文件或.qdoc文件,在.h文件中添加QDoc注释是无效的。第二步,编辑.qdocconf配置文件原创 2015-04-08 13:14:02 · 4737 阅读 · 0 评论 -
【QT】QtQml应用程序的性能考虑与建议
本文翻译自Qt官网文档:http://doc.qt.io/qt-5/qtquick-performance.htmlQtQml应用程序的性能考虑与建议1、时间考虑作为一名程序开发者,应该努力使渲染引擎的刷新率维持在60fps,也就是说在每帧之间大约有16ms,这段时间包括了基本图元在图形硬件上的描画。具体内容如下:>尽可能的使用异步事件驱动来编程。>使用工作翻译 2015-03-30 18:12:45 · 7204 阅读 · 0 评论 -
【QT】QML的粒子系统及图形渲染
在QML中,有两种特效可以让UI更加绚丽多彩,一种是粒子系统,另一种是图形渲染。下面先来看一下粒子系统。粒子系统主要有四个QML类型,分别是ParticleSystem、Emitter、ParticlePainter和Affector。在使用这些类型之前,首先要导入QtQuick.Particles模块。ParticleSystem将其它的类型绑在了一起,也就是说,其它的类型之间想要交原创 2015-03-20 16:03:19 · 3639 阅读 · 0 评论 -
【QT】Qml的console api有哪些
在调试应用程序时,输出一些log是常用的一种方法。QML提供了log输出的多个api,常用的是console.log(),直接输出参数内容。console.log():与console.log()类似的还有console.debug()/info()/warn()/error(),用法如下 function console_log() { console.log("t原创 2015-03-02 09:57:28 · 5048 阅读 · 0 评论 -
【QT】Qt QML动画概述
QML提供了丰富的动画元素,说起动画,无非是给UI增光添彩罢了。在QML中,动画常常与State和Transition联系在一起,这几个概念(下面的例子中都用到了)都比较简单,相关介绍可查看Qt官方文档,网址如下:http://doc.qt.io/qt-5/qtquick-statesanimations-topic.html下面先列举几个QML动画元素,动画效果可“忘文生意”:Pro原创 2015-02-28 15:48:44 · 3175 阅读 · 0 评论 -
【QT】Qt Qml状态机框架
Qt5.4引入了QML状态机框架,与C++状态机框架类似,可以在应用程序中创建并执行状态图。为此,QtQml.StateMachine模块提供了一些相关的QML类型,用于创建事件驱动的状态机,这些QML类型列举如下:StateMachine——状态机管家,执行算法基于SCXML(State Chart XML),在状态机启动之前要设置好初始状态,即initialState属性。St原创 2015-02-28 11:23:25 · 3455 阅读 · 0 评论 -
【QT】Qt for Android之2048实现
前段时间用Qt on Linux实现了2048的基本逻辑,在我的博客《Qt / C++与QML混合编程实现2048》一文中有相关介绍。都说Qt是跨平台的,先来试验一下再说。用Qt for Android直接运行之前写的2048代码,果不其然,在安卓模拟器上跑起来了,又把生成的apk文件导入手机中,也安装成功跑起来了,真的不错。用Qt for Android配置之前写的2048代码时原创 2015-02-10 21:51:01 · 2607 阅读 · 0 评论 -
【QT】在Qt中获取屏幕大小
如何在Qt中获取屏幕大小呢?首先要调用QApplication类中的一个static方法,如下:QDesktopWidget *QApplication::desktop()QApplication类用来管理GUI应用程序的控制流和主要设置,其派生关系如下:QApplication:QGuiApplication:QCoreApplication:QObject在主程序中,一定原创 2015-02-09 13:23:15 · 21350 阅读 · 0 评论 -
【QT】Qt Resource系统概说
什么是Qt Resource系统?简单的说,就是在可执行程序中存储binary文件,而且还是与平台无关的。与Qt Resource系统密切相关的有三个法宝,分别是qmake、rcc、QFile。qmake是一种编译工具,根据developer创建的工程文件,自动生成MakeFile,简化了编译过程。qmake提供了moc和uic编译规则,专门用来支持Qt开发,其中moc是Qt元对象编译器M原创 2015-02-05 10:34:05 · 4410 阅读 · 0 评论 -
【QT】什么是Qt元对象系统
Qt元对象系统,即meta object system(mos),提供了大家熟知的用于对象间信息传递的信号与槽机制,运行时类型信息和动态属性系统。mos基于三件法宝:一是QObject类,是所有Qt对象的基类,可以很好的使用mos。二是Q_OBJECT宏,在类private部分声明,用于激活mos特性,例如动态属性、信号与槽。三是元对象编译器,即meta object comp原创 2015-01-15 17:45:29 · 3357 阅读 · 1 评论 -
【QT】C++与QML混合编程实现2048
相信很多人都玩过2048,一个简单又有趣的数字游戏,曾看到许多人在地铁上玩来玩去的,感觉挺有意思,便下载个玩了一阵子,不过从来没有突破“2048”,看到有些小伙伴已经玩到“8192”了,确实令人捉急。后来,突然想自己写代码做个2048,于是花了一天时间用C++与QML实现了这个好玩的游戏。工程从QtCreator中创建,是个QtQuick Application,由C++与QML混合编程完原创 2015-01-14 09:21:52 · 3989 阅读 · 2 评论 -
【QT】QML与C++混合编程详解
1、QML与C++为什么要混合编程QML与C++为什么要混合编程,简单来说,就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法,下面介绍了两者间交互的方法与技巧。2、QML访问C++概述Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号、槽函数、枚举类型、属性、成员函数等。原创 2014-12-29 20:37:06 · 7266 阅读 · 9 评论 -
【QT】QML中的JavaScript用法详解
熟悉JavaScript的应该都了解Netscape公司,一代骄子虽然倒下了,却给后人留下了最为珍贵的产品和经验,在互联网发展史上享有举足轻重的地位,这里就不讲故事了,虽然很精彩,从未被磨灭。QML是对JavaScript的扩展,提供了JS主机环境,用法相似,但有些地方与浏览器/服务器端提供的JS主机环境(如Node.js)是不同的,用起来又有一些限制,下面列举一些常用的方法。1、QML文件中原创 2014-12-23 17:44:15 · 6342 阅读 · 0 评论 -
【QT】QML的Mouse事件(MouseArea)详解
在UI应用程序中,我们常常要处理鼠标事件,一个MouseArea就可以搞定许多事情。MouseArea本身是不可见的,主要和一些可见的元素一起使用,先来看一下它有哪些属性:acceptedButtons:Qt::MouseButtons枚举类型,默认为Qt.leftButton,用来设置有效的鼠标按键,支持按位与“|”操作符,具体按键类型可参考——http://doc.qt.io/原创 2014-12-22 17:44:04 · 14378 阅读 · 1 评论 -
【QT】QML的Key事件(Keys)详解
QML中的Keys元素提供了一些附加属性,之所以说是“附加属性”,是因为它与其它的QML元素用法不同。Keys是专门用来处理键盘事件KeyEvent的,它定义了许多针对特定按键的信号,例如digit0Pressed(KeyEventevent)、spacePressed(KeyEventevent)等,不过使用pressed(KeyEventevent)和released(KeyEve原创 2014-12-19 17:33:38 · 8292 阅读 · 1 评论 -
【QT】QML UI布局
在QML应用程序中,布局无疑是一个非常重要的概念,QML可视化元素的布局方式多种多样,经常用到的就是anchors锚布局,其它还有Positioners、Layouts等,下面一一介绍。1、属性定位如果说我们的QML元素位置是固定的,那么使用x、y属性进行布局要比其它布局方式更加直观、高效,这些属性值是个具体的坐标,也就是所谓的静态值,例子如下:Rectangle { widt原创 2014-12-15 12:30:55 · 4729 阅读 · 0 评论 -
【QT】QML如何创建动态组件
QML动态组件指的是按需分配,需要时我们就创建一个自定义组件,也就是所谓的对象延迟实例化,而不是在程序一开始就创建它,不需要时我们就把它销毁以节约内存,而不是传统意义上的隐藏或覆盖。我们可以使用Component与Loader,也可以使用JavaScript的形式来完成。先来介绍一下Component——progress属性,加载组件的过程,从0.0到1.0变化。status属性,加载原创 2014-12-12 16:17:39 · 10594 阅读 · 4 评论 -
【QT】QML之Item详解
使用QML,掌握Item元素的用法是非常有必要的,为什么这么说呢?因为QML中所有的可视化元素都继承自Item,而Item则定义了一些基本的、通用的属性和方法。这里的“可视化”需要特别说明一下,并不是所有的可视化元素都是可见的,比如说Rectangle继承自Item,本身是可见的,但是如果将其opacity透明度属性设置为0或者是其它的什么原因,就变成不可见的了,不过还是实实在在存在于UI界面的,原创 2014-12-10 16:52:17 · 12007 阅读 · 1 评论 -
【QT】QML中的信号和函数
在QtC++中,signals& slots是其核心机制,是应用程序与UI组件交互的神经网络,同样在QML中,也有类似的signal& handler机制,signal信号就是我们常说的一种事件,可通过signalhandler信号处理器来处理这个信号。当某个signal信号被发送时,对应的handler信号处理器也被触发,我们就可以在handler信号处理器中做一些事情,来处理这个sig原创 2014-12-08 11:22:07 · 11874 阅读 · 1 评论 -
【QT】QML属性绑定
所谓属性绑定,就是建立目标对象对其它对象的依赖关系,当其它对象发生变化时,目标对象也会变化,自动更新相关的属性值,达到动态属性的效果,这也是QML很重要的一个机制,先举一个简单的例子:import QtQuick 2.3Rectangle { width: 360; height: 200 color: "yellow" Rectangle { w原创 2014-12-08 13:53:38 · 2849 阅读 · 0 评论 -
【QT】QML几种属性
每一个QML对象都定义了一系列属性,类似于C++中的成员变量,属性名的首字母一般小写,若属性名以多个单词表示,那么第二个及以后的单词,首字母大写。id属性——QML对象的id属性是唯一的,不同对象的id属性值不能相同,我们可通过某个对象的id属性来访问这个对象。id属性是QML语言内建的一个属性,在对象实例化完成后其值是不能被修改的,不同于其它的普通属性。id属性值必须以小写字母或下划线开原创 2014-12-05 13:41:20 · 5822 阅读 · 1 评论