0

我正在尝试使用 Processing 2.0 的着色器。作为更好地理解点着色器的简单练习,我在 Sprite 类中实现了一个系统:

  1. 我在片段着色器中将 spritesheet 设置为统一的 sampler2D。2048x 2048(12 x 12 帧 128 像素正方形)
  2. 我创建一个点。
  3. 我在顶点着色器中为该点设置了 uv 坐标。
  4. 我将顶点着色器中的 UV 坐标偏移了一个作为统一变量传入的整数,以在 spritesheet 中选择“帧”
  5. 我在应用程序中每 5 帧更新一次整数(使用模数循环和)增加 UV 偏移量。

这意味着我可以在顶点着色器中做基本的动画序列。我不知道这是否是可取的,但我怀疑它会比每次我想更改帧时在片段着色器中设置一个新的统一 sampler2D 更好。

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

希望你能帮忙。

4

1 回答 1

0

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

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

1:glUseProgram(你的程序);

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

3: ..绘制第一个对象

4:..设置新纹理(或保持与精灵相同的纹理)..为第二个对象设置 uv

5:..绘制第二个对象,依此类推

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

于 2013-11-15T11:55:42.747 回答