SHOEISHA iD

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

連載記事

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

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

 すっかり暖かくなりましたね。春の訪れとともに桜前線も北上しています。と同時に、花粉の季節でもあります。今日はどれくらい花粉が飛ぶのだろうと悩む毎日です。Yahoo!地図アプリでは、そんな桜の開花状況や、花粉の飛散情報が地図上のアイコンでわかるようになっています。(図1)。地図上から簡単に確認可能ですので、日々のツールとしてご利用ください。

  • X ポスト
  • このエントリーをはてなブックマークに追加

図1(Yahoo!地図アプリのお花見情報(左)と花粉情報(右))
図1(Yahoo!地図アプリのお花見情報(左)と花粉情報(右))

 さて、本掲載ではOpenGLを使ったベクトル版地図エンジンの作り方を紹介しています。前回は、視点についてご説明させていただきました。今回は、シェーダを使った色の変更と線種についての解説です。

はじめに

 Yahoo!地図は、地図の種類をいくつか変更が可能です。例えば、Android版Yahoo!地図アプリでは、通常の地図と鉄道路線図の2種類(図2)を提供させていただいています。一見まったく異なるデータのように見えますが、実は元データは同じものを使っています。地図描画エンジンで表示データに変換する際のスタイルデータの切り替え(図3)によって、通常地図と鉄道路線図を同じデータを使って実現しています。以前のラスタ版では、表示の切り替えを行うたびに、新たに通信を行いデータ取得する必要がありました。これでは非効率なため、ベクトル版では、同じデータを用いながらも、さまざまな種類の地図表現ができるように工夫しています。

図2(通常地図と鉄道路線図の比較)
図2(通常地図と鉄道路線図の比較)
図3(ベクトルデータとスタイルの図解)
図3(ベクトルデータとスタイルの図解)

シェーダの解説

  地図アプリでの色の変更方法について触れる前に、OpenGL ES 2.0の描画の流れを把握しておく必要があるため、簡単に説明させていただきます。図4をご覧ください。

図4(描画の流れ)
図4(描画の流れ)
  1. 頂点情報のインプット
    描画したいオブジェクトの頂点情報をOpenGLへ渡します。
     
  2. 頂点シェーダ(OpenGL ES 2.0で定義が可能)
    オブジェクトの頂点座標と変換行列を元に2次元座標に投影します。
     
  3. ラスタライザ
    2次元座標に変換された各頂点を元にラスタライズ処理を行います。
    ここはOpenGL内部で行われます。
     
  4. フラグメントシェーダ(OpenGL ES 2.0で定義が可能)
    ライタライズされた各ピクセルに色をつけます。この工程でテクスチャーなどを使った着色も可能になります。
     
  5. アウトプット
    画面へ表示します。

 描画の流れは掴んでいただけたでしょうか。OpenGL ES 2.0では、開発者による頂点シェーダとフラグメントシェーダの定義が必要です。ちょっと複雑で面倒ではありますが、逆にこれを自由に定義できることで、さまざまな表現が可能となっています。では、実際にシェーダを使った色変更を行ってみましょう。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
色の変更

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
スマホアプリ開発の最新トレンド! ぜったい外せない位置情報活用術連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7686 2014/03/26 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  1. 6
    プログラミング未経験からのITエンジニアへ転職の実態を調査、TAG STUDIOが発表
  2. 7
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  3. 8
    Linuxデスクトップ向けソフトウェアデプロイメントシステム「Flatpak」の最新バージョンリリース
  4. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  6. 6
    プログラミング未経験からのITエンジニアへ転職の実態を調査、TAG STUDIOが発表
  7. 7
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  8. 8
    Linuxデスクトップ向けソフトウェアデプロイメントシステム「Flatpak」の最新バージョンリリース
  9. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!

イベント

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

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

メールバックナンバー

アクセスランキング

  1. 1
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  1. 6
    プログラミング未経験からのITエンジニアへ転職の実態を調査、TAG STUDIOが発表
  2. 7
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  3. 8
    Linuxデスクトップ向けソフトウェアデプロイメントシステム「Flatpak」の最新バージョンリリース
  4. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  6. 6
    プログラミング未経験からのITエンジニアへ転職の実態を調査、TAG STUDIOが発表
  7. 7
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  8. 8
    Linuxデスクトップ向けソフトウェアデプロイメントシステム「Flatpak」の最新バージョンリリース
  9. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!