OpenGL ES -顶点着色器

顶点着色器输入包括:

  • 着色器程序 - 描述顶点上执行操作的顶点着色器源代码和可执行文件
  • 顶点着色器输入 - 顶点数组数据
  • 统一变量 - 着色器使用的不变的数据
  • 采样器 - 代表顶点着色器使用纹理的特殊同一变量类型

图元是能够被OpenGL ES 绘制的几何物体,如三角形、线条或者精灵。在图元组合过程中,对每个图元必须判断是否位于投影 截体内,如果图元不完全在平截体内部,将被视图平截体剪贴,如果完全在平截体外,将被 丢弃,然后顶点位置被转变为屏幕坐标,剔除操作也能够舍弃一些图元,依据图元位于正面 还是背面,剪切和剔除后,图元进入光栅化阶段。 光栅化是转化图元为二维片段的过程,被片段着色器执行,二维的片段像素能 够被绘制在屏幕上。

OpenGL ES -顶点着色器_第1张图片
Paste_Image.png

图元

可以绘制图元的包括下面的函数:

  • glDrawArrays
  • glDrawElements
  • glDrawRangeElements
  • glDrawArraysInstanced
  • glDrawElementsInstanced

其中这些函数可以绘制三角形、直线和点精灵。

三角形

  • GL_TRIANGLES:绘制一系列单独的三角形;
  • GL_TRIANGLE_STRIP:绘制一系列相互连接的三角形;
  • GL_TRIANGLE_FAN:绘制一系列相连的三角形;

直线

  • GL_LINES:绘制一系列不相连的线段;
  • GL_LINE_STRIP:绘制一系列相连的线段;
  • GL_LINE_LOOP:同上,类似;

点精灵

支持的图元是GL_POINTS,点精灵对指定的每个顶点绘制,点精灵通常用于将粒子效果当作点而非正方形绘制,从而实现高效渲染。点精灵是指定位置和半径的屏幕对齐的正方形,位置描述正方形的中心,半径用于计算描述点精灵的正方形的4个坐标,。

区别

如果你有一个由一系列顺序元素索引描述的图元,且几何形状的顶点不共享,则glDrawArrays很好用,但是,游戏或者其他3D应用程序使用的典型对象由多个三角形网格组成,其中的元素索引可能不一定按照顺序,顶点通畅在网格的三角形之间共享。

比如画一个由2个3角形组成的正方形,左上角坐标是l,t,右下角坐标是r,b
使用glDrawArrays绘制时,画2个三角形,需要这样传:
(l,t),(r,t),(l,b)
(r,t),(r,b),(l,b)
而用glDrawElements画的话可以这样
float coord[4][2]={{l,t},{r,t},{r,b},{l,b}};
绘制时:
0,1,3
1,2,3

glDrawArrays传输或指定的数据是最终的真实数据,在绘制时效能更好
而glDrawElements指定的是真实数据的调用索引,在内存/显存占用上更节省

你可能感兴趣的:(OpenGL ES -顶点着色器)