是否可以在顶点着色器中循环第二个VBO?

时间:2012-03-05 15:21:47

标签: opengl vertex-buffer vertex-shader

所以,假设我有两个顶点缓冲区。一个描述我想要绘制的实际形状,另一个能够影响第一个。

所以,我真正希望能做的是这样的事情:

uniform VBO second_one;

void main()
{
  for (int i = 0; i < size_of_array(second_one); ++i)
    Do things with second_one[i] to alter the values
  create the output informations
}

我可能想要做的事情可能是重力,即second_one中的每个点都试图将点稍微拖动一点,依此类推,然后在调整点之后,应用矩阵以获得其实际位置。 / p>

我会非常惊讶它是可能的,或者接近它的东西。但重点是要能够使用第二个VBO,或者将它作为vec3类型的制服让我说可以访问它。

1 个答案:

答案 0 :(得分:1)

对于你想要的,你有三个选择。

  1. 一系列制服。 GLSL允许您uniform vec3 stuff[50];。 GLSL中的数组采用.length()方法,因此您可以了解它们的大小。当然,你使用的制服数量是有限制的,但你不应该超过20-30个。除此之外,你会真正感受到性能消耗。
  2. Uniform buffer objects。这些可以存储比非块制服更多的数据,但它们仍然有限制。存储来自缓冲对象。但是,根据硬件的不同,对它们的访问比直接制服的访问要慢一些。
  3. Buffer textures。这是一种将缓冲区对象附加到纹理的方法。这样,您就可以从着色器中访问大量内存。但要注意:他们快速访问。如果您可以使用上述方法之一,请执行此操作。
  4. 请注意,只有能够支持GL 3.x及更高版本的硬件才能找到#2和#3。所以DX10级硬件。