初探 OpenGL

引言

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。

OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。

OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。

参考:百度百科-OpenGL

OpenGL 基本概念解析

渲染管线

渲染管线又称渲染流水线,它指的是图形图像数据途经一个输送管道,期间经过各种操作处理最终显示到屏幕的过程

固定管线

OpenGL内部已经封装了一系列的固定渲染流程,这个是不可更改的,需要用GLShaderManager去调用,有八种类型,分别为

• 单位着色器

• 平面着色器

• 上色着色器

• 默认光源着色器

• 点光源着色器

• 纹理替换矩阵

• 纹理调整着色器

• 纹理光源着色器

可编程管线

可以简单理解, 在处理图形的过程,必须使用顶点着色器和片元着色器,我们可以用GLSL语言编写着色器程序,通过自定义的着色器程序来达到我们想要的

顶点着色器

顶点着色器是在GPU上运行的小程序。顾名思义,顶点着色器是用来处理顶点数据的。

顶 点着色器的输入是一个或多个顶点属性(Vertex Attribute)组成的VertexBuffer。VertexBuffer中的顶点应至少指出了顶点的位置属性,这些位置属性通常指的是每个3D模 型(每个模型都有其自身的原点)本身的坐标。顶点着色器将这些位置信息转换为屏幕位置,以便可以正确的显示

片元着色器

就像顶点着色器一样,片元着色器也是运行在GPU上的小程序。顾名思义,用它来处理片元。它们负责输出每个三角形像素的最终颜色。

基本上来说,它是这样运行的:片元着色器将顶点着色器输出的片元作为输入,片元的顶点属性已被光栅化单元进行了插值处理。

光栅化

光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。

光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。

把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将模拟信号转化为离散信号的过程。

参考:百度百科-光栅化

着色器程序

着色器常见的有顶点着色器,片元着色器,几何着色器,细分着色器,其中可编程的着色器只有顶点着色器和片元着色器。

OpenGL 在处理着色器程序时,也和其他编译器一样,生成的着色器程序同时包含了顶点着色器和片元着色器的运算逻辑

顶点数组和顶点缓冲区

顶点指的是当我们处理图形时,它的位置信息

当我们画一个图形的时候,要先得知它的顶点数据,就好比我们制作灯笼的时候,要先把它的骨架做出来,然后再把纸贴上去。而这些数据存放在哪的呢?开发者可以选择传入的指针,直接由内存传入,即这些顶点数据一直存放在内存里面,被称为内存数组。性能更高的做法是分配一块显存,把这些顶点数据存放到提前开辟好的显存里,这部分的显存称为顶点缓冲区

纹理

纹理可以理解为一张图片,在渲染中为了显示更逼真的效果,我们需要对其编码填入图片,在OpenGL中我们称这些“图片”为纹理,而不是图片

混合

混合指的是颜色混合,当开启混合功能之后,如果像素没有被剔除,那么像素的颜色将和帧缓冲的颜色进行混合。混合的算法可以通过OpenGL去指定,常用的混合方程式为

其中,Cf是最终计算产生的颜色,Cs是源颜色,Cd则是目标颜色,S和D分别是源和目标混合因子

变换矩阵

当图形想执行平移、缩放、旋转时就会用到它

投影矩阵

用于3D转为二维屏幕坐标

投影可以设定为透视投影(perspective projection)和正交投影(orthographic projection),投影效果如下


渲染上屏/交换缓冲器

OpenGL在绘制图元时,先是在一个缓冲区中完成渲染,然后再把渲染结果交换到屏幕上。我们把这两个缓冲区称为前颜色缓冲区(屏幕)和后颜色缓冲区。在默认情况下,OpenGL命令是在后颜色缓冲区进行渲染的。

你可能感兴趣的:(初探 OpenGL)