9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

曇った窓に指☝で描く表現を実装してみた

Last updated at Posted at 2018-12-22

室外との気温差や、湿度によって、窓ガラスが曇っていることがありますよね。
そんな曇った窓に、指で文字/絵を描いたことがある人は多いと思います。
楽しいようであり、どこか儚さもあり。
ogp_window.jpg
それをWebアプリケーションとしてJavaScriptで実装してみました。

※前回投稿した「スマホで砂に絵を描けるWebサービスをWebGLで作ってみた」の別バージョンです。

先に今回の完成品

movie3.gif

前回同様、タッチイベントに対応しているので、スマホ・タブレット等でアクセスすれば、指で窓に描くことができます
また描いた絵は、サイトにアップロードしたり、ツイートできるようにしています。

👇から試せます
Pittura
※元々heroku上で動かしていましたが、Github Pagesに載せ替えて動かしています。
 アップロードやツイート等の機能はすべて外しています。
https://negi141.github.io/pittura-demo/

Canvas上のタッチイベント処理

タッチイベント処理等は、前回と同様なので、そちらをご参照ください。

曇った窓の表現について

↓は実写ですが、これを目指して行きたいと思います。
ogp_window.jpg
よくよくこの写真を観察してみると、
①描かれる前
・・・背景が曇りによってボカされ、また白っぽくなっている。
窓の外側に水滴が付いている。

②描かれた後
・・・背景はクリア。窓の外側に水滴がついている。

この2つは、水滴が垂れたり、背景が動いたりしない限りは変わらないので、
2つの画像をあらかじめ画像加工ソフト等で用意します。
▼オリジナル画像
w3.jpg

▼①描かれる前
ぼかした背景+明るさ+水滴
w2.jpg

▼②描かれた後
クリアな背景+水滴
w.jpg

実装

画像ができたら、次に①をテクスチャにしたメッシュを配置します。
その後ろに②をテクスチャにしたメッシュを配置します。

タッチによる軌跡は前回バンプマップを作った要領で画面上には表示していないバッファに、白黒画像として残していきます。

この白黒画像を、①のアルファマップとして適用して透過させることで、後ろから②が出てきて、窓ガラスらしくなります。

[①描かれる前]のマテリアル(Three.js)
   // materialBlur = ①描かれる前 のマテリアル
   materialBlur = new THREE.MeshPhongMaterial( { 
       specular: 0x000000, shininess: 0, overdraw: 0.5,
       // textureBlur = ①描かれる前 のテクスチャ
       map: textureBlur,
       // textureAlpha = タッチによる軌跡を残したテクスチャ
       // これをアルファマップとして読み込む
       alphaMap: textureAlpha,
       transparent: true, depthTest: false } );

   meshBlur = new THREE.Mesh( geometryBlur, materialBlur );        
   group.add( meshBlur );

▼完成品
movie4.gif

https://pittura.herokuapp.com で試せますので、是非スマホでアクセスしてみてください!
※herokuの無料枠なためアクセス時に10秒程度待ちます。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?