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

posted @   HeyMeteor  阅读(1400)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示