不绘制部分模型的最佳方法

时间:2014-06-03 13:03:38

标签: opengl

我使用VAOs和着色器在屏幕上绘制对象。现在我面临的情况是,我必须隐藏预先创建的缓冲区的某些部分。

例如,我在floats中有6分(3 x 6 = 18 VBO)且ID = 1;例如,每3个点代表一个三角形并共享相同的ID。

要点:

1, 2, 3,     // 
4, 5, 6,     // This 9 floats share common ID = 1
7, 8, 9,     // 

10, 11, 12,  //
13, 14, 15,  // ... and this floats have ID = 2
16, 17, 18   //

现在我必须用ID = 2隐藏所有点。但我不想重新填充VBO。这是耗时的操作。

我正在考虑不仅将点位置推入缓冲区,还将其ID推入缓冲区。然后,在片段着色器中,通过其ID丢弃指定的点。据我所知,它可以通过传递ID作为顶点属性指针来完成,但我不知道如何在代码中实现它。

请提供一些如何隐藏VBO部分内容的建议。 (如果可能,提供少量样品)。

1 个答案:

答案 0 :(得分:1)

如果你想要隐藏的部分是已知的,那么你可以创建一个索引缓冲区并将你想要隐藏的部分的索引放在元素缓冲区的末尾,并且只绘制更少的点:

数组缓冲区:

1.0, 2.0, 3.0,  // ID = 1
4.0, 5.0, 6.0,  // ID = 2
7.0, 8.0, 9.0   // ID = 3

元素缓冲区:

1,3,2

然后当你想要隐藏第2点时,你只能绘制2个元素而不是通常的3个