一、OpenGL 简介
- 什么是OpenGL?摘抄自极客雨露--iOS OpenGL 学习
1、OpenGL是一种应用程序编程接口,它是一种可以对图形硬件设备特性进行访问的软件库。
2、OpenGL被设计为一个现代化的、硬件无关的接口,因此我们可以在不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,或者完全通过软件的方式实现OpenGL接口。
3、OpenGL自身并不包含任何执行窗口任务,或者处理用户输入的函数。
4、OpenGL也没有提供任何用于表达三维物体模型,或者读取图像文件的操作。我们需要通过一系列的几何图元(点,线段,三角形,以及patch)来创建三维空间物体!
(ps: 2D + 透视 = 3D)
5、OpenGL API是过程性的,不是描述性的,即OpenGL不是面向对象的,所以OpenGL无法利用面向对象的特性。使用的时候只需要:程序与OpenGL的实现链接就可以了!
6、OpenGL的实现可以是软件实现,也可以是硬件实现。
软件实现:是对OpengGL函数调用时作出的响应并创建二维或三维图像的函数库。
硬件实现:则是通过设置能够绘制图形或图像的图形卡驱动程序
硬件实现要比软件实现快得多!!
(ps: 简单理解就是开发的图形库)
- OpenGL可以用来干什么?
- 1.视频,图形,图片处理
- 2.2D/3D 游戏引擎开发
- 3.科学可视化
- 4.医学软件开发
- 5.CAD(计算机辅助技术)
- 6.虚拟实境(AR,VR)
- 7.AI ⼈工智能
-
了解客户端/服务端的概念?
-
- OpenGL 与 OpenGL ES 的关系
OpenGL 与 OpenGL ES 的主要区别,在于OpenGL ES 主要针对嵌入式设备使⽤
- 1、OpenGL ES是OpenGL的子集,针对手机、PDA和游戏主机嵌入式设备而设计
- 2、OpenGL ES 是从 OpenGL 裁剪定制而来的,去除了 glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性,剩下最核心有用的部分。
可以理解成:OpenGL ES是一个在移动平台上能够支持 OpenGL 最基本功能的精简规范。
二、OpenGL基本知识了解
-
着色器渲染流程
-
2.什么是管线?
在OpenGL 下渲染图形,就会有经历一个一个节点.而这样的操作可以理解管线.大家可以想象成流水线.每个任务类似流水线般执行.任务之间有先后顺序. 管线是一个抽象的概念,之所以称之为管线是因为显卡在处理数据的时候是按照一个固定的顺序来的,而且严格按照这个顺序。就像水从一根管子的一端流到另一端,这个顺序是不能打破的
- 顶点着色器(VertexShader)
一般用来处理图形每个顶点变换(旋转/平移/投影等)
顶点着色器是OpenGL中用于计算顶点属性的程序。顶点着色器是逐顶点运算的程序,也就是说每个顶点数据都会执行一次顶点着色器,当然这是并行的,并且顶点着色器运算过程中无法访问其他顶点的数据。
一般来说典型的需要计算的顶点属性主要包括顶点坐标变换、逐顶点光照运算等等。顶点坐标由自身坐标系转换到归一化坐标系的运算,就是在这里发生的。
- 片元着色器程序(FragmentShader)
一般用来处理图形中每个像素点颜色计算和填充
片段着色器是OpenGL中用于计算片段(像素)颜色的程序。片段着色器是逐像素运算的程序,也就是说每个像素都会执行一次片段着色器,当然也是并行的。
- 5.GLSL(OpenGL Shading Language)
OpenGL着色语言(OpenGL Shading Language)是用来在OpenGL中着色编程的语言,也即开发人员写的短小的自定义程序,他们是在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程性。比如:视图转换、投影转换等。GLSL(GL Shading Language)的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片断着色器)
- 6.光栅化(Rasterization)
- 是把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。
- 光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。
- 光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元
- 把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将模拟信号转化为离散信号的过程
- 7.纹理
纹理可以理解为图片. 大家在渲染图形时需要在其编码填充图片,为了使得场景更加逼真.而这里使用的图片,就是常说的纹理.但是在OpenGL,我们更加习惯叫纹理,而不是图片.
- 8.混合(Blending)
在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜色进行混合,混合的算法可以通过OpenGL的函数进行指定。但是OpenGL提供的混合算法是有限的,如果需要更加复杂的混合算法,一般可以通过像素着色器进行实现,当然性能会比原生的混合算法差一些。
- 9.OpenGL 图元
- 1.点
- 2.线
- 3.线带
- 4.线环
- 5.三角形
- 6.三角形带
- 7.三角形扇