OpenGL(一) OpenGL入门

作者: 默默_David | 来源:发表于2019-01-29 10:55 被阅读69次

    1.概念

    2D+透视 = 3D

    3D术语:

    光栅化:实际绘制或填充每个顶点之间的像素形成过程

    着色:沿着顶点之间改变颜色值,能够轻松创建光照照射到一个立方体的效果

    纹理贴图:将纹理图片附着到你绘图的图像上

    混合:颜色混合效果

    2.认识GPU

    GPU全称是GraphicProcessing Unit--图形处理器,其最大的作用就是进行各种绘制计算机图形所需的运算,包括顶点设置、光影、像素操作等。GPU实际上是一组图形函数的集合,而这些函数有硬件实现,只要用于3D游戏中物体移动时的坐标转换及光源处理。在很久以前,这些工作都是由CPU配合特定软件进行的,后来随着图像的复杂程度越来越高,单纯由CPU进行这项工作对于CPU的负荷远远超出了CPU的正常性能范围,这个时候就需要一个在图形处理过程中担当重任的角色,GPU也就是从那时起正式诞生了。

    从GPU的结构示意图上来看,一块标准的GPU主要包括通用计算单元、控制器和寄存器,从这些模块上来看,是不是跟和CPU的内部结构很像呢?

    GPU与CPU结构对比

    事实上两者的确在内部结构上有许多类似之处,但是由于GPU具有高并行结构(highly parallel structure),所以GPU在处理图形数据和复杂算法方面拥有比CPU更高的效率。上图展示了GPU和CPU在结构上的差异,CPU大部分面积为控制器和寄存器,与之相比,GPU拥有更多的ALU(Arithmetic Logic Unit,逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理。CPU执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行,而GPU具有多个处理器核,在一个时刻可以并行处理多个数据。

    GPU对纹理的处理概览

    GPU采用流式并行计算模式,可对每个数据进行独立的并行计算,所谓“对数据进行独立计算”,即,流内任意元素的计算不依赖于其它同类型数据,例如,计算一个顶点的世界位置坐标,不依赖于其他顶点的位置。而所谓“并行计算”是指“多个数据可以同时被使用,多个数据并行运算的时间和1个数据单独执行的时间是一样的”。

    GPU的图形处理过程

    简而言之,GPU的图形(处理)流水线完成如下的工作:(并不一定是按照如下顺序)

    顶点处理:这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。在现有的GPU中,这些工作由硬件实现的Vertex Shader(顶点着色器)完成。

    光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。

    纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texture mapping unit)即是用来完成此项工作。

    像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Pixel Shader(像素着色器)完成。

    最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。

    GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。

    不过需要注意的是,无论多牛的游戏家用显卡,光影都是CPU计算的,GPU只有2个工作,1多边形生成。2为多边形上颜色。

    实际应用中图像的生成流程大致如下:

    首先从硬盘中读取模型,

    CPU分类后将多边形信息交给GPU,GPU再时时处理成屏幕上可见的多边形,但是没有纹理只有线框。CPU计算出模型后,GPU将模型数据放进显存,显卡同时也为模型贴材质,给模型上颜色。CPU相应从显存中获取多边形的信息。然后CPU计算光照后产生的影子的轮廓。等CPU计算出后,显卡的工作又有了,那就是为影子中填充深的颜色。周而复始,完成CPU与GPU之间的数据交换。

    3.OpenGL简介

    OpenGL发展至今,已经有20余年,作为一个成熟并久负盛名的跨平台计算机图形应用程序接口规范,它被广泛使用在游戏、影视、军事、航空航天、地理、医学、机械设计,以及各类科学数据可视化等领域

    OpenGL是一种图形应用程序编程接口(Application Programming Interface,API)。简单理解就是开发的图形库

    OpenGL可以用来做什么?

    .视频、图形、图片处理

    .2D/3D游戏引擎开发

    .科学可视化

    .医学软件开发

    .CAD(计算机辅助技术)

    .虚拟实境(AR,VR)

    .AI(人工智能)

    4.为什么要用OpenGL?

    难道不能直接将数据从CPU跨到GPU处理?为什么要多次一句,出现OpenGL这个框架?

    CPU与GPU的数据处理

    数据饥饿:从一块内存中将数据复制到另一块内存中,传递速度是非常慢的,内存复制数据时,CPU和GPU都不能操作数据(避免引起错误)

    5.了解客户端/服务端的概念

    客户端/服务端概念


    6.OpenGL与OpenGL ES的关系

    OpenGL与OpenGL ES的主要区别,在于OpenGL ES主要针对嵌入式设备使用

    7.着色器的基本认识

    .图元:组成图像的基本单元

    .OpenGL渲染管线:一系列有序的处理阶段的序列,用于把我们应用中的数据转化为OpenGL生成一个最终的图像的一个过程

    .GLSL:专门为图形开发设计的编程语言

    8.着色器的渲染流程

    着色器的渲染过程

    .顶点着色器(必要)

    .细分着色器(可选)

    .几何着色器(可选)

    .片元着色器(必选)

    相关文章

      网友评论

        本文标题:OpenGL(一) OpenGL入门

        本文链接:https://www.haomeiwen.com/subject/fwwtsqtx.html