OpenGL学习笔记(1)

相关图形API简介

1.OpenGL (Open Graphics Library)是⼀个跨编程语⾔、跨平台的编程图形程序接⼝,它将计算机的资源抽象称为⼀个个OpenGL的对象,对这些资源的操作抽象为⼀个个的OpenGL指令。

2.OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的⼦集,针对⼿机、PDA和游戏主机等嵌⼊式设备⽽设计,去除了许多不必要和性能较低的API接⼝。

3.Metal: Apple为游戏开发者推出了新的平台技术Metal,该技术能够为 3D 图像提⾼ 10 倍的渲染性能.Metal 是Apple为了解决3D渲染⽽推出的框架 

4.DirectX 是由很多API组成的,DirectX并不是⼀个单纯的图形API. 最重要的是DirectX是属于Windows上⼀个多媒体处理API.并不⽀持Windows以外的平台,所以不是跨平台框架. 按照性质分类,可以分为四⼤部分,显示部分、声⾳部分、输⼊部分和⽹络部分。

OpenGL名词解析

OpenGL 上下⽂(context)

OpenGL上下文是一个非常大的状态机,保存了OpenGL的各种状态,是OpenGL指令执行的基础,可以把它理解成一个大的结构体。

OpenGL 状态机

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

因此具有以下特点:

1.有记忆功能,能记住其当前的状态。

2.可以接收输⼊,根据输入的内容和⾃己的原先状态,修改⾃己当前状态,并且可以有对应输出。

3.当进⼊特殊状态(停机)的时候,便不再接收输入,停⽌工作。

渲染

将图形/图像或图像数据转换成3D空间图像的操作,也可以理解为数据可视化的操作。

顶点数组/顶点缓冲区

顶点就像是图像的骨架,想要绘制图形,就要先确定顶点的位置,顶点存储在内存中的位置叫做顶点数组。而相比较内存而言,显存的性能更高,因此我们也可以提前分配一块⼀块显存,将顶点数据预先传⼊到显存当中。这部分的显存,就被称为顶点缓冲区。

管线

在OpenGL下绘制图形,都是按照一个固定的顺序来执行,就像流水线一样,这个顺序不能被打破。

管线又分为固定管线和可编辑管线。

固定管线又叫存储着色器,它的内部已经固化了一套完整的渲染流程,因此不需要也不允许你自己去定义顶点渲染和像素渲染的具体逻辑,只需要调用相关的API就可以实现功能。

可编辑管线则必须由开发者自行实现渲染流程,否则无法绘制出最终的画面。开发者可以根据自己的具体需要来编写顶点渲染和像素渲染中的具体逻辑,可最大程度的简化渲染管线的逻辑以提高渲染效率。当然也不是管线中的每一步流程都可以自定义实现,直到OpenGLES 3.0,依然只支持顶点着⾊器和⽚源着⾊器这两个最基础的着⾊器这两步的自定义。

着色器程序shader

着色器是OpenGL的灵魂,它可以控制GPU来运算,常见的着色器主要有顶点着色器(VertexShader),片源着色器 (FragmentShader),几何着⾊器 (GeometryShader),曲面细分着⾊器(TessellationShader)。直到 OpenGLES 3.0,依然只支持顶点着⾊器和⽚源着⾊器这两个最基础的着⾊器,所以,开发中,我们只会用到顶点着色器和片源着色器。

OpenGL在处理shader时,和其他编译器⼀样。通过编译、链接等步骤,⽣成了着⾊器程序(glProgram),着⾊器程序同时包含了顶点着⾊器和⽚段着⾊器的运算逻辑。在OpenGL进⾏绘制的时候,⾸先由顶点着⾊器对传⼊的顶点数据进⾏运算。再通过图元装配,将顶点转换为图元。然后进⾏光栅化,将图元这种⽮量图形,转换为栅格化数据。最后,将栅格化数据传⼊⽚段着⾊器中进⾏运算。⽚段着⾊器会对栅格化数据中的每⼀个像素进⾏运算,并决定像素的颜⾊。

顶点着⾊器:OpenGL中⽤于计算顶点属性的程序,当顶点要进行旋转、平移、投影等变换操作时,就需要顶点着色器来处理。

片元着色器:OpenGL中⽤于计算⽚段(像素)颜⾊的程序,对图形中每个像素进行计算与填充。

GLSL(OpenGL Shading Language) 

OpenGL的着色语言,是用来着色编程的语言。即对顶点着色器和片源着色器的代码编写。

光栅化Rasterization

是把顶点数据转换为⽚元的过程,在顶点着色器和片源着色器中间执行,具有将图转化为⼀个个栅格组成的图象的作⽤,也可以理解为是⼀种将⼏何图元变为⼆维图像的过程。

纹理

纹理可以理解为图⽚。大家在渲染图形时需要在其编码填充图片,为了使得场景更加逼真。⽽这里使⽤的图片,就是常说的纹理。但是在OpenGL,我们更加习惯叫纹理,而不是图片。

混合

在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜色进行混合,混合的算法可以通过OpenGL的函数进行指定。常用的混合方程式为Cf=(Cs*S)+(Cd*D),其中,Cf是最终计算产生的颜色,Cs是源颜色,Cd则是目标颜色,S和D分别是源和目标混合因子。

变换矩阵(Transformation)

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

投影矩阵Projection

⽤于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进⾏绘制。

渲染上屏/交换缓冲器

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343