ページ

2011年9月12日月曜日

osg の 依存ライブラリのパッケージを発見

前回の投稿で free type ライブラリの組み込みで、リンクエラーが出てうまくいかなかった件でさらに試行錯誤してみました。

で、Forum などを調べていて、ライブラリがパッケージとして提供されているのを見つけたので、それを使ってやってみることに。

以下にリンクを貼ります。
・ osg - Downloads/Dependencies
Visual Studio の各バージョン別に依存ライブラリの紹介がされている。
・ osg - Support/UserGuides/EnvironmentVariables
こちらはおまけで、依存ライブラリをビルドツリーにインストールする際の環境変数の設定などで役立つので、ここに記載します。

また、 osg の派生プロジェクトである osgVisual の 依存ライブラリの説明 も参考になりました。バージョンの前後はあるのですが、下記のライブラリを組み込むパッケージが提供されています。
This package includes:
zlib-1.2.5
png-1.5.1
pcre-7.6
minizip-1.2.5
libtiff-3.8.2
jpeg-8c
glut-3.7.6
giflib-4.1.6
freetype-2.4.4 -- Added PDB file in V7
expat-2.0.1
curl-7.21.6
gdal-1.7.2
PROJ-4.7.0
libiconv-1.9.1
gettext-0.13.1
libxml2_2.7.7
FFTSS-3.0
boost-1.43.0 (system, filesystem, datetime, regex, thread)
collada-dom-2.2 (1.4)
Nvidia Texture Tools 2.0.8 with CUDA support (Cuda 3.2)
OpenSSL 1.0.0

さて、これらを組み込んでうまく動くアプリがつくれるんでしょうか。。。

今回はこれ位で。
次回は組み込んでみて、どうなるかを書こうとおもいます。

2011年9月11日日曜日

osg へ free type の組み込みがうまくできない。。。

前回の投稿であったフォントの不具合を解決するべく、 free type を DL してきました。

こちらはソリューションファイルが提供されていたので、個別にビルドして、CMake への環境変数を以下のように指定して Configure と Generate を実行しました。
FREETYPE_INCLUDE_DIR_freetype2
..../freetype/include/freetype
FREETYPE_INCLUDE_DIR_ft2build
.../freetype/include
FREETYPE_LIBRARY
..../freetype/objs/win32/vc2008
すると CMake に下記のような警告が出てしまいました。
WARNING: Target "osgdb_freetype" requests linking to directory "....\freetype\objs\win32\vc2008".  Targets may link only to libraries.  CMake is dropping the item.
WARNING: Target "osgdb_freetype" requests linking to directory "....\freetype\objs\win32\vc2008".  Targets may link only to libraries.  CMake is dropping the item.
WARNING: Target "osgdb_freetype" requests linking to directory "....\freetype\objs\win32\vc2008".  Targets may link only to libraries.  CMake is dropping the item.
WARNING: Target "osgdb_freetype" requests linking to directory "....\freetype\objs\win32\vc2008".  Targets may link only to libraries.  CMake is dropping the item.
Visual Studio 2008 でビルドしたんですが、Plugins freetype がリンクがうまくいきませんでした。以下がそのリンクエラーです。
>リンクしています...
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Done_Face が関数 "public: virtual __thiscall FreeTypeFont::~FreeTypeFont(void)" (??1FreeTypeFont@@UAE@XZ) で参照されました。
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Set_Pixel_Sizes が関数 "protected: void __thiscall FreeTypeFont::init(void)" (?init@FreeTypeFont@@IAEXXZ) で参照されました。
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Load_Char が関数 "public: virtual class osgText::Glyph * __thiscall FreeTypeFont::getGlyph(struct std::pair const &,unsigned int)" (?getGlyph@FreeTypeFont@@UAEPAVGlyph@osgText@@ABU?$pair@II@std@@I@Z) で参照されました。
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Outline_Get_BBox が関数 "public: virtual class osgText::Glyph3D * __thiscall FreeTypeFont::getGlyph3D(unsigned int)" (?getGlyph3D@FreeTypeFont@@UAEPAVGlyph3D@osgText@@I@Z) で参照されました。
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Outline_Decompose が関数 "public: virtual class osgText::Glyph3D * __thiscall FreeTypeFont::getGlyph3D(unsigned int)" (?getGlyph3D@FreeTypeFont@@UAEPAVGlyph3D@osgText@@I@Z) で参照されました。
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Get_Kerning が関数 "public: virtual class osg::Vec2f __thiscall FreeTypeFont::getKerning(unsigned int,unsigned int,enum osgText::KerningType)" (?getKerning@FreeTypeFont@@UAE?AVVec2f@osg@@IIW4KerningType@osgText@@@Z) で参照されました。
>FreeTypeFont.obj : error LNK2019: 未解決の外部シンボル _FT_Get_Char_Index が関数 "public: virtual class osg::Vec2f __thiscall FreeTypeFont::getKerning(unsigned int,unsigned int,enum osgText::KerningType)" (?getKerning@FreeTypeFont@@UAE?AVVec2f@osg@@IIW4KerningType@osgText@@@Z) で参照されました。
>FreeTypeLibrary.obj : error LNK2019: 未解決の外部シンボル _FT_Init_FreeType が関数 "protected: __thiscall FreeTypeLibrary::FreeTypeLibrary(void)" (??0FreeTypeLibrary@@IAE@XZ) で参照されました。
>FreeTypeLibrary.obj : error LNK2019: 未解決の外部シンボル _FT_Done_FreeType が関数 "public: virtual __thiscall FreeTypeLibrary::~FreeTypeLibrary(void)" (??1FreeTypeLibrary@@UAE@XZ) で参照されました。
>FreeTypeLibrary.obj : error LNK2019: 未解決の外部シンボル _FT_New_Face が関数 "protected: bool __thiscall FreeTypeLibrary::getFace(class std::basic_string,class std::allocator > const &,unsigned int,struct FT_FaceRec_ * &)" (?getFace@FreeTypeLibrary@@IAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAAPAUFT_FaceRec_@@@Z) で参照されました。
>FreeTypeLibrary.obj : error LNK2019: 未解決の外部シンボル _FT_Open_Face が関数 "protected: unsigned char * __thiscall FreeTypeLibrary::getFace(class std::basic_istream > &,unsigned int,struct FT_FaceRec_ * &)" (?getFace@FreeTypeLibrary@@IAEPAEAAV?$basic_istream@DU?$char_traits@D@std@@@std@@IAAPAUFT_FaceRec_@@@Z) で参照されました。
>FreeTypeLibrary.obj : error LNK2019: 未解決の外部シンボル _FT_Set_Charmap が関数 "protected: void __thiscall FreeTypeLibrary::verifyCharacterMap(struct FT_FaceRec_ *)" (?verifyCharacterMap@FreeTypeLibrary@@IAEXPAUFT_FaceRec_@@@Z) で参照されました。
>....\OpenSceneGraph-3.0.1\bin\osgPlugins-3.0.1\osgdb_freetyped.dll : fatal error LNK1120: 外部参照 12 が未解決です。
どうしたもんでしょうか。。。


今回はこれ位で、次回へ続く。。。

osg のフォントプラグイン

引き続き osg (Open Scene Graph) を弄ってます。

で、デモアプリ osgForest を実行したら、フォントが大きく表示されて画面から見切れる不具合(?)がありました。操作ヘルプが表示されてるだけなんで、大体の意味が把握できれば支障が無いんだけど、気持ちが悪いので調査。

起動時のコマンドプロンプトに以下のような警告表示を発見。
Creating osg::Billboard based forest...Warning: Could not find plugin to read objects from file "....\OpenSceneGraph-Data-3.0.0\fonts\arial.ttf". done.
Creating double quad based forest...Warning: Could not find plugin to read objects from file "....\OpenSceneGraph-Data-3.0.0\fonts\arial.ttf". done.
Creating osg::MatrixTransform based forest...Warning: Could not find plugin to read objects from file "....\OpenSceneGraph-Data-3.0.0\fonts\arial.ttf". done.
Creating osg::Vertex/FragmentProgram based forest...Warning: Could not find plugin to read objects from file "....\OpenSceneGraph-Data-3.0.0\fonts\arial.ttf". done.
Creating OpenGL shader based forest...Warning: Could not find plugin to read objects from file "....\OpenSceneGraph-Data-3.0.0\fonts\arial.ttf". done.
このコマンドプロンプトの表示を見ると、何やらファイルが読み込めないようです。該当するパスを調べると ttf ファイルはちゃんと存在してます。なんででしょう?? 


ググってみると osg では ttf 等のトゥルータイプフォントを処理するライブラリ free type を使用していて、それを使ったプラグインがうまくロードできない(デフォルトではビルドされない)せいで表示が崩れているようです。

プラグインって何ぞや?って疑問を抱きつつ、、、わき道にそれますが、これをとりあえず解決しようと思います。後になってわかったのですが、同様にフォントを表示しているその他のデモアプリでも不具合が出る模様。。。

free type のこの時点での最新安定版は 2.4.6 で下記のサイトから DL することにしました。
FreeType Downloads

DLしてきて、適当にパス通せば解決するだろうと思って高をくくっていたのですが、、、


今回はこれ位で。

2011年9月9日金曜日

Open Scene Graph を Windows でビルド

Open Scene Graph (osg) を調べ始めて、早 1 週間弱。

前回の投稿で書いたとおり、Mac OS X Lion での osg 3.0.1 のビルドはひとまず、あっさりとあきらめました。

心機一転、Windows にプラットフォームを移して、デモアプリなどを見てみることにしました。とりあえず、CMake と Doxygen、Qt を入れることに。ここまでは同様の作業。

CMake で作成したプロジェクトファイルを選択して、Visual Studio を起動。ALL_BUILD をスタートアッププロジェクトに選択してビルド。約45分程度放置した段階でビルド完了しました。(かなりかかりました。。。)

パフォーマンスや便利さを実感するようなアプリがどれなのか、いまいちわかりません。探してみると、デモアプリの各説明はこちらで見つけることが出来ました。

基本的にはコマンドラインから osg ファイルなどを指定して、アプリを実行する形となります。

で、こちらの osg ファイルをどこで手に入れるかっていうと、osg のリポジトリを遡っていくとデータ用のリポジトリルートがあり、こちらからデータを取得することができました。

さて、各デモアプリを一通り見た段階で、自分でデータを作りだすのはどうするの?ってことで、今日はこれ位で丸めときます。

2011年9月8日木曜日

Open Scene GraphとOS X Lion

Open Scene Graph 3.0.1を評価するべく、CMakeと格闘しつつ、必要とされる色々なライブラリを整備してたんだけど、、、

結局の所、何やらOS X Lion で廃止されたAPIをでコールしているせいで、osgViewerのビルド時にビルドエラーで終了。Forumへの関連しそうな投稿を見つけたのでリンクを置いて置きます。

XCode自体もLion向けのため、書き換えないとビルドが通らない状況に。OSSな環境だとありがちな、最新の環境がベストとは限らないって罠にはまった感じ。

今日のところはこれまでかな。


2011年8月30日火曜日

GLEWをOS Xでビルド

OpenGL4.2のリリースに伴い、OS X 10.7 LionでOpenGLを始めようと一念発起。

OpenGLのヘルパーライブラリである GLEW (OpenGL Extension Wrangler Library) やGLM (OpenGL Mathematics) も使ってみようと思い、まずはGLEWの情報収集とビルドをと思いました。

GLEW は現行で GLEW 1.7.0 が公開されており、これの zip版を拾ってきました。zipファイルを解凍して、ディレクトリを移動していざ make とした所で、、、
> unzip glew-1.7.0.zip
> cd glew-1.7.0
> make all  
まずはここでビルドエラーが出ました。
/bin/sh: config/config.guess: /bin/sh^M: bad interpreter: No such file or directory
/bin/sh: config/config.guess: /bin/sh^M: bad interpreter: No such file or directory
Makefile:40: *** "Platform '' not supported".  Stop.
どうやら改行コードが悪さをしているらしく、Makefileをmakeで読み込んだ段階でエラーとなってました。

なので、これらのファイルの改行コードをCR+LFからCRのみにしてmakeを再度実行すると、、、

再度ここでもビルドエラーがでました。
make: *** No rule to make target `all'.  Stop. 
ちゃんと、リリースチェックしてんの?って思いつつネットで調査を続けてみると、"tgz版ならうまくいくよ"ってな書き込みを見つけることができました!!

で、zipファイルを捨て去り、tgz版を拾って来て解凍。
> tar -xvzf glew-1.7.0.tgz
ディレクトリを移動して make を実行するとすんなりとビルドが完了しました。。。
> cd glew-1.7.0
> make all
zip と tgz でパックしたもんは同じもんじゃないのかい!!

つまらんことでつまづいたけど、一歩前進。
> sudo make install 
> cd bin
> ./glewinfo  
情報が表示されました。

はてさて、OpenGLにたどり着くのはいつになるのやら。。。

2011/09/08 追記:
OpenGL 4.2 に感化された感はあったのですが、調べてみると持ってるMacではOpenGL 2.1止まりなのが判明。。。Windowsに行くしかやはりないのかなぁ。。。
Mac OS X 10.7 OpenGL Info

2010年11月17日水曜日

Ogre攻略~準備編(0)

世間ではタクティクス・オーガがリメイクされて話題となってますが、それとはあまり関係の無い話です。

Ogreとはオープンソースのグラフィックミドルウェアの事です。因みにライセンスはLGPLに準拠しています。

サンプルを触るには、ライブラリがビルドされたものが提供されており、簡単に実行して動かせます。

しかし、ライブラリ自体もオブジェクト志向で作られている為、かなり抽象化されています。その為、簡単に動かしたりするには良いのですが、表層を弄るような感じで内部の動きを理解するにはソースからのビルドや内部の解析が不可欠です。

そこで、別途提供されているソースパッケージからライブラリ及びサンプルをビルドする環境を先ずは作ってみようと思います。もちろん、その先にカスタマイズやチューニングといった目標があります。

Ogreの公式wikiにSDKをビルドする記事があります。こちらを見つつ整えていこうと思います。前提として、コンパイル環境はVisualStudioを前提で行きます。バージョンは2008 Proを使用しています。


では、始めていきましょう。

まずは、SDKのビルドに必要となる、依存するライブラリを開発環境に入れていきます。


1.DirectX SDKのインストール
ま、Windowsでグラフィックを扱う上で、欠かせないものですので、あえて言葉はいらないと思います。OgreからはRenderプラットフォームとして、DirectX9やDirectX10、DirectX11の3種がRendererとして使えます。この他に、OpenGLもサポートしていますが、ここでは取り扱いません。
こちらについては、Microsoftのサイトより比較的新しいものを入手して、インストールしておきます。
今回は現時点で最新のDirectX SDK (June 2010) (英語)をインストールしました。

2.Boostのインストール
C++のライブラリである、Boostをインストールします。
boostproで配っている、win32向けのインストーラーを用いるのが簡単みたいです。
インストールが完了したら、以下の3つの環境変数を登録しておきましょう。バージョンにより、ディレクトリ名は変わるので、適宜対応します。インストールしたのはここでは1.44なので、以下のようになります。
  • BOOST_ROOT (C:\Program Files\boost\boost_1_44)
  • BOOST_INCLUDEDIR (C:\Program Files\boost\boost_1_44)
  • BOOST_LIBRARYDIR (C:\Program Files\boost\boost_1_44\lib)
3.Dependenciesのインストール
依存する、その他のライブラリやツールなどをまとめたものが、こちらからダウンロードできます。含まれているものは以下のようなものです。
  • Cg
  • FreeImage
  • freetype
  • ois
  • zlib
  • zziplib
これらは別途、個別に入手してインストールすることも可能ですが、このパッケージを利用することで、ライブラリ生成まで同一のソリューションで行うことが出来ます。
任意のディレクトリに展開したら、以下のように、環境変数を定義します。これは後に実行する、CMakeから参照するのに、使用されます。
  • OGRE_DEPENDENCIES_DIR C:\OgreDependencies\Dependencies\src
展開した先の、srcフォルダを指定するような形であれば大丈夫です。

次に、これもまたCMakeを実行する前に一旦Debug/Releaseともにビルドしておきます。これをしておかないと、環境変数を設定しても、CMakeを実行した際に、ライブラリが見つからないといったエラーをだして、処理を進められないので、やっておいてください。



以上が前提となるライブラリの準備となります。


次は、マルチプラットフォーム対応のMakeツールである、CMakeの設定について書こうと思います。