1

我正在使用GLCameraRipple 示例 在静态图像上产生涟漪,我使用 glTexImage2D 加载该静态图像。

我使用自己的着色器,因为示例中的着色器用于从视频源中获取图像。

它响应触摸并在触摸位置上产生涟漪。

它工作正常,但是当波纹动画完成时,出于电池保护的原因,我需要它来暂停绘图。在 Apple 的这个示例中,我看不到如何检查此状态。GLKView 或 GLKViewController 没有任何委托方法。

它使用了一个 -runSimulation 方法,该方法在我的 GLKViewController 的每个 -update 中调用,它可以完成所有的魔法,但我仍然看不到在哪里可以检查涟漪是否已完成动画,甚至无法将初始状态与状态进行比较到处都是涟漪。

我目前正在计算自己最多需要多少时间来完成波纹动画,直到我们再次看到静态图像并且我已将其设置为在此秒数后暂停并在发生触摸事件时再次取消暂停,但是感觉完全不对。(动画持续时间在较大的屏幕上(例如在 iPad 上)会有所不同,并且可能会根据池大小、网格因子、触摸半径等而有所不同。)

我希望有一种方法可以检查视图的内容是否不同于初始状态(当我刚刚加载图像时)并知道波纹动画是否播放完毕?

4

1 回答 1

1

根据要求,我将我的评论转换为答案,以便可以关闭问题。

GLCameraRipple 示例使用名为 的内部数组计算图像中纹理坐标的位移rippleTexCoords。该数组-runSimulation在每一帧的方法中更新,这就是导致涟漪传播的原因。

如果您观察该数组的值的变化,您可以确定波纹在某个阈值以下消退的点。然后,您可以将其用作暂停正在进行的模拟的时间。

于 2012-09-17T16:55:48.030 回答