我正在和Brad Larson的GPUImage合作,我发现这真的太棒了。为了灵活性和易于编写,我创建了一个具有3个统一输入的自定义过滤器。我基于GPUImageBrightnessFilter.h和.m。一个制服只是一个“参数”浮点数,一个是“中心”CGPoint,如果需要的话,它将以触摸坐标进行输入,并且希望是一个时间浮点数,它是自着色器启动以来经过的时间量。我正在使用initWithFragmentShaderFromFile
来使用我自己的着色器文件。
我的“参数”和“中心”制服有效。这是时间制服不起作用,因为我不明白如何创建一个不断变化的制服(如时间)。
我的时间制服的目标似乎与SpriteKit的u_time
类似。它返回自当前着色器运行以来的秒数,您可以将其输入自定义着色器以对其进行动画处理。一个非常简单的示例用法可能是随着时间的推移循环图像的色调。随着我对GLSL的了解不断增长,我希望在此基础上更加复杂。
我不确定要发布什么代码,因为我的误解可能在很多地方,而且可能是我正在尝试做一些不可能的事情。这篇关于设置开始时间并从CACurrentMediaTime()
中减去它的帖子似乎是一个很好的起点:
Getting the time elapsed (Objective-c)
问题是我不确定如何不断更新制服以传递给我的着色器。我是否会在自定义过滤器的设置器中执行此操作?自定义setter只能执行一次吗?我是否在我的init覆盖中执行此操作?这不是只执行一次吗?我是否在我的控制器中写了一个循环,不断调用setter?这似乎是一个昂贵而混乱的解决方案。
我不是要求代码,只是建议引导我朝着正确的方向前进,或者让我从任何错误的方向引导我。
答案 0 :(得分:1)
提出问题帮助我找到解决方案并了解NSTimer。我合并了一个方法,在我自定义的GPUImageFilter子类中创建一个重复的NSTimer,它将时间统一传递给着色器。它调用一个选择器来增加我的'time'变量并将其传递给统一数组。