FS-GUI Library

概要

FS-GUIライブラリは、YS Flight SimulatorとScenery Editor用に構築したユーザ・インターフェースライブラリで、メニュー、ダイアログ、3次元の視点コントロール機能などを提供する。

正直言って、Windows、MacOS、Linuxにそれぞれ別にユーザ・インターフェースのコードを書くのが嫌になった。最初のうちは、フル機能が使えるのはWindowsだけで、Mac用、Linux用は、サブセット版ってことにしてたけど、Windows Vista、Windows 7になったあたりで、Windowsの先行きも怪しくなってきたから、Windowsと心中しなくてもいいように、Mac、Linuxともにフルの機能が使えるようにしよう、と思ったんだけど、とてもGUIが作れたもんじゃない。

思い切ってQtベースに書き換えることも考えた。けど、Nokiaが撤退して、Qtの未来も不透明になった。Qtベースにしない決定を下したのは、Nokia撤退騒動より前だけど、正しい判断だったと思ってる。

YSFLIGHTは、これまで外部ライブラリへの依存を最小限に抑えてやってきた。小さな外部ライブラリなら、あるとき突然消滅しても、他のに切り替えることもできそうだけど、巨大なライブラリにべったりに作ってしまって、ある日突然「やっぱりやめました、さようなら」と言われると、その時点で恐るべき量のコードを書き換えないと、そのプロジェクトは終わってしまう。

とくに、YSFLIGHTみたいな、弱小プロジェクトだと、とにかく、仕事(とフライトとボウリングと航空ショーと野鳥撮影)の合間しか時間をかけることができない。そんな恐るべき量の書き換えに直面した段階で、詰んでしまう。

それが、あるとき、ある人から、Mac OSXは描画を全部OpenGLでやってる、という話を聞いた。その人の話は、多分間違ってたんだけど、ただ、その話を聞いたとき、「そうか。そうだよね。OpenGLがあるんだから、ユーザ・インターフェースを自力で描画するライブラリを作ればいいだけじゃん。」ということに気がついて、YSFLIGHTのユーザ・インターフェースを全面的に自前のユーザ・インターフェースライブラリに書き換えることにした。自分で作ってるんだから、自分がやめなきゃずっと使える  :-)

それで、そのユーザ・インターフェースライブラリは、極力外部ライブラリへの依存を最小限にとどめて、OpenGLと、基本的なキー入力、マウス入力、一枚ウィンドウを開く機能だけを移植すれば使えるようにした。ソースディレクトリの中のfssimplewindowライブラリを移植すれば、基本機能は使える。現在、MacOSX, Linux , Windowsには移植済みで、現在iOS用をテストしているところ。

ちょっといいフォントを使いたかったら、yssystemfontライブラリを移植すれば使える。あと、凝ったことをしようと思ったら、ysportライブラリを移植すればいい。たしか、これだけ。あ、ファイルダイアログがまだうまいこと抽象化できてなかったから、それもあったっけ。

それで、せっかく作ったから、同じような問題で困ってる人に使ってもらえれば、と、思って公開することにした。

本当は、DNMビューアーの例題まで作ってから出したかったんだけど、とりあえず、見切り発車。

著作権について

このクラスライブラリの著作権は、作者が保有するものとする。ただし、このライブラリを使用した結果について、使用者が全責任を負い、作者は責任を負わないという点に同意していただけるのであれば、フリー、商用、オープンソース、プロプライエタリを問わず、このクラスライブラリを利用していただいても構わない。この点に同意していただけない場合は、使用を認めない。また、このライブラリを利用したからといって、ライブラリを使用した製品のソースコードの公開を求めるなんてことは決してしない。

importディレクトリ下のファイルは、opengl.orgからダウンロードしたものを、Re-distribution freeとのことだったので、Windowsでそのままコンパイルが通るようにするために、同梱した。

使用可能なプラットフォーム

とりあえず、プログラムのテンプレートは、Windows (Visual C++ 2010 Express)とUbuntu 11でコンパイルしてテストした。もちろん、YSFLIGHT、Scenery Editorは、Mac OSXでも動いているんで、makefileを書けば動くはずだけど、時間の都合で、次のアップデートまで見送ることにした。

一応、プログラムを解凍して、Visual C++コマンドプロンプトに降りて、

cd (解凍先)\fsgui3dframework\fsgui3d\template
nmake /f makefile.win

と、タイプすると、fsgui3d_template.exeという実行ファイルができる、はず。(2013/03/21 訂正  nmake -f だと動かないことがあるらしい。法則不明。)なお、素の環境だと、C:\include, C:\lib, C:\tmp\obj にファイルを作ろうとするけど、パーミッションが無い場合などの理由で他の場所が良い場合は、環境変数:

USERINCDIR
USERLIBDIR
USEROBJDIR

を設定しておくと、そっちにファイルを作ろうとする。NMAKEからコンパイルして実行するには、

nmake /f makefile.win run

Visual Studioでやりたい人は、それぞれのディレクトリの下のソースファイルを適当に追加していけば、多分ビルドできるようになると思うんだけど。でも、ああいうIDEも良くない。2年後とに新しい環境の使い方を覚えなおすとか、あれでいったい世界中 の無駄になった時間を合計するとトータル何十万時間が無駄になってるんだろう?

Microsoftに限らず、AppleもLinuxやってる人たちも理解してないけど、ユーザは新しいインターフェースを欲しがってない。タブレットは、新しい入力デバイスだから仕方ないとしても、毎回Officeのショートカットを変えてみたり、Visual StudioやXCodeのダイアログやメニューをいじくってみたり、誰もあんなの欲しがらない。博士論文書くとき、Word XPとPower Point XPのショートカットを極めたけど、あっさりOffice 2003で使えなくなったもんね。現在、Officeを捨てて17年ぶりにLatexを使うことを真剣に検討中。今日、久しぶりにiTunesでMP3ファイルを我が妻のiPadに転送しようと思ったら、インターフェースが変わってて面食らったし。なんで、ああいうユーザーが嫌がることをするんだろうね?人が嫌がる製品を作ったら、売れるわけがない。

LinuxかMac OSXだと、

cd (解凍先)/fsgui3dframework/fsgui3d/template
make -f makefile.unx

でOKのはず。

make -f makefile.unx run

でコンパイルして実行できる。G++とX-WindowとかGLXのライブラリがインストールしてないとコンパイルできんけど。Mac OSXは、XCode 3.2.6で確認してるけど、多分、XCode 4.X.Xにコマンドラインツールをインストールしておけば使えると思う。

デフォルトの視点コントロール

デフォルトの状態では、シフトキーを押しながら、左ボタンドラッグでスクロール、右ボタンドラッグで回転。左右同時押しのドラッグで拡大・縮小。

あるいは、ビュー・コントロール・ダイアログ上で、スクロールモード、回転モードに入れて、左ボタンドラッグも可。同じく、ビュー・コントロール・ダイアログで拡大・縮小ボタンの使用も可能。

例題プログラム - YSFLIGHT DNM Viewer

YSFLIGHTの飛行機3DモデルのDNM形式のビューア。時間の都合により、とりあえず、スクリーンショットだけ出しとく。(コンパイルは、(解凍先)/ysdnmview/srcに移動してmake。そのうちもうちょっと説明を追加できるといいんだけど.



ダウンロード

[ここをクリック]  (2013/03/30 R1971)

旧バージョン

[2013/03/03 R1882]

サンプルファイルについて

えーと、DNMビューアとか、いくつか例題を含めて出したかったんだけど、時間の都合でまだできてない。次のアップデートのときにはなんとか。

更新情報

2013/03/30

  • 例題プログラム YSFLIGHT DNM Viewer を追加。
  • View-Control Dialogを追加。(まだ完全に動いてないけど)
  • 素のWindows 7だとコンパイルが通らない問題を修正したつもり。
  • MacOSXでもコンパイルできるようにした。