OpenGL--基础知识(1)

1.基础渲染管线

在OpenGL中,最基础的元素就是点,一些点组合在一起,按照预定的方式连线,另外加上光照、贴图、颜色等就组成了我们在屏幕上所看到的图形图像。例如,一个顶点的基础就是一个点,只是这个顶点包含位置、颜色等属性;一个三角形的基础就是三个点,按照预定的方式进行连线。我们来看一个大致的渲染流程图(摘自OpenGL SuperBible):
在这里插入图片描述

这是一个简化版本,我们可以看到,渲染管线把三个顶点输入顶点着色器中,新手暂时不用管顶点着色器是什么,只需要知道这是一个类似方法(函数)的东西,输入3个顶点及其附带的属性,输出一个连线的三角形。它也可以应用颜色,一个或多个纹理,并移动它们,这条管道也是可编程的,可以编写两个由图形硬件执行的程序来处理顶点数据并填充屏幕上的像素(称为片段着色器,实际上每个像素可以有多个片段)

2.Shaders

上图中最大的两个框框中的处理,VertexShader(顶点着色器) FragmentShader(片元着色器)

VertexShader(顶点着色器)

顶点着色器处理来自Client(客户端)的传入数据,顶点着色器将位置信息进行转换,如应用数学运算来计算光照效果、位移、颜色值等等。要呈现一个有三个顶点的三角形,顶点着色器要执行三次,每个顶点执行一次,不过现在的硬件,有多个单元可以同时计算,三个顶点可以同时被处理

FragmentShader(片元着色器)

经过顶点着色器以后,现在可以对三个顶点进行光栅化。将这三个顶点放在一起,然后将三角形逐段栅格化。通过执行片段着色器填充每个片段,它输出我们将在屏幕上看到的最终颜色值。今天的硬件是大规模并行的,很有可能有多个这样的片段程序可以同时执行。


当然,想要见证奇迹发生,我们必须向这些着色器提供一些数据。我们有三种方式将数据传递给OpenGL着色器进行呈现:Attributes、Uniforms、Texture

Attributes

Attributes用于经常改变的数据,只可用于顶点着色器,例如,顶点位置本质上是顶点的一个位置属性。属性变量可以是float int boolean数据,经常存储为一个4维向量。但是我们也能用3维甚至是2维。例如,一个顶点位置大部分都是3维向量,即x,y,z,OpenGL设置一个第四维W,为1。例如,当我们在一个2d平面上显示位置时,活忽略z轴,或者设置为0,第四维变量会设置成1。当我们只传送一个数据时,y,z都会设置为0,w设置为1。除了空间中的位置外,每个顶点还可能发生的其他变化包括纹理座标、颜色值和用于照明计算的表面法线等等

Uniforms

Uniforms用于不经常更改的信息,用于顶点着色器和片元着色器。通常在发送渲染指令之前发送uniform变量。我们可以设置应用于整个表面的单个颜色值,也可以设置一个时间值,以执行某种类型的顶点动画(请注意,均匀的更改是每批一次,而不是这里的每一个顶点一次),最常见的用途就是设置转换矩阵。

Texture

纹理值可以从顶点和片段着色器中采样和过滤。片段着色器通常对纹理进行采样,以便在三角形的表面应用图像数据。大多数图像文件格式以无符号字节值(每个颜色通道8个字节)存储颜色。

Outs

out变量声明为一个着色器阶段的输出,并在随后的着色器阶段声明为in即作为随后着色器的输入。Client不能访问这些内部变量,而是在顶点和片段着色器(可能还有可选的几何着色器)中声明它们。顶点着色器为out变量分配一个值,该值是常量,或者可以在光栅化时在顶点之间插入。在同名变量中对应的fragment着色器接收此常量。

3.座标系统

在3D图形中,我们经常用的两种投影方式就是正交投影和透视投影。这些投影方式,或者说座标系的类型,实际上只是一个特殊形成的4x4变换矩阵。在计算机三维图像中,投影可以看作是一种将三维座标变换为二维座标的方法。简单地说,我们需要这些类型之一的投影矩阵在适当的座标系中呈现几何图形。如果不使用这些矩阵中的任何一个,将得到一个默认的正交投影,其中轴的范围仅为-1.0到1.0。

Orthographic Projections (正交投影)

通常,我们经常在2D中用正交投影,保持z轴为0。当然,z轴可以扩展到我们想要的任何长度。下图显示了一个在所有三个方向上从-100延伸到+100的正投影示例。这个投影包含所有的几何图形,如果我们在视野外查看指定几何形状,则会对其进行剪切,这意味着它实际上是沿着视野的边界进行剪切的。在正交投影中,落在这个空间内的所有东西都显示在屏幕上,没有相机或眼睛座标系的概念。正交投影多用于建模等,投影不会改变其模型大小。

Perspective Projections(透视投影)

透视投影是为了获得接近真实三维物体的视觉效果而在二维的纸或者画布平面上绘图或者渲染的一种方法。它具有消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。透视投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。
在这里插入图片描述

基本的透视投影模型由视点Observer、near近平面和far远平面(远平面可以是无限远,在这里我们设定一个值便于理解),三部分构成(要求Observer不在near上),称为视椎体。Observer可以认为是观察者的位置,也是观察三维世界的角度。near近平面一般被认为渲染三维对象透视图的二维平面。对于世界即near和far之间中的任一点X,构造一条起点为Observer并经过X点的射线R,R与平面near的交点Xp即是X点的透视投影结果。三维世界的物体可以看作是由点集合{Xi} 构成的,这样依次构造起点为Observer,并经过点Xi的射线Ri,这些射线与视平面fnear的交点集合便是三维世界在当前视点的透视图。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章