React Native+OpenGLで画像処理


gl-reactを使ってReactで画像処理してみます。

このプラグインはReact、React Native(Bare)、React Native(Expo)、Headlessで利用できるようです。

今回はExpo Managedの環境で使っていきますがメインの内容はGLSL(OpenGL Shading Language)なので大きな違いはないと思います。

パッケージ内でexpo-glを使っているようなのでついでに少し読んでおく。

expo 35.0.0 gl-react v3

最初のサンプル

クックブックが用意されているのでそれに従って使ってみます。

まずは警告が出なくなるまで色々追加。なぜかカメラもいるみたいです。

最初のサンプルを多少書き換えて実行。

width, heightはサンプル通り書いてもダメなのでスタイル形式で設定。

gl-react-expo <Surface>: no such width/height prop. instead you must use the style prop like for a <View>.

ちなみに100%以外の%指定してもなんか変な感じになります。

重要なのはこれを使うとGLSLが書けるようになることでしょうか。

GLSLについて

OpenGLのシェーダーを書く言語らしいけど使ったことはないはず。

ただ妙に既視感があってGoでグラフィックやるときとかUnityのシェーダーとかで似たようなものを書いたような。

Webでコード実行できるサービスがありました。

http://jp.wgld.org/js4kintro/editor/

VS Codeのプラグインでもいくつかあったけどちょこっと試したいだけならブラウザで出来るのは楽でいいですね。

画像処理・他サンプル

画像処理もしてみたいので切抜サンプルを見つつ改変してみます。

画像の参考先をローカル(lena.png)にして切抜をひし形から円に変更。

円はステップ関数の中で(uv.x-0.5)2+(uv.y-0.5)2<0.25を判定すればいいのかと思ったけどpow関数が見つからないエラー(のちに整数指定のせいだと分かった)。

distanceで距離が測れたのでそっちで中心との距離を比較した。

簡単に切り抜くことが出来ました。

他サンプルを見ると文字入れ、色の変更、ウェブカメラ、3D、シミュレーションなどかなり種類があります。

 

サンプルになかったんですが、画像処理といえばフィルタをかけたくなるのでラプラシアンフィルタを書いてみます。

uvでなく座標に直して上下左右の画素値をとってそのまま計算します。

するとViewで縦長にした分は引き延ばされずおかしくなるので上限(512.0)を超えたら黒くしておきました。

 

使い始めたばかりだけどこれまで作ったアプリの大半はこれで出来そうな気がする。

面白い使い方を考えてみつつもっと中身を勉強してみよう。


コメントを残す

メールアドレスが公開されることはありません。