2012-09-17 34 views
1

我正在使用GLCameraRipple example在我用glTexImage2D加載的靜態圖像上產生漣漪。如何知道GLCameraRipple示例中的漣漪何時停止?

我使用自己的着色器,因爲這些示例中的着色器用於從視頻饋送中獲取圖像。

它響應觸摸並在觸摸位置產生漣漪。

它工作正常,但我需要它暫停繪圖,出於電池保存原因,當波紋動畫完成時。在這個來自Apple的例子中,我沒有看到任何地方我可以檢查這個狀態。 GLKView或GLKViewController對此沒有任何委託方法。

它使用了一個在我的GLKViewController的每一個更新中調用的-runSimulation方法,它完成了所有的魔法,但是我仍然沒有看到我能在哪裏檢查漣漪是否完成了動畫,甚至比較了初始狀態與漣漪遍佈的狀態。

我目前在數我自己多少時間漣漪動畫需要完成最多,直到我們看到的是一個靜態圖像,我已經設置它在這段時間後暫停,並在觸摸時再次取消暫停事件發生,但它根本感覺不對。 (在較大的屏幕上(例如在iPad上),動畫持續時間不同,並且可能因池大小,網格因子,觸摸半徑等而異)。

我希望有一種方法可以檢查視圖的內容與初始狀態不同(當我剛剛加載圖像時)並知道漣漪動畫已完成播放?

+0

我對這段代碼示例一無所知,但有一點我確信,OpenGL不會動畫任何東西:它只繪製ObjectiveC要求他畫的東西。所以必須在runSimulation()內部,而不是在OpenGL內部。 – Calvin1602

+0

粗略地看一下源代碼,可以看出,連鎖反應似乎是通過分別使用s_offset和t_offset來改變's_tc'和't_tc'來完成的。也許測試這些偏移量是否接近於零(從不使用浮點數上的相等性測試)是否會起作用? – larvyde

+0

我剛剛檢查過這個,s_tc總是1,t_tc總是0.27。只有s_offset和t_offset會變化,但它們會從-5.9747857449110597e-05的某些值不斷變化爲+ 4.1495609366393182e-06,隨機採用零關閉值(?)。它們從不停止或接近任何特定值 –

回答

1

根據要求,我將我的評論轉換爲答案,以便可以將問題關閉。

GLCameraRipple示例使用名爲rippleTexCoords的內部數組計算圖像中紋理座標的位移。該陣列在每幀上的-runSimulation方法中更新,這是導致漣漪傳播的原因。

如果你觀察這個數組的值隨着它們的變化而變化,你可以確定漣漪在某個閾值以下的位置。然後,您可以將其用作暫停正在進行的模擬的時間。