(Last Update: Wed Apr 28 15:38:41 JST 2010)
Fine Kernel ToolKit に関する詳しい解説

このページでは、Fine Kernel ToolKit (FK) に関する幾つかの話題を羅列していきます。


FK の特長 ... Good Points
FK は、リアルタイム 3DCG を容易に記述するためのフレームワークです。 このような目的を持つシステムは有償、無償問わず数多く出回っております。 そういった一連のシステムの中で、FK が持つ特長を羅列してみます。 TOP ページにある項目に関しても、もう少し深く掘り下げていきます。
  • コードのシンプルさ : 3Dのプログラムコードはとかく長くなりがちです。 これは、3Dアプリケーションが必然的に多くの要素を含んでしまうからです。 例えばウィンドウの生成や設定、画面の初期化に始まり、 座標変換やモデルの構築、 インターフェースやイベント処理を仕込むことなどです。 OpenGL や Direct3D といった 3D 用 APIや様々な 3D ライブラリでは、 そういった仕事を全てユーザの責任として押しつけてしまいます。

    FK では、よく練られた構成によるクラスによる変数を制御していくことで、 効率よくアプリケーションを記述することができます。 (これに関しては改めて後述します。)


  • 他のシステムとの親和性 : 多くのグラフィクスシステムや GUI 用ライブラリでは、 イベントドリブン型のスタイルを採用しています。 これは、アプリケーションにおける様々なイベント (マウスやキーの操作など)に応じて、 決められた関数が呼び出されるというものです。 代表的なものとして GLUT などが挙げられますが、 このスタイルには以下の2つの欠点があると我々は考えています。
    1. どのような手順で呼び出されるかが、分析しないとわからない。
    2. 他のイベントハンドリングを持つシステムとの併用が困難。
    特に後者は、致命的な問題を生じることがしばしばあります。 FK では、イベント駆動は自前ではあまりタッチせず、 その他のシステム(FLTK, Qtなど)で記述するという方針をとっています。 これにより、様々な GUI 用システムで利用することが可能であり、 実行される順番も把握が容易となっています。


  • マルチプラットフォーム : FK は数多くのプラットフォームやコンパイラに対応しています。 世間に出回っている多くの 3D ライブラリは、 そのほとんどが Windows のみしか対応していません。 それは、表示用の下位 API として Direct3D を採用しているからです。 FK は下位 API として OpenGL を採用しているため、 OpenGL が動作するプラットフォームでは FK が動くことになります。 現状の開発者が使用しているプラットフォームは Windows (XP, Vista, Windows7), Mac OS X 10.6 (Snow Leopard), そして FreeBSD 8.0 です。 (Windows においては下位 API として Direct3D を利用することも可能です。) もちろん、Linux での動作実績もあります。 (Linux や FreeBSD でのパッケージ提供は、 近い将来にサポートする予定です。)


  • わかりやすい階層構造 : 3Dのプログラミングが難解な点の一つに、 様々な概念が階層構造をなしているということがあります。 これを一般に「シーングラフ」と呼びますが、 多くのシステムにおいてこのシーングラフは抽象的にデザインされています。 この抽象性が取っつきにくさを助長していると我々は考えています。 FK にももちろん階層構造を表す手段はあるのですが、 クラス同士の親子関係は極めて具体的です。 無駄な抽象性は排除し、プログラマが迷うことはありません。


  • 高度な形状操作 : リアルタイムな3Dのライブラリやツールキットは、 形状に対してできる操作が限られています。 例えば、頂点を移動することはできても、面を分割したり、 2つの形状を融合させるといった処理ができません。 これは、形状の「位相」という要素が固定されているからです。

    FK では、2つの一般的な形状を表すクラスを準備しています。 そのうちの1つは高速性を重視したもので、 他のシステム同様大した形状操作はできません。 もう1つは「半稜線構造 (Half-Edge Structure)」 という高度なデータ構造を保持する形状クラスです。 このデータ構造は業務用CADでも用いられている堅牢で優れたもので、 高度な形状操作処理が必要な用途にはうってつけです。


  • 優れた座標変換 : 3Dプログラミングでは、座標変換が大きな割合を占めます。 これを FK で実現するクラスが「fk_Model」です。 このクラスは大変強力なもので、 ユーザが指定したいと思う要望をほぼ網羅した機能を保持しています。 また、行列やオイラー角、 四元数(クォータニオン)を用いた制御も容易であり、 様々な理論を簡単に適用することができます。 fk_Model 自体が親子関係(階層構造)をなす事ができるので、 ボーンアニメーションも簡単に構築できます。


  • 豊富なデータ形式サポート : FK では様々な 3Dデータ形式の入力をサポートしています。 現時点でサポートしているのは SMF, VRML2.0, STL, HRC, RDS, DXF, MQO(Metasequoia形式), そして Direct3Dの X形式です。さらに、 X 形式においてはアニメーションを入力することも可能になっています。 BVH 形式のモーションデータを入力することもできます。


  • 充実した文字列表示 : 近年のゲームコンテンツなどでは、 文字表示が重要な要素となっています。 FKでは、こういった用途を想定した様々な文字列表示方法を提供しています。 フォント表示では、任意の TrueType フォントが利用できます。


まだまだ一杯あります!


FK の特色的な概念や理論 ... Concepts
  • 4つのレイヤー : FKでは、3Dアプリケーションのレイヤーを大きく 「形状」「モデル」「シーン」「ウィンドウ」 の4つのレイヤーに分けて考えます。

    「形状」 は、 文字通り立体形状そのものを表します。 FKでは、基本的な形状として直方体や球など様々な形を、 変数1つで生成することができます。 また、モデラーで作成した任意の形状を読み込んだり、 画像を作成することもできます。

    「モデル」 はFKの中でも最も特徴的なクラスです。 これは、形状に対して位置や方向(姿勢)、 あるいは色(マテリアル)情報を持たせたものです。 「形状」と「モデル」の概念が分離しているのには理由があります。 例えば、100台の車を制御するプログラムを考えてみます。 このとき、もし100台の形状が全て同じなのであれば、 個別に形状データを管理するのは無駄になります。 そこで、車の形状を1つ生成し、 100個のモデルがその形状を持つという設定にすることで、 メモリの節約になるというわけです。 FKのモデルは大変便利な位置や姿勢を制御する API を持っています。 この利便性が FK の使いやすさの多くを担っていると言っても過言ではありません。 また、モデル同士の親子関係を構築することも可能で、 ボーンアニメーションなども実現できます。

    「シーン」 はカメラと複数のモデルからなるデータベースであり、これを 「ウィンドウ」 に登録することで実際に描画が行われます。 「シーン」と「ウィンドウ」は完全に独立した存在なので、 ウィンドウに描画するシーンを簡単に切り替えたり、 逆に複数のウィンドウに同じシーンを描画することもできます。


  • 高度で高速なソリッドモデルカーネル : FKには様々な形状用のクラスがありますが、 その中に「fk_Solid」というものがあります。 このクラスは「半稜線(Half-Edge)構造」というデータ構造を持っています。 これは、本格的な設計用CAD等にも利用されているかなり厳密なもので、 柔軟な形状操作を可能としています。 fk_Solidは、半稜線構造が持つ高い形状操作機能を保持し、 かつリアルタイム 3DCG での利用を想定した高速性も実現しています。


  • 豊富な数学要素 : 3Dのプログラミングにおいては、数学要素は切っても切り離せません。 特にベクトルと行列は重要です。 もちろん、FKでも便利なベクトルや行列のクラスを提供しています。 他にもオイラー角や四元数(クォータニオン)を表すクラスがあり、 全てのクラスは容易に連携、変換処理を行うことができます。 3DCGの典型的な処理だけでなく、 数学を駆使した新理論の構築にも強力な武器となるよう設計しています。
Topに戻る>>

SourceForge.JP
(c) Fine Kernel Project ( fk@gamescience.jp ), 1997-2014