管线
在OpenGL下渲染图形,就会经历⼀个⼀个节点.⽽这样的操作可以理解为管线
.
固定管线:
在早期的OpenGL 版本,它封装了很多种着⾊器程序块内置的一段包含了光照、坐标变换、裁剪等等诸多功能的固定shader程序来完成,来帮助开发者来完成图形的渲染. ⽽开发者只需要传入相应的参数,就能快速完成图形的渲染.
类似于iOS开发会封装很多API,⽽我们只需要调⽤就可以实现功能.不需要关注底层实现原理。但是随着后面的业务场景越来越丰富,固定管线已经无法满足需求了,于是出现了可编程管线。
可编程管线:
顾名思义就是可以编程的管线,那么哪一些着色器是可以编程的呢?到目前为止,我们能够通过GLSL语言编程的着色器是顶点着色器
和片元着色器
。
纹理
可以理解为图片,⼤家在渲染图形时需要在其编码填充图片,为了使得场景更加逼真.而这里使用的图片,就是常说的纹理
.
混合(Blending)
在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜⾊附着上的颜色进行混合,混合的算法可以通过OpenGL的函数进行指定。
例如2个图层Layer -> 粉红⾊0.5 ,蓝⾊ 0.2 = 叠加在⼀起 = (产生了一个叠加绿色的Layer) = 颜⾊混合⾏为
变换矩阵(Transformation)
例如图形想发生平移,缩放,旋转变换.就需要使⽤变换矩阵.
投影矩阵Projection
⽤于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制
投影

正投影

又叫
平行投影
。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是

透视投影符合人们心理习惯,

二维空间:
是指仅由长度和宽度(几何学中的X轴和Y轴)两个要素所组成平面空间,只向所在的平面延伸和扩展.

三维空间:
日常生活中可指由长、宽、高(x,y,z)三个维度构成的空间.

世界坐标系 :
在一个大千世界里,为了表述多个物体间的关系引入了世界坐标系.世界坐标系始终不变,是系统的绝对坐标系,在没有建立用户坐标系之前的画面上所有点的坐标都可以在该坐标系的原点来确定各自的位置.
物体坐标系 :
为了单独的观察每个物体的行为:平移、旋转等引用了物体坐标系.物体坐标系是以物体本身而言的.每个物体都有他们独立的坐标系.例如有四个朝向东西南北的人,这里的东西南北不会因为四个人的朝向而改变既是以世界坐标系为参照,当让这四个人向前走时,四个人回朝不同的方向前进,这里的向前就就是以物体坐标系.物体坐标系又称模型坐标系
惯性坐标系 :
为了简化世界坐标系到物体坐标系的转化而产生,惯性坐标系的原点与物体坐标系重合,惯性坐标系的轴平行于世界坐标系的轴,引用惯性坐标系后,物体坐标系转换到惯性坐标系只需要旋转,惯性坐标系转换到世界坐标系只需要平移

具体流程:物体/对象坐标通过模型变换,转成世界坐标.世界坐标经过视变换,转成摄像机/观察者坐标.之后经过投影变换,转成裁剪坐标,使用透视除法,得到规范化坐标.最后进行视口变换得到屏幕坐标

1.局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标。
2.下一步是将局部坐标变换为世界空间坐标,世界空间坐标是处于一个更大的空间范围的。这些坐标相对于世界的全局原点,它们会和其它物体一起相对于世界的原点进行摆放。
3.接下来我们将世界坐标变换为观察空间坐标,使得每个坐标都是从摄像机或者说观察者的角度进行观察的。
4.坐标到达观察空间之后,我们需要将其投影到裁剪坐标。裁剪坐标会被处理至-1.0到1.0的范围内,并判断哪些顶点将会出现在屏幕上。
5.最后,我们将裁剪坐标变换为屏幕坐标,我们将使用一个叫做视口变换(Viewport Transform)的过程。视口变换将位于-1.0到1.0范围的坐标变换到由glViewport函数所定义的坐标范围内。最后变换出来的坐标将会送到光栅器,将其转化为片段。
网友评论