3

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

  1. 利用 VAO & VBO s。

  2. 使用着色器程序。

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

4

5 回答 5

4

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

于 2012-11-19T08:28:18.767 回答
4

几何图形通过 VAO 和 VBO 加载到 GPU 中。

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

于 2012-11-19T08:30:16.797 回答
3

让我们列出全部事实。

着色器需要输入。如果没有更改的输入,每次着色器调用都将产生完全相同的值。这就是着色器的工作方式。当您发出绘图调用时,会启动许多着色器调用。在此绘制调用中,唯一会在调用之间发生变化的变量in变量。因此,除非您使用某种输入,否则每个着色器都会产生相同的输出。

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

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

因此,例如,您可以通过统一缓冲区、缓冲区纹理或其他机制根据该索引自行获取几何数据。或者,您可以根据索引以程序方式生成顶点数据。或者是其他东西。您可以将该数据传递给细分着色器,以便他们细分生成的数据。或者几何着色器来做任何你想做的事情。但是,您想将该索引转换为真实数据取决于您。

这是我的教程系列中的一个示例,它仅从 index 生成顶点数据

于 2012-11-19T18:45:22.677 回答
2

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

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

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

于 2012-11-19T10:51:40.117 回答
1

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

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

于 2012-11-19T09:25:21.700 回答