OpenGL渲染引擎-设计与实践教程

kaudmands · · 148753 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

学习地址1:https://pan.baidu.com/s/1xcTWd283zJ9bXCs2kYG-BA 提取码: 7t5p 学习地址2:https://share.weiyun.com/ZgSMB098 密码:in4rmz Qt 对 OpenGL 的支持是内建的,也就是说,只要你的 Qt 版本支持 OpenGL,你就可以在你的 Qt 应用程序中使用 OpenGL,无需额外安装 OpenGL。 然而,要在你的 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的开发环境搭建完成。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

148753 次点击  
加入收藏 微博
1 回复  |  直到 2024-11-14 09:35:52
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传