SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術

OpenGLを使った地図描画エンジンの作り方(3)

スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術 番外編

 破線を描くためのシェーダです。フラグメントシェーダ部分が破線処理を行っています。

  1. float texfH = fract(v_TexCoord.y);
    少数部分を取り出します。
     
  2. float ptlen = pt.g + pt.b;
    破線の距離を計算します(サンプルでは、黒:透明=2:1)。
     
  3. z = pt.g / ptlen;
    しきい値を計算します(0 < z < 1.0)。
     
  4. x = clamp(texfH, y, z);
    しきい値より小さい場合はtexfHの値を利用。大きい場合はしきい値を取得します。
     
  5. if(x == texfH) return;
    しきい値より小さい場合は、通常通り描画します(黒を描画)。
     
  6. gl_FragColor.a = 0.0;
    しきい値より大きい場合は、透明で描画します。

 以上のような処理を行い、図7のように破線で北海道が描画されたら成功です。

図7(破線で描かれた北海道)
図7(破線で描かれた北海道)

まとめ

 いかがでしたでしょうか。地図エンジンではシェーダを使って、地図上のさまざまな表現を実現しています。シェーダは非常に奥が深く、ちょっとした処理の違いで処理スピードが大きく異なることもあるため、日々工夫を行っています。今回の処理はその中でも基礎的な部分でしたが、シェーダに興味を持っていただけたら幸いです。また、ここまでのサンプルはGitHubにアップしましたので、ご参考にしてください。次回は、北海道だけではなく全国のデータを使った地図エンジンらしい動きに仕上げていきたいと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術連載記事一覧

もっと読む

この記事の著者

冨川 修広(ヤフー株式会社)(トミカワ ノブヒロ(ヤフーカブシキカイシャ))

2008年ヤフー入社。地図に関するシステム全般の設計・開発を担当。フルリニューアルしたAndroid版Yahoo!地図アプリでは、プロダクトマネージャとしてプロジェクト全体を統括。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7686 2014/03/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー