项目作者: tokoik

项目描述 :
地理院地図 3D を Oculus Rift DK1/DK2 で見てみる
高级语言: C
项目地址: git://github.com/tokoik/gsiview.git
创建时间: 2014-09-06T18:14:37Z
项目社区:https://github.com/tokoik/gsiview

开源协议:zlib License

下载


地理院地図 3D を Oculus Rift DK1/DK2 で見てみる

はじめに

国土地理院が提供くださっている地理院地図 3D 上を,
Oculus Rift でフライスルーしながら眺めるプログラムです.
たいしたことないプログラムですが,
GLFW で Oculus を使うサンプルとして見ていただけると幸いです.

  1. Copyright (c) 2014, 2015, 2016 Kohe Tokoi
  2. Permission is hereby granted, free of charge, to any person
  3. obtaining a copy of this software and associated documentation
  4. files (the "Software"), to deal in the Software without
  5. restriction, including without limitation the rights to use,
  6. copy, modify, merge, publish, distribute, sublicense, and/or
  7. sell copies of the Software, and to permit persons to whom the
  8. Software is furnished to do so, subject to the following
  9. conditions:
  10. The above copyright notice and this permission notice shall be
  11. included in all copies or substantial portions of the
  12. Software.
  13. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
  14. KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  15. WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  16. PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  17. COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  19. OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  20. SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

プログラムのビルド

プログラムのパッケージには,Windows 用の Visual Studio 2013 のプロジェクトを含めています.
ビルドするには Oculus SDK 0.8beta,OpenCV 2.4.12,および GLFW 3.1.2 が必要です.
Windows と Mac OS X については,パッケージに GLFW を含めています.

  1. Oculus SDK 0.8beta に対応して DK2 も使えるようにしました.

Mac OS X 用の Xcode 5 のプロジェクト,および Linux 用の Makefile も含めていますが,
Oculus SDK 0.8beta がこれらをサポートしていないため,ビルドすることはできません.
OpenCV は PNG のテクスチャファイルを読むためだけに使っています.
libpng や glpng を使うことも考えたのですが,めんどくさくなりました.

Windows

「プロジェクトのプロパティ」の「構成プロパティ」で,
「VC++ ディレクトリ」の「インクルードディレクトリ」に
OpenCV と Oculus SDK を展開した場所にある include ディレクトリ,
「ライブラリディレクトリ」に同じくライブラリファイルのあるディレクトリを追加してください.

  • インクルードディレクトリ
    • \opencv\build\include;\OculusSDK\LibOVR\Include;
  • ライブラリディレクトリ
    • \opencv\build\x86\vc12\lib;\OculusSDK\LibOVR\Lib\Win32;

立体視表示はフルスクリーンで行う必要がありますが,
Debug ビルドの時はフルスクリーンにしないようにしてあります.
実際に使う時は Release でビルドしてください.
あと,当たり前ですけど,OpenCV の DLL を置いている場所を環境変数 PATH に含めておいてください.

Mac OS X

gsiview というターゲットの Build Settings の Search Paths という項目にある
Header Search Paths に OpenCV と Oculus SDK のヘッダファイルを置いたディレクトリを指定してください.
また,Library Search Paths に OpenCV と Oculus SDK のライブラリファイルを置いたディレクトリを指定してください.

  1. 現在は Oculus runtime / SDK Mac をサポートしていないため,Oculus は使用できません.

デフォルトでは Debug ビルドになり,フルスクリーン表示を行いません.
Xcode で Release Build に切り替えるには,
Edit Scheme の Run gsiview.app の Info タブで Build Configuration を Release に切り替えてください.
デバッグビルドでフルスクリーン表示をしたい時は
Build Setting の Other C Flags の Debug のところに入っている -D_DEBUG を消してください.
-fno-rtti は Oculus SDK をリンクするときには必要です.

なお,Oculus SDK を使わない場合は,
Linking の項目にある Other Linker Flags に設定されている -lovr を削除してください.

余談ですが, OpenCV の 2.4.12 をHomeBrew でインストールする時は,
brew tap コマンドで homebrew/science を指定してください.
これ,ついこのあいだ知りました.

  1. $ brew tap homebrew/science
  2. $ brew install opencv

また,このパッケージをそのまま使う場合は必要がありませんが,
やはり HomeBrew で GLFW 3 をインストールする場合は,
brew tap コマンドで homebrew/versions を指定してください.GLFW 2 もインストールできます.

  1. $ brew tap homebrew/versions
  2. $ brew install glfw3
  3. $ brew install glfw2

Linux

cmake とか使ってないので,Makefile 編集してください.

設定ファイル

プログラムの細かな設定値は,config.h にまとめています.立体視の方式も,ここで選択できます.

  1. // 立体視の設定
  2. #define NONE 0 // 単眼視
  3. #define LINEBYLINE 1 // インターレース(未サポート)
  4. #define TOPANDBOTTOM 2 // 上下
  5. #define SIDEBYSIDE 3 // 左右
  6. #define QUADBUFFER 4 // クワッドバッファステレオ
  7. #define OCULUS 5 // Oculus Rift (HMD)
  8. // 立体視の方式
  9. #define STEREO NONE

ここで OCURUS 以外を選んだ時は,Oculus SDK は必要ありません.
また LINEBYLINE は当初実装しようと思っていましたけど,結局していません.
これは自分の授業 で使っていた GL_POLYGON_STIPPLE が OpenGL の Core Profile では使えないことや,
ラインバイライン方式の液晶パネルを使ったモニタでも,
現在はサイドバイサイドやトップアンドボトム方式の映像信号に対応しているからです.
あと,QUADBUFFER は,そういえばテストしていません.

データの入手

データは国土地理院の地理院地図 3D からダウンロードしてください.
こういうものを公開して頂いて本当に感謝しています.
自分で見たいところの地図を表示して,「WebGL 用ファイル」をダウンロードしてください.

ファイルは ZIP でまとめられています.
展開して,中に入っている dem.csv と texture.png というファイルを,
このプログラムのソースファイルと同じところに置いてください.

Xcode の場合は,さらにこれらを Build Phase の Copy Bundle Resources に追加してください.
これはドラッグアンドドロップでできます.

操作方法

プログラムを実行すると,立体視表示 (フルスクリーン表示) の時は,
セカンダリディスプレイがあれば,そちらに表示しようとします.
視点 (カメラ) の移動は,マウスかゲームコントローラで行うことができます.

マウスによる操作

マウスの左ボタンドラッグで水平方向の前後の速度と進行方向を制御します.
この制御の仕方は宿題の解答例そのまんまです.
マウスを前に進めると前進,後ろに進めると交代,左右で旋回します.

ホイールは上下移動で,横スクロールのできるホイールなら横移動 (カニ歩き) もできます.

右ボタンドラッグでカメラの向きを変えます.
起動直後,カメラは地形の上空にあり,真下を向いています.
右ボタンでマウスを前にドラッグすると,カメラが前に向きます.
h キーでカメラの向きを正面に戻します.

プログラムを起動すると正面に地形が見えます.
ホイールを回して地面に近づいたら,右ボタンで前にドラッグして,
カメラを前に向けてください.左ボタンドラッグでフライスルーできます.

ゲームコントローラによる操作

ゲームコントローラは ELECOM のを使いました.他
のに対応する時は,ソース変更してください.アナログモードでないとうまく動きません.

左スティックで水平方向の前後の速度と進行方向を制御します.
右スティックで上下移動と横移動 (カニ歩き) ができます.
カメラの向きは 1,2,3,4 のボタンで変えられます.

プログラムを起動すると正面に地形が見えます.
左スティックを手前に引いて地面に近づいたら,
2 ボタンを押してカメラを前に向けてください.左スティックでフライスルーできます.

Oculus Rift を使うとき
Oculus Rift を使う時は,ヘッドトラッキングによりカメラの向きを変えます.
プログラムを起動すると地面が下にありますから下を向いてください.
降下して地面に近づいたら前を向いてください.

視差の調整
左右の画像が一致しなかったり,逆に頭が痛かったりした場合は,
左右の矢印キー←→で視差を調整してください.
また Oculus Rift では,上下の矢印キー↑↓で画像の拡大率を変えることができます.