(一)OpenGL初探

2019-05-16  本文已影响0人  沉江小鱼

OpenGL初探

开篇介绍

这篇文章,主要讲的是以下几点:

  1. 图形API简介
  2. 图形API解决什么问题
  3. OpenGL专业名词解析
  4. OpenGL坐标系解析
  5. 图片/图形从文件渲染到屏幕解析

Tips: OpenGL 两大圣经 红宝书 蓝宝书(适合0基础的)

1.图形API简介

2.图形API目的是解决什么问题

简单来说就是实现图形的底层渲染:

Tips: OpenGL/OpenGL ES/Metal在任何项目中解决问题的本质就是使用GPU芯片来高效渲染图形图像,图形API是iOS开发者唯一接近GPU的方式。

3.OpenGL专业名词解析

3.1 OpenGL上下文(context)
3.2 OpenGL状态机

描述一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动。或者说,状态机是一种行为,说明对象在其生命周期中响应事件所尽力的状态序列以及对那些状态事件的响应,因此有以下特点:

类推到OpenGL中来,可以这么理解:

3.3 渲染

将图形/图像数据转换成3D空间图像操作叫做渲染。

3.4 顶点数组(VertexArray)和顶点缓冲区(VertexBuffer)

Tips:顶点数据是由GPU来处理的,顶点数组存在内存中间。
顶点缓存区:不在内存中,存在显卡的显存中。

3.5 管线

在OpenGL下渲染图形,就会经历一个一个节点,而这样的操作,可以理解为管线。比如流水线,每个任务类似流水线般执行,任务之间有先后顺序。它是一个抽象的概念,显卡在处理数据的时候是按照一个固定的顺序来的,这个顺序严格执行,不能被打破。

3.5.1 固定管线/存储着色器

3.5.2 着色器程序Shader(一段程序代码,给GPU执行的)

3.5.3 顶点着色器VertexShader

3.5.4 片元着色器

3.6 GLSL

OpenGL着色语言(OpenGL Shading Language)是用来在OpenGL中着色编程的语言,或者是自定义程序,在图形卡的GPU上执行的,提供开发者对绘图管线更多的直接控制。比如:视图转换、投影转换等。GLSL(GL Shading Language)的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片元着色器)

3.7 光栅化Rasterization

是把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。
光栅化其实是一种将几何图元变为二维图像的过程(比如三个顶点构成了一个三角形,光栅化可以看成是铺满这个三角形所包含的区域,为每一个区域分配颜色值和深度值)。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。
把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将模拟信号转化为离散信号的过程。

3.8 纹理

纹理可以理解为图片,大家在渲染图形时需要在其编码填充图片,为了让场景更逼真,这里的图片就是纹理,为了专业,OpenGL中叫纹理。

3.9 混合

在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附上的颜色进行混合,混合的算法可以通过OpenGL的函数进行制定,但是OpenGL提供的混合算法是有限的,可以通过片元着色器进行实现。

3.10 变换矩阵

例如图形想发生平移,缩放,旋转变换,就需要使用变换矩阵。

3.11 投影矩阵

用于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标系啊进行绘制。比如照镜子,物品在地上的投影。

3.12 渲染上屏/交换缓冲区(SwapBuffer)
上一篇下一篇

猜你喜欢

热点阅读