考虑标准的opengl 4.0+功能和规范;我已经看到可以通过两种方式创建几何形状和形状:
利用 VAO & VBO s。
使用着色器程序。
哪一种是创建形状的标准方法?它们彼此一致吗?或者它们是创建几何和形状的两种不同方式?
VAO 和 VBO 如何绘制几何图形(指定每个顶点数据)。着色器程序是关于如何绘制它们(哪个程序被应用到每个提供的顶点、每个片段等等)。
几何图形通过 VAO 和 VBO 加载到 GPU 中。
几何着色器根据上载生成新几何。使用它们以更有效的方式制作粒子、阴影( Shadow Volumes )等特殊效果。
我强烈(非常强烈)建议您阅读此http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/
让我们列出全部事实。
着色器需要输入。如果没有更改的输入,每次着色器调用都将产生完全相同的值。这就是着色器的工作方式。当您发出绘图调用时,会启动许多着色器调用。在此绘制调用中,唯一会在调用之间发生变化的变量是in
变量。因此,除非您使用某种输入,否则每个着色器都会产生相同的输出。
然而,这并不意味着你绝对需要一个实际包含东西的 VAO。使用没有启用任何属性的 VAO 进行渲染是完全合法的(尽管有些驱动程序不支持它)(尽管您必须使用数组渲染,而不是索引渲染)。在这种情况下,顶点着色器的所有用户定义输入(如果有的话)都将使用上下文状态填充,这将是常量。
顶点着色器确实具有系统生成的其他一些内置的逐顶点输入。即 gl_VertexID。这是 OpenGL 用来唯一标识这个特定顶点的索引。每个顶点都会有所不同。
因此,例如,您可以通过统一缓冲区、缓冲区纹理或其他机制根据该索引自行获取几何数据。或者,您可以根据索引以程序方式生成顶点数据。或者是其他东西。您可以将该数据传递给细分着色器,以便他们细分生成的数据。或者几何着色器来做任何你想做的事情。但是,您想将该索引转换为真实数据取决于您。
我已经看到可以通过两种方式创建几何形状和形状:
都不是。在现代 OpenGL-4 中,您需要数据和程序。
VBO 和 VAO 确实包含原始几何数据。着色器是将原始数据转换为屏幕上像素的程序(通常在 GPU 上执行)。
顶点着色器可用于置换顶点,或从内置公式和顶点索引生成顶点,后者在以后的 open gl 版本中可作为内置属性使用。
顶点着色器和几何着色器之间的区别在于,顶点着色器是 1:1 映射,而几何着色器可以创建更多顶点——可用于自动细节级别生成,例如 NURBS 或基于柏林噪声的地形等。