qt5_qml_Opengl_shader 第一弹----------------------openglunderqml的简化及介绍

这篇博客旨在帮助初学者使用QML调用OpenGL进行显示,简化了Qt自带的复杂例程,以一个简单的三角形为例。介绍了Glut、GLWidget以及在QML中的Scene Graph - OpenGL Under QML的使用,并提供了相关的槽函数和信号解释,以及代码示例链接。
摘要由CSDN通过智能技术生成

最近得知opengl可以通过纹理贴图来渲染yuv的数据,这就免去了yuv-rgb,这个过程在arm上还是很耗时间的,于是就接触了opengl.

写这篇文章的目的是方便初学者使用qml来调用opengl显示,而qt自带的例程过于复杂,这里将之改成了一个简单的三角形的显示。(初学opengl,有错误请大家提出)

初学opengl,感觉不是很难,但是就是封装版本太多了,下边分三个来介绍:

Glut:

用的最多,大致步骤如下

1>    初始化:glutInit(),opengl的初始化很复杂的,但是经过glut的封装就变得很简单。

2>     显示模式:glutInitDisplayMode:以rgb显示或者其他,然后用双缓冲来显示,这是opengl很好的地方,加入有两帧数据,普通的显示:读第一张到内存里-显示-读第二张到内存-显示,opengl的双缓冲显示,在显示第一针的同时读入第二针,这样就不会造成卡顿,也增加了效率。

3>     创建窗口。

4>     加载显示函数:glutDisplayFunc(&myDisplay);这个是最重要的,关于显示的东西都在一个函数里,这样代码就变得很清晰了。

5>     主循环

#include <GL/glut.h>
void myDisplay(void)
{
     glClear(GL_COLOR_BUFFER_BIT);
     glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
     glFlush();
}
int main(int argc, char *argv[])
{
     glutInit(&argc, argv);
     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
     glutInitWindowPosition(100, 100);
     glutInitWindowSize(400, 400);
     glutCreateWindow("第一个OpenGL程序");
     glutDisplayFunc(&myDisplay);
     glutMainLoop();
     return 0;

关于glut的描述,有兴趣的同学可以移步:

http://www.cnblogs.com/crazyxiaom/articles/2073586.html,讲的很详细。

另外在qt里边也可以调用glut。

Glwidget

Qt有自己对opengl的封装,在qt5之后叫QOpenGLFunctions在qt中用opengl最多的是GLwidget,主要通过三个函数实现:

voidinitializeGL();--初始化

void paintGL(); --显示

void resizeGL(int width, int height );--自动缩放

 

详细介绍请参考nehe的opengl:http://www.yakergong.net/nehe/

结合网上的例子,我自己用最新的glwidget,实现了简单的三角形的绘制,会在最后附上代码,这里就不多讲了。

Scene Graph - OpenGL Under QML 

因为本人酷爱qml,所以决定将现实的东西以qml插件的形式来显示。

有两个可以参考:分别是qt自带的例子:SceneGraph - OpenGL Under QML,还有彩阳大神的例子:http://blog.csdn.net/gamesdev/article/details/38024327

我主要参考了qt自带的例子,在其基础上结合qt帮助文档中的QOpenGLShaderProgram Class中的几段代码,略微懂了一些shader的知识,然后实现了用qml来显示简单的三角形。

首先需要定义两个类,一个供显示,另一个提供逻辑和线程的相应(个人认为是因为显示的类要调用gpu来处理),

classSquircleRenderer:publicQObject供显示的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值