datファイルからO2C形式の3Dモデルを抽出する

数年前、私は1つの興味深い問題に直面しました。 カタログ内のモデル番号に応じた名前番号を持つファイルのリストの形式で、カタログプログラムからすべての3Dモデル(約2000個)を抽出することで構成されていました。 プログラムは、モデルの視覚化にサードパーティのコンポーネント-O2CPlayerを使用しました。 すべてのモデルは、拡張子がdatの1つの大きなファイルに縫い付けられました。 O2Cplayerの使用に関する説明と例は、公式Webサイト( Ferrariの Webサイトと例)にあります。









アーカイブを解析しようとしました



私はすでに3dsやその他のグラフィックモデル形式の経験があり、O2C形式のドキュメントを探し始めました。 ファイルは特定のヘッダー(チャンク)を持つ部分で構成されていると想定されていたため、datファイルからモデルを抽出することができました。 ドキュメントが見つかりませんでした。適切な形式の既製のモデルと、視覚化コンポーネントの開発者の公式Webサイトを見つけることができました。 バイナリには同様のヘッダーが含まれていました。 データファイルの繰り返しを分析しましたが、約600であることがわかりました。ヘッダーがランダムに繰り返されることに加えて、これは明らかに十分ではありませんでした。 ファイルからモデルを直接削除しようとして失敗しました。



フレームワーク研究



私はこのタスクを延期することにしました。具体的な実装のアイデアがなかったためです。 しかし、しばらくして、この視覚化フレームワークを検討するかどうかが考えられました。 MSVSでWinFormsプロジェクトを作成し、必要なCOM O2CPlayerアセンブリを接続しました。 公式アプリをインストールすると、Com Referenceから入手できます。 O2CPleerは、開発者の公式Webサイトで入手できます。











このエンジンには、基本的な視覚化機能がすべて備わっており、3Dグラフィックスの分野での特別な知識は必要ありません。 O2Playerには直感的な設定インターフェイスがあります。 オブジェクトの回転、移動、詳細、アニメーションなどの機能が表示されます。 モデルのカタログの表示などのタスクの場合、これは非常に優れたソリューションです。







コンポーネントインターフェイスには、100を超えるメソッド、プロパティ、およびイベントがあります。 しかし、私はエンジンが視覚化のためにファイルのみを開くという事実に興味があり、表示のためにメモリ内のデータの配列を転送することは不可能です。 モデルを表示するために、ディレクトリプログラムは次のことを行う可能性があります。

  1. アーカイブから目的のモデルを選択します
  2. ディスク上にファイルを作成します
  3. レンダリングするファイル名を渡します




解決策



System.IO名前空間のFileSystemWatcherオブジェクトを使用して簡単なユーティリティをスケッチした後、ドライブCのファイルに対するすべての変更を確認しました。実際、プログラムの次のモデルを表示する前に、フォルダー@ ..”任意の名前で新しいファイルを作成します。 タスクは、このファイルを正しい名前で正しいフォルダーにコピーすることでした。 1時間以内に、すべてのモデルが選択されました。



All Articles