破線を描くためのシェーダです。フラグメントシェーダ部分が破線処理を行っています。
-
float texfH = fract(v_TexCoord.y);
少数部分を取り出します。
-
float ptlen = pt.g + pt.b;
破線の距離を計算します(サンプルでは、黒:透明=2:1)。
-
z = pt.g / ptlen;
しきい値を計算します(0 < z < 1.0)。
-
x = clamp(texfH, y, z);
しきい値より小さい場合はtexfHの値を利用。大きい場合はしきい値を取得します。
-
if(x == texfH) return;
しきい値より小さい場合は、通常通り描画します(黒を描画)。
-
gl_FragColor.a = 0.0;
しきい値より大きい場合は、透明で描画します。
以上のような処理を行い、図7のように破線で北海道が描画されたら成功です。
まとめ
いかがでしたでしょうか。地図エンジンではシェーダを使って、地図上のさまざまな表現を実現しています。シェーダは非常に奥が深く、ちょっとした処理の違いで処理スピードが大きく異なることもあるため、日々工夫を行っています。今回の処理はその中でも基礎的な部分でしたが、シェーダに興味を持っていただけたら幸いです。また、ここまでのサンプルはGitHubにアップしましたので、ご参考にしてください。次回は、北海道だけではなく全国のデータを使った地図エンジンらしい動きに仕上げていきたいと思います。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術連載記事一覧
-
- OpenGLを使った地図描画エンジンの作り方(3)
- OpenGLを使った地図描画エンジンの作り方(2)
- OpenGLを使った地図描画エンジンの作り方(1)
- この記事の著者
-
冨川 修広(ヤフー株式会社)(トミカワ ノブヒロ(ヤフーカブシキカイシャ))
2008年ヤフー入社。地図に関するシステム全般の設計・開発を担当。フルリニューアルしたAndroid版Yahoo!地図アプリでは、プロダクトマネージャとしてプロジェクト全体を統括。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

