欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

OpenGL入门详解(3.OpenGL基本流程)

程序员文章站 2022-12-04 21:12:42
看了不少的OpenGL书或者文章,有如下特征上来就是一堆代码,看的莫名其妙;上来就是很片面的介绍概念,看了也不知道如何使用越看越糊涂,不知道如何使用,为什么这样使用本系列文章主要从入门的角度总结OpenGL的基本流程概念和所使用的语言,尽量避免学的糊涂。OpenGL宏观流程先列一下整体处理流程:读取顶点顶点着色器组装图元光栅化图元片段着色器写入帧缓冲显示在屏幕上......

前期文章:

看了不少的OpenGL书或者文章,有如下特征

  • 上来就是一堆代码,看的莫名其妙;
  • 上来就是很片面的介绍概念,看了也不知道如何使用
  • 越看越糊涂,不知道如何使用,为什么这样使用

本系列文章主要从入门的角度总结OpenGL的基本流程概念和所使用的语言,尽量避免学的糊涂。

OpenGL宏观流程

先列一下整体处理流程:

  1. 读取顶点
  2. 顶点着色器
  3. 组装图元
  4. 光栅化图元
  5. 片段着色器
  6. 写入帧缓冲
  7. 显示在屏幕上

再贴一张图
OpenGL入门详解(3.OpenGL基本流程)
看到这可能会是一脸懵逼,完全不懂,当初我也是这样的,看了流程和图,脑海里大大的几个❓ what are you 说啥呢?下面自能尽量以我自己的语言合理的来解释了,可能解释的不充分。

读取顶点

  • 图片显示在屏幕上,需要2个因素,位置,颜色。
  • 显示的图形从几何角度上看是一个多面体(凹,凸)
  • 多面体有其顶点和边,边可通过顶点链接,因此有顺序的顶点可代表一个多面体。

因此以上决定了OpenGL处理流程的第一步,读取顶点,这些顶点定义了一个多面体的边界。在程序里,就是一个个坐标,用数组存储,对应着流程图片里面的顶点缓冲区/数组对象。

顶点着色器

确定了顶点,那么就需要把这些顶点的位置通过一种方式,告诉OpenGL,这里就使用到顶点着色器。

  • 顶点着色器生成每个坐标的最终位置,每个顶点执行一次
  • 它的输入需要顶点数据和着色器程序,着色器程序定义了一种方式把外部的顶点数据告知给OpenGL,并设置一些额外的属性如大小,颜色等
  • 精度要很高,因为位置对精确性要求很高
  • 输出就是OpenGL最终识别的最终位置

通过读入顶点和顶点着色器,OpenGL最终拿到了多面体的边界顶点。接下来就是组装图元和光栅化图元。

组装图元和光栅化图元

要把物体画到屏幕上,类似电视机上的显示画面,需要一个点一个点的显示,每一个点有其ARGB等组成的颜色。因此OpenGL定义了图元的概念:图元是三角形、直线或者点几何对象。因此OpenGL里面最基本的几何单元是点、直线、三角形。点和直线毋庸置疑,这里使用三角形是因为,三角形是最小的多面体,任何一个多面体都可以用多个三角形构成。圆也可以看作是由很多个三角形组成或者可以看作尺寸比较大的点。

读入顶点,并组装成一个个图元,接下来就是光栅化图元。
总所周知,移动设备的显示屏由成千上万个小的,独立的部件组成,被称之为像素;每个像素通常由三个单独的子组建构成,发出红色、绿色和蓝色的光,每个像素都非常小,人的眼睛会把红色、绿色和蓝色的光混合在一起,从而创造出巨量的颜色范围;

OpenGL通过光栅化技术把每个点、直线以及三角形分解成大量的小片段映射到显示屏上,从而形成一副图像。 类似于显示屏上的像素,每一个都是单一的纯色,用ARGB来构成,下图解释了这一过程。
OpenGL入门详解(3.OpenGL基本流程)

片段着色器

在上图中,2个顶点生成一条直线,通过光栅化技术转化为一个片段集合。显示系统会把这些片段直接映射到屏幕上的像素,通常情况下一个片段就对应一个像素。

  • 片段着色器主要目就是告诉GPU每个片段的最终颜色应该是什么。
  • 基本图元的每个片段,片段着色器都会调用一次。
  • 输入为每个片段生成的顶点着色器输出
  • 输出就是每个片段的最终颜色。

确认了每个片段(对应到屏幕的像素)的颜色,最终就可绘制在显示屏幕上。

小结

本篇总结了宏观上的处理流程,深入理解这些流程很重要。

本文地址:https://blog.csdn.net/Scott_S/article/details/85794473