如何在不同的状态下创建多个PointSprit?

时间:2013-11-15 11:38:33

标签: opengl opengl-es glsl processing glsles

我正在尝试使用Processing 2.0的Shaders。 作为理解Point Shaders的一个简单的例外,我已经在Sprite类中实现了一个系统:

  1. 我在片段着色器中将spritesheet设置为均匀sampler2D。 2048x 2048(12 x 12帧,128像素正方形)
  2. 我创造了一个观点。
  3. 我在顶点着色器中为该点设置了uv坐标。
  4. 我将顶点着色器中的UV坐标偏移为作为统一变量传入的整数,以选择spritesheet中的“frames”
  5. 我更新整数(使用模数循环)并在应用程序中每5帧递增UV偏移量。
  6. 这意味着我可以在顶点着色器中执行基本的动画序列。我不知道这是否可取,但我怀疑它会比每次我想更改帧时在片段着色器中设置一个新的统一sampler2D更好。

    我的问题是 - 如何在多个实例中使用此着色器?如果我想同时在屏幕上显示两个Sprite,每个Sprite都有不同的值(即播放不同的动画帧),如果每个Sprite都有自己的pointShader,那么如何在内存中拥有统一的Sampler2D副本?

    希望你能提供帮助。

1 个答案:

答案 0 :(得分:0)

是的,这种方法比每帧设置新纹理要好得多。

要绘制多个精灵,只需使用相同的程序,并使用不同的制服逐个绘制对象:

1:glUseProgram(yourprogram);

2:..设置第一个对象的纹理和uv

3:..第一个对象

4:..设置新纹理(或保持相同的纹理是精灵有) ..设置第二个对象的紫外线

5:..第二个对象等等

编辑:程序不受您设置的制服的约束,您可以随时更改并再次调用绘图。