OpenGL学习(一)-- 术语了解

个人 OpenGL 专题学习目录,但愿和你们一块儿学习交流进步!缓存


在学习 OpenGL 以前,咱们先来了解一下涉及到的一些术语名词。app

一、渲染

将数学和图形数据转换成 3D 空间图像的操做叫作渲染(Rendering)。当这个术语做为动词使用时,指的是计算机建立三维图像时所经历的过程。它也做为名词使用,指的仅仅是最终的图像做品。函数

二、变换(Transformation)和投影(Projection)

变换和投影.png
如上图显示的是用线条绘制的一个放置在一个平面上的立方体。

  • 变换: 经过 变换(Transformation),或者说旋转这些点,并在他们之间绘制线段,咱们就能在平面的 2D 屏幕上创造出一个 3D 世界的错觉。
  • 顶点: 这些点自己叫作 顶点(Vertices,单数为 Vertex),他们能经过一种称为 变换矩阵(Transformation Matrix) 的数学结构进行旋转。 另外还有一种矩阵叫 投影矩阵(Projection Matrix),用于将 3D 坐标转换成二维屏幕坐标,实际的线条也将在二维屏幕坐标上进行绘制。
  • 投影(Projection): 用于建立几何图形的3D坐标将投影到一个2D表面(窗口背景)。
  • 正投影(Orthographic Projection)或平行投影: 物体在屏幕上的大小和实际大小相同,不论是远仍是近。
  • 透视投影(Perspective Projection):远处的物体看上去比近处的物体更小一些,在模拟和3D动画中,这种投影可以得到最大程度的逼真感。

三、顶点、片元、图元和光栅化

过程:顶点—> 图元 —> 片元—> 像素

顶点—> 图元:

几何顶点被组合为图元(点,线段或多边形),而后图元被合成片元,最后片元被转换为帧缓存中的象素数据。post

图元 —> 片元:

图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应做出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。学习

  • 1) 裁剪
  • 2) 转换到窗口坐标
  • 3) 光栅化

光栅化 是将一个图元转变为一个二维图象(其实只是布满平面,没有真正的替换帧缓存区)的过程。二维图象上每一个点都包含了颜色、深度和纹理数据。将该点和相关信息叫作一个 片元(fragment)。(这就是片元和像素之间的关键区别,虽然二者的直观印象都是的像素,可是片元比像素多了许多信息,在光栅化中纹理映射以后图元信息转化为了像素)测试

片元—> 像素:

  • 1)象素全部权(ownership)检测
  • 2)裁剪检测
  • 3)Alpha 检测
  • 4)模版检测
  • 5)深度检测
  • 6)融合
  • 7)抖动
  • 8)逻辑操做

剪裁投影光栅化.png

着色: 沿着顶点之间改变颜⾊色值,可以轻松建立光照照射到一个立方体的效果。着色器(Shader) 则是在图形硬件上执行的单独程序,用来处理顶点和执行光栅化任务。动画

纹理贴图(Texture Mapping): 将纹理理图⽚片附着到你绘图的图像上。一个纹理就是一副用来贴到三角形或多边形上的图片。code

混合(Blending): 颜⾊色混合效果。orm

四、状态机

状态机 就是一种存在于理论中的机器,它具备如下的特色:cdn

  1. 它有记忆的能力,可以记住本身当前的状态。
  2. 它能够接收输入,根据输入的内容和本身的状态,修改本身的状态,而且能够获得输出。
  3. 当它进入某个特殊的状态(停机状态)的时候,它再也不接收输入,中止工做。

理论提及来很抽象,但其实是很好理解的。 首先,从本质上讲,咱们如今的 电脑 就是典型的状态机。能够对照理解:

  1. 电脑的存储器(内存、硬盘等等),能够记住电脑本身当前的状态(当前安装在电脑中的软件、保存在电脑中的数据,其实都是二进制的值,都属于当前的状态)。
  2. 电脑的输入设备接收输入(键盘输入、鼠标输入、文件输入),根据输入的内容和本身的状态(主要指能够运行的程序代码),修改本身的状态(修改内存中的值),而且能够获得输出(将结果显示到屏幕)。
  3. 当它进入某个特殊的状态(关机状态)的时候,它再也不接收输入,中止工做。

OpenGL 也能够当作这样的一种机器。让咱们先对照理解一下:

  1. OpenGL 能够记录本身的状态(好比:当前所使用的颜色、是否开启了混合功能,等等,这些都是要记录的)
  2. OpenGL 能够接收输入(当咱们调用 OpenGL 函数的时候,实际上能够当作 OpenGL 在接收咱们的输入),根据输入的内容和本身的状态,修改本身的状态,而且能够获得输出(好比咱们调用 glColor3f,则 OpenGL 接收到这个输入后会修改本身的“当前颜色”这个状态;咱们调用 glRectf,则 OpenGL 会输出一个矩形)
  3. OpenGL 能够进入中止状态,再也不接收输入。这个可能在咱们的程序中表现得不太明显,不过在程序退出前,OpenGL 总会先中止工做的。

简单总结就是:OpenGL 是一个 状态机,它保持自身的状态,除非用户输入一条命令让它改变状态。

转载请备注原文出处,不得用于商业传播——凡几多

相关文章
相关标签/搜索