4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

three.js「GLSL Sandboxのシェーダ使いたくね?」

Posted at

事の経緯

  1. AR.js+three.jsで動く名刺を作っていました
  2. ぼく「ちょっとGLSL完全に理解したしこれ名刺のやつに組み込みたくね?」

やってみた

GLSL Sandboxでそれなりに動くシェーダを用意し,
バーテックスシェーダを各所を参考にしながら書き,
なんとなくシェーダは別ファイルで置いときたかったので先人の知恵を使ってセットアップ…

となんやかんやで動きはしました. 動きは…

ぼく「なんかおかしくね?」

上の動画をよくよく見ていただければ分かると思うんですが,シェーダの向きがが名刺の上に出してる板ポリの向きに合ってません.常にカメラの向きに投影されている状態になってます.

20190701_145445.png

まぁ動いてはいるし楽しいので別にいいんですが,気持ちよくないので解決策を探しました.

解決策

結論としては,フラグメントシェーダ内での座標のとり方が問題になってました.
やることはただ一つだけです.

gl_FragCoord.xyUV座標.xy * resolution.xyに書き換える

以上です.three.jsの場合,UV座標はvaryingとしてバーテックスシェーダから渡してくる必要がありますが,上の処理をするだけで下のように想定通りポリゴン上にシェーダを投影してくれます.

しかしthree.jsも資料は十分あるはずなのになぜ詰まったのか… ちなみにこのワークアラウンドはShadertoyの作品をthree.jsに移植する記事を見て気づきました(mainImageの引数で上の計算をしていたため). GLSL Sandboxの場合,作者がthree.jsと同じなのでuniformとかゴニョゴニョせずすんなり移植できるのが良いですね.

おまけ

AR名刺のソースコードがこちら
https://github.com/Kurogoma4D/bizcard

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?