基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(一)简介

本篇文章,是一项带引号的“翻译”类型文章。

Joey De Vries  的现代OpenGL教程是我看过最好的图形学教程,没有之一。

(这是教程地址https://learnopengl-cn.github.io/01%20Getting%20started/01%20OpenGL/ 点击打开链接,每篇教程都附有成品源代码,不过需要连接VPN)

教程极好,却有一问题,作者是基于visual studio开发的,没有涉及到GUI图形化界面,在自己使用vs平台实际的程序开发中,关于GUI确是造成了不小的困扰。关于如何在OpenGL中引进GUI界面,我有以下几个想法:

 1.c# + OpenGL

 2.MFC + OpenGL

 3.引进一些比较棒的GUI开发库,如CEGUI,

 4.自己用OpenGL写一套GUI库

 5.Qt + OpenGL


在实际操作过程中,对于

想法1,结合OpenGL的C# Demo实在太少了,很难找到,更妄论教程之类,于是放弃。

想法2,MFC,emmm,学了一学期的windows程序设计,太恶心了,再说微软都放弃mfc,改投资c#了,就算了吧。

想法3,关于CEGUI,他是基于glut开发的,是固定管线版本的(老版本)OpenGL,而Vries大神,通篇用的是可编程管线版本,恕我愚钝,尝试了很   长时间,都没将CEGUI与现代OpenGL结合成功。

想法4,最后还是因为项目时间紧张与visual studio平台限制,选择了自己用OpenGL写一套GUI(下图所示),一些小控件label,button之类的还好说,若是scrollbar滚动条这种带动画效果的,写起来简直累死人。


想法5,Qt是一个非常棒的GUI框架,对OpenGL有很好的支持,无论固定管线版本,还是可编程管线版本。对与GLSL,Qt有两套解决方案,适用于Qt自身的QOpenGLShader与QOpenGLShaderProgram等类,和忠实于原头文件glfw.h的QOpenGLFunction_x_x_Core类。

所以,我欲将Vries大神基于visual studio开发的OpenGL教程代码,移植为Qt平台。该博客为这一学习过程中,自己记录之用。

我的Qt版本为5_8,此版本对现代OpenGL有很好的支持,在具体应用上有三种编程方法:

1.继承QOpenGLWidget,  QOpenGLFunctions,QOpenGLExtraFunctions类,这些类的成员函数保留了glfw.h,即OpenGL核心版本的函数命名方法,可直接使用Vries教程里的函数名。

2.使用类QOpenGLFunctions_x_x_Core的对象,这是对OpenGL某个版本的包装器,如QOpenGLFunctions_3_3_Core类,这是Vries所用的版本,表明是OpenGL3.3版。

3.结合Qt自身编程风格的QOpenGLShader,与QOpenGLShaderProgram类,本质上用的还是OpenGL内核函数,不过节省了很多内核函数的步骤,并且函数命名风格与使用方式,贴近Qt自身,适合于习惯Qt编程的人员使用。



猜你喜欢

转载自blog.csdn.net/z136411501/article/details/79821895