然而,要在你的 Qt 应用程序中使用 OpenGL,你的系统需要有一个支持 OpenGL 的图形驱动。这通常意味着你需要在你的系统上安装一个支持 OpenGL 的图形卡驱动。大多数现代的桌面系统(包括 Windows、macOS 和大多数 Linux 发行版)都自带了支持 OpenGL 的图形驱动,所以你通常不需要手动安装。
如果你的系统没有支持 OpenGL 的图形驱动,或者你的图形驱动不支持你需要的 OpenGL 版本,你可能需要手动安装一个新的图形驱动。这通常涉及到从你的图形卡制造商的网站下载驱动程序,并按照他们的指示进行安装。
请注意,虽然 Qt 支持 OpenGL,但并不是所有的 Qt 功能都需要 OpenGL。大多数 Qt 功能(包括 Qt Widgets 和 Qt Quick 2D)都可以在没有 OpenGL 的系统上运行。只有一些特定的功能(如 Qt Quick 3D 和一些 Qt 3D 功能)需要 OpenGL。
一、Vulkan和OpenGL区别
Vulkan和OpenGL区别,Vulkan与OpenGL相比,可以更详细的向显卡描述你的应用程序打算做什么,从而可以获得更好的性能和更小的驱动开销。Vulkan的设计理念与Direct3D 12和Metal基本类似,但Vulkan作为OpenGL的替代者,它设计之初就是为了跨平台实现的,可以同时在Windows、Linux和Android开发。甚至在Mac OS系统上,Khronos也提供了Vulkan的SDK,虽然这个SDK底层其实是使用MoltenVK实现的。
Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以重点要看和后者的对比。在高分辨率、高画质、需要GPU发挥的时候,Vulkan、OpenGL的速度基本差不多,但是随着分辨率的降低,CPU越来越重要,Vulkan逐渐体现了出来,尤其是看看GTX 980 Ti,最多可以领先OpenGL 33%之多!
二、OpenGL对象
我们可以把OpenGL对象理解成一个状态的集合,它负责管理它下属的所有状态。当然,除了状态,OpenGL对象还会存储其他数据。注意。这些状态和上述context中的状态并不重合,只有在把一个OpenGL对象绑定到context上时,OpenGL对象的各种状态才会映射到context的状态。因此,这时如果我们改变了context的状态,那么也会影响这个对象,而相反地,依赖这些context状态的函数也会使用存储在这个对象上的数据。
因此,OpenGL对象的绑定既可能是为了修改该对象的状态(大多数对象需要绑定到context上才可以改变它的状态),也可能是为了让context渲染时使用它的状态。
三、OpenGL的工作方式
首先,OpenGL一开始最难理解的部分我觉得在于创建整个程序上。虽然我已经有一些图形学基础,但是拿到OpenGL的时候完全是懵逼的,因为完全不知道其程序的运作方式。
所以在这里,我觉得最先需要解释的就是OpenGL的整体工作方式:
OpenGL是一个状态机,因此,其工作方式来自于上下文环境的切换,或者说是设定当前上下文环境(Context)。因此,不论是创建的shader,还是VAO,VBO,都是需要创建之后绑定进入当前上下文的。
四、学习OpenGL常见难点:
难点1:不知道如何将单个例子,结合成一个完整的渲染引擎
难点2:不能把Shader和CPU的流程联立在一起,不知道某个资源/数据,是从哪里来的。就算知道他是什么时候送到GPU的,也不知道GPU如何定位某个资源/数据。
难点3:难以建立起并行计算的思维方式
难点4:难以理解各种模板如何在多个批次之间发生作用。不能具象的去理解混合,测试的过程。不能够理解,FrameBuffer的真正含义。
难点5:难以建立起空间想象,不知道矩阵变换,如何将顶点,或其他数据,变换到不同的空间进行统一计算。
难点6:难以理解从Vertex到Fragment是如何过度的。
五、构建OpenGL程序
1、在项目的根目录下创建build mkdir build cd build
2、执行cmake指令,指定要构建的文件系统和使用的编译器 cmake .. -G Ninja -D CMAKE_C_COMPILER=clang -D CMAKE_CXX_COMPILER=clang++
3、执行ninja ninja 编译完成之后就可以在build目录下找到可执行程序了,能够正常运行就说明OpenGL的开发环境搭建完成。