照每個頂點的紋理坐標對繪制圖形中的像素點進行紋理映射,產(chǎn)生包含一幀或多幀變化圖片的動態(tài)效果。
[0109]在具體實現(xiàn)中,圖形繪制接口可以采用OpenGL,其可以提供紋理映射(TextureMapping),即是將紋理空間中的紋理像素映射到屏幕空間中的像素的過程。
[0110]通常,使用紋理映射的步驟可以如下:
[0111]第一步:定義紋理對象
[0112]const int TexNumber4 ;
[0113]GLuint mes—Texture [TexNumber] ;// 定義紋理對象數(shù)組
[0114]第二步:生成紋理對象數(shù)組
[0115]glGenTextures(TexNumber, m_Texture);
[0116]第三步:通過使用glBindTexture選擇紋理對象,來完成該紋理對象的定義。
[0117]glBindTexture(GL—TEXTURE 2D,m—Texture[O]);
[0118]glTexImage2D (GL—TEXTURE—2D,0,3,mes—Texmapl.GetWidth (),mee—Tex map 1.GetHeight(),0,GL—BGR—EXT,GL—UNSIGNED—BYTE,mse—Texmapl.Get DibBitslitrQ);
[0119]第四步:在繪制景物之前通過glBindTexture,為該景物加載相應的紋理。
[0120]glBindTexture(GLes—TEXTURE—2D,mse—Texture[0]);
[0121]第五步:在程序結束之前調用glDeleteTextures刪除紋理對象。
[0122]glDeleteTextures(TexNumber, mee_Texture)0
[0123]在一個示例中,如圖4所示,繪制圖形為三角形,其包括一個或多個像素點,其中,頂點在紋理空間中具有紋理坐標,頂點a的紋理坐標為(0.2,0.8),頂點b的紋理坐標為(0.4,0.2),頂點c的紋理坐標為(0.8,0.4),將該繪制圖形移動的頂點進行移動,使得繪制圖形發(fā)生變形,進行OpenGL紋理映射到獲對象空間,渲染出來后,繪制圖形產(chǎn)生了拉伸、壓縮等效果,特征區(qū)域就會呈現(xiàn)出移動的現(xiàn)象。
[0124]如圖5A所示,若運特征區(qū)域中的至少部分像素點的運動方向往特征區(qū)域的左側,則特征圖像中整體可以往左側扭曲;圖5B所示,若特征區(qū)域中的至少部分像素點的運動方向往特征區(qū)域的右側,則特征圖像中整體可以往右側扭曲。
[0125]通過OpenGL的紋理映射,可以將靜態(tài)圖片的特征區(qū)域中心區(qū)域附近的繪制圖形的頂點模擬彈簧的簡諧運動,使得圖片被規(guī)律的進行拉升,產(chǎn)生類似于彈力水球的抖動效果O
[0126]進一步地,若運動方向根據(jù)指定的交互操作事件確定,則特征區(qū)域中的至少部分像素點的運動方向可以沿指定的交互操作事件對應的方向(如搖晃事件的搖晃方向、指向發(fā)生屏幕點擊事件的方向)在特征區(qū)域的兩側(如左側和右側、上方和下方),則按照簡諧運動模式和/或阻尼振動模式,特征區(qū)域映射出的扭曲圖片可以沿指定的交互操作事件對應的方向來回扭曲,產(chǎn)生抖動效果,并最終靜止。
[0127]其中,根據(jù)傳感器可以判斷手機搖動的方向,靜態(tài)圖片中特征區(qū)域可以會沿著搖動方向運動,當設備左右上下劇烈搖動時,特征區(qū)域可以繞著中心旋轉以模擬猛烈搖動的動態(tài)效果。
[0128]通過判斷手指點擊屏幕的位置,特征區(qū)域中心可以沿著中心位置和點擊位置的方向進行抖動,當手指按住抖動區(qū)域內,并在屏幕上來回滑動時,特征區(qū)域中心可以跟隨手指運動的方向,產(chǎn)生被拖拽的效果,并通過微抖動算法,使得抖動區(qū)域產(chǎn)生水球被拖拽時產(chǎn)生的微微抖動的效果,增強其物理真實性。
[0129]例如,設備左右搖晃或者用戶在特征區(qū)域中左右來回滑動,使得特征區(qū)域中的至少部分像素點沿水平軸方向上做震蕩移動,特征區(qū)域中每個繪制圖形的頂點在每一個時間點移動到一個位置就會生成一個扭曲圖片,扭曲圖片逐幀播放,可以產(chǎn)生如圖5A和圖5B所示的特征區(qū)域內的圖像表現(xiàn)出左右震動的動態(tài)效果。
[0130]本發(fā)明實施例基于監(jiān)聽到指定的交互操作事件,確定靜態(tài)圖片的特征區(qū)域中的至少部分像素點的運動方向,按照預設模式對特征區(qū)域中的至少部分像素點進行紋理映射,產(chǎn)生包含一幀或多幀扭曲圖片變化的動態(tài)效果,一方面,對特征區(qū)域生成動態(tài)效果,減少了動態(tài)效果的體積,減少了傳輸時的帶寬占用,方便傳輸,另一方面,由于紋理映射效率很高,減少了生成動態(tài)效果的耗時,對于網(wǎng)絡圖片或者系統(tǒng)相冊里的圖片等均可以很快的產(chǎn)生動態(tài)效果,快速、方便地生成動態(tài)效果,實現(xiàn)了動態(tài)效果可以和用戶的交互行為的實時互動。
[0131]對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明實施例,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本發(fā)明實施例所必須的。
[0132]參照圖6,示出了根據(jù)本發(fā)明一個實施例的一種基于交互操作產(chǎn)生圖片動態(tài)效果的裝置實施例的結構框圖,具體可以包括如下模塊:
[0133]選取模塊601,適于在靜態(tài)圖片中選取特征區(qū)域;
[0134]確定模塊602,適于在監(jiān)聽到指定的交互操作事件時,根據(jù)指定的操作事件確定所述特征區(qū)域中的至少部分像素點的運動方向;
[0135]映射模塊603,適于在所述運動方向上,按照預設模式對所述特征區(qū)域中的至少部分像素點進行紋理映射,產(chǎn)生包含一幀或多幀扭曲圖片變化的動態(tài)效果。
[0136]在本發(fā)明的一種可選實施例中,所述指定的交互操作事件可以包括搖晃事件,所述確定模塊602還可以適于:
[0137]設置搖晃事件的搖晃方向為所述特征區(qū)域中的至少部分像素點的運動方向。
[0138]在本發(fā)明的一種可選實施例中,所述指定的交互操作事件可以包括屏幕點擊事件,所述確定模塊602還可以適于:
[0139]設置指向發(fā)生屏幕點擊事件的位置為所述特征區(qū)域中的至少部分像素點的運動方向。
[0140]在本發(fā)明的一種可選實施例中,所述映射模塊603還可以適于:
[0141]將所述特征區(qū)域劃分一個或多個繪制圖形;每個繪制圖形中具有多個頂點,每個頂點具有紋理坐標;
[0142]在所述運動方向上,按照預設模式在一個或多個時間點移動每個繪制圖形的頂占.V,
[0143]針對每個繪制圖形,使用圖形繪制接口按照每個頂點的紋理坐標對繪制圖形中的像素點進行紋理映射,產(chǎn)生包含一幀或多幀變化圖片的動態(tài)效果。
[0144]在本發(fā)明的一種可選實施例中,所述預設模式包括簡諧運動模式和/或阻尼振動模式;所述映射模塊603還可以適于:
[0145]在所述運動方向上,按照簡諧運動模式和/或阻尼振動模式在一個或多個時間點移動每個繪制圖形的頂點。
[0146]在本發(fā)明實施例的一種可選示例中,所述映射模塊603還可以適于:
[0147]確定每個繪制圖形的頂點的加速度;每個繪制圖形的頂點具有原始坐標;
[0148]按照所述加速度和/或預設的阻尼系數(shù),計算在一個或多個時間點內沿所述運動方向移動每個繪制圖形的頂點的移動距離;
[0149]由所述原始坐標和所述移動距離計算每個繪制圖形的頂點的目標坐標。
[0150]對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
[0151]在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構造這類系統(tǒng)所要求的結構是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
[0152]在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
[0153]類似地