OpenGL概述
openGL概述
1. 什么是OpenGL
OpenGL 是一种应用程序编程接口(API),是一种可以对图形硬件设备特性进行访问的软件库。
OpenGL使用的客户端-服务端的形式,编写的程序可以看作客户端,计算机图形硬件厂商提供的OpenGL实现可以看作服务端。
2. HelloWorld
所有 OpenGL 程序的基本结构都是:1. 初始化物体渲染所对应的状态 2. 设置需要渲染的物体。
- 渲染表示计算机从模型创建最终图像的过程;
- 着色器是图形硬件设备所执行的一类特殊函数,可以看作专为图形处理单元(GPU)编译的一种小型程序。
3. OpenGL 语法
OpenGL 库中所有的函数都会以字符“gl”作为前缀。常量都以 “GL_” 作为前缀,下划线分隔。
为了能够方便的在不同的操作系统之间一直OpenGL程序,OpenGL还为函数定义了不同的数据类型,例如 GLfloat。
由于OpenGL是一个C语言形式的库,因此不能使用函数的重载来处理不同类型的数据,此时使用函数名称的细微变化来管理实现同一类功能的函数集。
// glUniform*()
glUniform2f();
glUniform2fv();
4. OpenGL 渲染管线
渲染管线是一系列数据处理过程,并且将应用程序的数据转换到最终渲染的图像。
OpenGL 首先接收用户提供的几何数据(顶点和几何图元),并且将它输入到一系列着色器阶段中进行处理,这些阶段包括顶点着色、细分着色(它本身包含两个着色器)以及最后的几何着色,然后它将被送入光栅化单元(rasterizer)。光栅化单元负责对所有剪切区域内的图元生成片元数据,然后对每个生成的片元都执行一个片元着色器。
只有顶点着色器和片元着色器是必需的,细分着色器和几何着色器是可选步骤。
4.1 准备向 OpenGL 传输数据
使用 glNameBufferStorage()
命令创建OpenGL用于保存数据的缓存对象。
4.2 将数据传输到 OpenGL
使用 glDrawArrays()
请求渲染几何图元。OpenGL的绘制通常就是将顶点数据(可以包含需要的任何数据,自己负责定义)传输到OpenGL服务端。
4.3 顶点着色
对于绘制命令传输的每个顶点,OpenGL都会调用一个顶点着色器来处理顶点相关的数据。通常来说,一个复杂的应用程序可能包含许多个顶点着色器,但是在同一时刻只能有一个顶点着色器起作用。
4.4 细分着色
细分着色器会使用面片(patch)来描述一个物体的形状,并使用相对简单的面片几何体连接来完成细分的工作,其结果是几何图元的数量增加,并且模型的外观变得更为平顺。
使用两个着色器分别管理面片数据并生成最终的形状。
4.5 几何着色
可选的,在光栅化之前对每个几何图元做更进一步的处理,例如创建新的图元。
4.6图元装配
图元装配阶段将顶点与相关的几何图元之间组织起来,准备下一步的剪切和光栅化工作。
4.7 剪切
顶点可能会落在窗口之外,对顶点相关的图元作出改动,以保证相关元素不会在窗口外绘制,由OpenGL自动完成。
4.8 光栅化
几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。
光栅化是判断某一部分几何体(点、线或者三角形)所覆盖的屏幕空间。可以将一个片元视为一个“候选的像素”,也就是放置在帧缓存中的像素。
4.9 片元着色
使用着色器来计算片元的最终颜色和深度值。会使用纹理映射的方式,对顶点处理阶段所计算的颜色值进行补充。
顶点着色决定了一个图元应该位于屏幕的什么位置,而偏远着色使用这些信息来决定某个片元的颜色应该是什么。
4.10 逐片元的操作
独立的偏远处理操作,使用深度操作(z缓存)和模板操作的方式来决定一个片元是否是可见的。
5. 深入分析
OpenGL编程指南 第九版 P11
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通