【问题标题】:Drawing geometry in opengl在opengl中绘制几何图形
【发布时间】:2012-11-19 08:18:04
【问题描述】:

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

  1. 利用 VAO 和 VBO s.

  2. 使用着色器程序。

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

【问题讨论】:

  • 几何着色器可用于修改硬件上的几何图形(例如level of detail),但它们仍需要输入数据才能使用。

标签: c++ opengl graphics 3d


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答和参考,到目前为止,我已经使用着色器来创建形状,所以您的意思是真正的交易是 VAO 和 VBO?到目前为止,我已经使用着色器创建了形状,这些形状是某种虚拟模拟形状吗??
  • 如果您在阅读几何着色器之前不考虑使用它们会更好。如果您需要在屏幕上绘制一些东西 - 只需上传并绘制它该死的 :) 但对于您的问题:几何图形是由存储在 GPU 内存中并注入 GPU 管道的几何着色器生成的。主要优点是您可以通过 GPU 内核以并行方式立即生成大量几何图形,并且不需要将大量数据上传到 GPU(PC 总线是瓶颈)
  • @BulBul “到目前为止,我已经使用着色器来创建形状” - 不,你没有,相信我。您所做的是使用着色器从 VAO 和 VBO 绘制几何图形,这不是唯一的,您始终需要 VAO 和 VBO 来上传任何几何图形,无论您是否使用任何着色器更改此几何图形。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    让我们列出全部事实。

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

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

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

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

    Here's an example from my tutorial series that generates vertex data from nothing more than an index.

    【讨论】:

      【解决方案4】:

      我发现几何和形状可以通过两种方式创建:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-02
          相关资源
          最近更新 更多