【问题标题】:How to create multiple PointSprites in different states?如何创建多个不同状态的PointSprite?
【发布时间】:2013-11-15 11:38:33
【问题描述】:

我正在使用 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 副本,这是如何实现的?

希望你能帮忙。

【问题讨论】:

    标签: opengl opengl-es glsl processing glsles


    【解决方案1】:

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

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

    1: glUseProgram(你的程序);

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

    3: ..绘制第一个对象

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

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

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

    【讨论】:

    • 谢谢 - 我已经开始运行了,很简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2019-03-01
    相关资源
    最近更新 更多