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

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

ただいまの
回答率

90.48%

  • C++

    4508questions

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

  • OpenGL

    208questions

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

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

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 987

jty4k

score 13

前提・実現したいこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/20 14:54

    回答ありがとうございます。
    返信が遅れ、申し訳ございません。

    ご紹介いただいたページは私もよく参考にさせていただいておりまして、上記質問の後に試してみました。
    結果、ページに記載されているものは実現できましたが、残念ながら球を回転してもテクスチャが固定されたままになっています。(回転する球にプロジェクタで画像を投影しているような状態)
    ページにも「球なので回転しても形が変わらないのは当然ですが,映り込んでいるテクスチャも動きません.」と書かれているので、プログラム自体に間違いはないと思われます。
    ここから更に、球を回転するとそれに併せてテクスチャの位置が動くことを理想としております。

    ご提案いただいている「OpenCVをゴリゴリしてマッピング」とは、例えば全天球画像(質問時の画像で言う、北半球・南半球の画像)をパノラマ画像に変換(透視投影変換?)して貼り付ける、というようなイメージでしょうか?

    キャンセル

  • 2016/11/23 17:10

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

    キャンセル

  • 2016/11/24 13:11

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/18 23:34

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

    キャンセル

同じタグがついた質問を見る

  • C++

    4508questions

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

  • OpenGL

    208questions

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