在opengl中绘制几何图形

Drawing geometry in opengl

本文关键字:几何图形 绘制 opengl      更新时间:2023-10-16

采用标准的opengl 4.0+函数&考虑规范;我已经看到几何图形和形状可以通过两种方式创建:

  1. 利用VAO&VBO s.

  2. 使用着色器程序。

哪种是创建形状的标准方法??它们彼此一致吗?或者它们是创建几何体和形状的两种不同方式?

使用VAO&VBO。

  • 几何体着色器基于上载的几何体生成新的几何体。使用它们可以更有效地制作粒子、阴影(阴影体积)等特殊效果。

  • 镶嵌着色器用于细分几何体以获得某些效果,如置换贴图。

我强烈(非常强烈)建议你阅读这篇文章http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/

VAO和VBO如何绘制几何体(指定逐顶点数据)。着色器程序是关于如何绘制它们(哪个程序应用于提供的每个顶点、每个片段等等)。

让我们列出全部事实。

着色器需要输入。如果没有更改的输入,每个着色器调用都将产生完全相同的值。着色器就是这样工作的。发出绘制调用时,会启动多个着色器调用。在这个draw调用中,只有的变量会从一个调用更改为另一个调用,它们是in变量。因此,除非使用某种类型的输入,否则每个着色器都将产生相同的输出。

然而,这并不意味着你绝对需要一个真正包含东西的VAO。使用没有启用任何属性的VAO进行渲染是完全合法的(尽管有些驱动程序不支持)(尽管必须使用数组渲染,而不是索引渲染)。在这种情况下,顶点着色器的所有用户定义输入(如果有)都将填充上下文状态,该状态将是恒定的。

顶点着色器确实有一些其他由系统生成的内置逐顶点输入。即gl_VertexID。这是OpenGL用来唯一标识该特定顶点的索引。每个顶点都会有所不同。

因此,例如,您可以通过统一缓冲区、缓冲区纹理或其他机制,根据该索引自行获取几何体数据。或者,您可以根据索引按程序生成顶点数据。或者其他什么。可以将该数据传递给镶嵌着色器,以便它们镶嵌生成的数据。或者使用几何体着色器对其执行任意操作。然而,你想把索引变成真实的数据取决于你自己。

下面是我的系列教程中的一个示例,它只通过索引生成顶点数据。

我已经看到几何图形和形状可以通过两种方式创建:

两者都不是。在现代OpenGL-4中,您需要数据和程序。

VBO和VAO确实包含原始几何图形数据。着色器是将原始数据转换为屏幕上像素的程序(通常在GPU上执行)。

顶点着色器可用于置换顶点,或从内置公式和顶点索引生成顶点,后者在以后的开放gl版本中作为内置属性可用。

顶点着色器和几何体着色器之间的区别在于,顶点着色器是1:1映射,而几何体着色器可以创建更多的顶点——可以用于自动生成细节级别,例如NURBS或基于perlin噪声的地形等。