■ RoundEngine の内容
本プロジェクトでは、以下の2種類のミドルウエアを開発中である。
この両ミドルウエアは、どちらも RoundEngine であり機能も同等であるが、開発目的が異なっている。そのため今後も、開発を同時進行させていく予定だ。 1. C++用 DLL 本ミドルウエアは、コードネーム「Beziex Pcc」で呼ばれており、以下の2種類のモジュールから成る。
まず「BxPccSDK」は "Beziex Pcc 本体" で、「曲面変換」と「ポリゴン変換」を受け持つ。そして「BxPccWxWithDx」は BxPccSDK によって生成された3DCD画像の表示などを行う GUI 部分だ。 「BxPccSDK」「BxPccWxWithDx」の両方とも C++ で書かれているが、「BxPccSDK」は DLL 形式で配布しており、ソースは公開していない (「BxPccWxWithDx」はソース公開している)。 2. C# ソース 本ミドルウエアは、コードネーム「Beziex Pcc C#」で呼ばれており、以下の2種類のモジュールから成る。
まず「BxPcsSDK」は "Beziex Pcc C# 本体" で、「C++用 DLL」版の "BxPccSDK" に相当する。また「BxPcsWpfWithSdx」は、「C++用 DLL」版の "BxPccWxWithDx" に該当している。 なお「BxPcsSDK」「BxPcsWpfWithSdx」は両方とも C# で記述されている。そしてコチラは、どちらもソースを公開することにした。 3. 「C++用 DLL」と「C# ソース」の使い分け 「C# ソース」の "BxPcsSDK" はソース公開しているので、「曲面変換」や「ポリゴン変換」の実装(ソースコード)を読むのに適している。独自技術のアルゴリズムについては別のページで文書公開しているので、それと照らし合わせることにより、全体像が見えてくるであろう。 ただし C# であることやその他の事情により、処理スピードは遅い。 「C++用 DLL」の方は C++ で記述されているので、ネイティブアプリと同等の処理スピードを実感できるはずである。 つまり「C++用 DLL」と「C# ソース」は、以下のように使い分けると良いだろう。
4. 現状の処理方法について 「 C++用 DLL」の "BxPccSDK"、「C# ソース」の "BxPcsSDK" のポリゴン変換の一部は、本来 GPU上で処理されるべきものである。しかし 2013年9月現在では、まだすべての処理を CPU上で行っている。 「 C++用 DLL」の "BxPccSDK" については、将来的には GPU に処理を移したいと思っている。しかし現在はまだ開発途上ということでご容赦願いたい。 「C# ソース」の "BxPcsSDK" は、目的が実装(ソースコード)を見せることなので、すべて CPU上とした方が読み易いだろうと思っている。そのため GPU に処理を移行させる予定は無い。 5. BxPccSDK、BxPcsSDK の処理 BxPccSDK や BxPcsSDK の処理は以下の通りである。 1) Catmull-Clark の元となるポリゴン(ケージ)を読み込み、内部的に細分割したポリゴン頂点の情報を利用し、境界曲線(ベジェ曲線)と「ソース境界横断導関数(ソースCBD)」を作成する。 2) 境界曲線とソースCBDから「CBD用境界曲線投影平面」を作成する。 3) 境界曲線、ソースCBD、CBD用境界曲線投影平面から「Beziex 曲面 (2009版)」用のパラメータを求める。 4) 「Beziex 曲面 (2009版)」をテセレーション(ポリゴン変換)し、分割したポリゴンとして出力する。 またこれを図式化したものが下図である。 6. BxPccWxWithDx、BxPcsWpfWithSdx の処理 BxPccWxWithDx や BxPcsWpfWithSdx の処理は以下の通りである。 1) 「BxPccSDK (BxPcsSDK)」によってテセレーションされたポリゴンモデルを表示し、さらにこのモデルに対し回転させたり、分割数を変えたりする。 2) patchesファイルの読み書き、cageファイルの読み込みを行う。ちなみに現時点では、(ダウンロードファイル内に) cageファイルの添付は行っていない。 |