TP Notes
全部
CSS
SVG
資源收集
HTML
其它
關於我
2020年12月23日 星期三
有趣的 SVG filter - feDisplacementMap
feDisplacementMap 是個很有趣的東西,可以用一張平面的圖把另一張平面的圖做扭曲變形,第一次看到時覺得非常驚豔,以往只能等美術人員畫好的圖,原來可以只靠濾鏡做到,也想不到怎麼做的,是用了什麼神奇的方法來描述整個變形,直到看到這個公式才大概理解整個做法。 參考資料:[這裡](https://drafts.fxtf.org/filter-effects/#feDisplacementMapElement)
P'(x,y) ← P( x + scale * (XC(x,y) - .5), y + scale * (YC(x,y) - .5))
先來看一個範例 灰色是本來的圖,紅框是只有紅色在左上角的濾鏡, 當座標偏移都用綠色時,因為綠色=0 所以不會偏移, 本來的 座標 (x,y) 會變成 ( x + scale * (-0.5) , y + scale * (-0.5) ) , 當切換到 R 時,(x,y) 理論上會是 ( x + scale * (0.5) , y + scale * (0.5) ) , 所以圖形往左上移動,然而實際上移動的座標並非 scale * 0.5 ,似忽和 R 的亮度值有關, 當切換到 A 時,這裡的設定是 7f ,也就是 0.5 , 於是圖形就回到原處沒有偏移
*實測結果 Firefox 會不正常
``` $mmcode(r1) ```
Channel R
Channel G
Channel A
既然知道原理,那麼就可以弄個漸層來試試效果 ``` $mmcode(r2) ```
原圖
濾鏡
加上一些計算,可以做出水波效果 ``` $mmcode(r3) ```
修改一下波的行徑方向,可以變成倒影,而這個範例卻又發現了 chrome 的 bug Firefox 是本來就看不到效果,但是倒影的圖片翻轉是正常的 Chrome 很奇怪的,圖片翻轉居然沒效......花了一些時間測試,在 svg 外層包一個 div 並旋轉 0.001 度好像可以解決這個 bug , 但是在某些情況下又不行...... ```
. . .
``` Safari 正常 ``` $mmcode(r6) ```
如果看不到水波和倒影,那麼可能你用的瀏覽器是 Firefox ,自從開始玩 SVG 後就常常發現這些瀏覽器有不少東西不支援或者支援一半。 Firefox 並不是不支援 feDisplacementMap 而是無法以及時畫的圖給濾鏡使用,以下範例用的是 feTurbulence 產生的圖,在所有瀏覽器都支援 ``` $mmcode(r5) ```
沒有留言:
張貼留言
‹
›
首頁
查看網路版
沒有留言:
張貼留言