質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

2744閲覧

OpenGLにおける複数方向からのスフィアマッピングの可否

jty4k

総合スコア19

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/11/16 11:53

###前提・実現したいこと
お世話になります。
最近OpenGLをいじっており、以下のように地球儀を作りたいと考えております。
イメージ説明
(球を回転させると裏側の地図も見えてほしいです。)

スフィアマッピングで片一方のテクスチャ(北半球のみ)貼り付けはなんとか出来たのですが、もう一方を貼り付けようとすると反対側からスフィアマッピングをする必要があると考えています。
しかしスフィアマッピング自体ふつうは「向き」という概念がないのかもしれません(回転させると同じになる)が、方法がよくわかっておりません。

ご存知の方、あるいは別の良い方法があればご教示いただきたく、宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

半年前の話題ですが、面白そうなテーマと思い少し考えてみました。

  • 球体モデルは中心を原点とし、Y軸+を北極、Z軸+を赤道上の基準点(経度0など)、X軸+をこれらと直交する赤道上の点に向くようにして、半径1.0になるよう作る(軸の選び方は一例ですので、お好みの座標系でもかまいません)。
  • レンダリング時、バーテックスシェーダでgl_Positionに与えるMVP変換済み座標と別に、頂点のモデル座標をそのままフラグメントシェーダまで送る。フラグメントシェーダでは座標が線形補間された状態で得られるので、長さを1に正規化する。
  • このベクトルのZ、X成分が球体を北極から見た時の2次元的な位置に相当するので、適当に拡縮・移動してテクスチャのサンプリング座標とする。Y成分の正負で北半球・南半球を判定し、サンプリングするべきテクスチャを選択する(または、北半球南半球を並べた1枚のテクスチャを使い、南北に応じてサンプリング座標を0.5ずらす)。

実際にコードを書いて実験してみたわけではないので、うまくいくか分かりませんが、いかがでしょうか。
おそらくこのやり方ですと、赤道付近のレンダリング結果がひどいことになりそうですので、球全体の品質を一様にしたい場合はキューブテクスチャの使用などを検討した方がいいかもしれません。

投稿2017/05/15 10:00

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jty4k

2017/05/18 14:34

コメントいただきありがとうございます。 実はあきらめて断念しており、OpenGLからかなり離れていましたが、少し思い出してきました。 せっかくコメントをいただきましたので、時間はかかるかもしれませんが改めて内容を思い出しながらご教示いただいた内容を試してみたいと思います。 うまくいけば、またここでご報告したいと思います。
guest

0

興味があったので色々見てみましたが、結局日本語でなんとなく分かるのが
2005年01月07日 [OpenGL][テクスチャ] 第10回 スフィアマッピング
程度。
でもデータがハッキリしているのであれば、OpenCVをゴリゴリしてマッピング位だと思うのですが。
もしOpenCVのマッピングとか投射変換について必要ならばある程度は。

投稿2016/11/17 14:56

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jty4k

2016/11/20 05:54

回答ありがとうございます。 返信が遅れ、申し訳ございません。 ご紹介いただいたページは私もよく参考にさせていただいておりまして、上記質問の後に試してみました。 結果、ページに記載されているものは実現できましたが、残念ながら球を回転してもテクスチャが固定されたままになっています。(回転する球にプロジェクタで画像を投影しているような状態) ページにも「球なので回転しても形が変わらないのは当然ですが,映り込んでいるテクスチャも動きません.」と書かれているので、プログラム自体に間違いはないと思われます。 ここから更に、球を回転するとそれに併せてテクスチャの位置が動くことを理想としております。 ご提案いただいている「OpenCVをゴリゴリしてマッピング」とは、例えば全天球画像(質問時の画像で言う、北半球・南半球の画像)をパノラマ画像に変換(透視投影変換?)して貼り付ける、というようなイメージでしょうか?
MasahikoHirata

2016/11/23 08:10

方法して、三次元に色データがあるとして、3次元復元を用いるイメージを考えておりました。
jty4k

2016/11/24 04:11

「データがハッキリしている」というのは、「三次元に色データがある」ということでしたか、納得です。 残念ながら、そういった情報がないことが前提です。 スフィアマッピングにこだわらず、もう少し他の方向性も考えたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問