【问题标题】:Attribute divisor without instancing?没有实例化的属性除数?
【发布时间】:2013-03-18 00:12:11
【问题描述】:

我知道glVertexAttribDivisor 可用于修改通用顶点属性在实例化渲染期间推进的速率,但我想知道是否有任何方法可以在不实例化的情况下以特定速率推进属性。

这是我的意思的一个例子:

假设您正在定义组成一系列线的顶点位置列表,并且您希望与每条线关联一个 ID。因此,您创建了两个 vbo,每个 vbo 都包含与这些属性之一相关的数据(所有顶点位置或所有顶点 ID)。传统上,这意味着每个 vbo 必须是行数 X 2 的大小(以元素为单位)(因为每个点包含两条线)。这当然意味着我为一行中的每个点复制相同的 ID 值。

我想要做的是指定 ID 为顶点位置缓冲区每 2 个元素前移 1 个元素。我知道这需要首先声明我的顶点位置缓冲区(以便我可以引用它来告诉 OpenGL 多久推进一次 ID 缓冲区),但它似乎仍然是可能的。但是,我在 OpenGL 规范中找不到任何允许这种操作的函数。

【问题讨论】:

    标签: c++ opengl opengl-3


    【解决方案1】:

    您想要的东西在 OpenGL 中通常是不可能的。它实际上是 multi-indexed rendering 的一种受限形式,因此您必须使用其中一种技术来获取它。

    【讨论】:

    • 在这种情况下是否可以使用glMultiDrawArraysIndirect()一次绘制一条线,在ID VBO上使用属性除数1并使用间接命令结构的baseIndex部分来递增ID VBO 中每次绘制的索引?这可能会在 GPU 内存中填充更多数据,但理论上是可能的?
    • 它适用于特定情况,但不适用于一般
    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 2012-10-07
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2014-04-05
    • 2014-03-14
    相关资源
    最近更新 更多