まずは,慣れるために既存のプロジェクト(今回は Springhead/src/Samples/DynaHaptic)を実行してみます.
- ビルドを行う準備として以下のことを行ってください.
- 環境変数 Springhead に Springhead をインストールしたディレクトリを 指定して下さい.
Windows2000ならば[マイコンピュータ]-[プロパティ]-[詳細]-[環境変数]-[新規]のダイアログに [変数名] Springhead [変数値] インストールしたディレクトリとしてください. - DirectX8.1か9.0のSDKをインストールしてください.
- Springhead/src/Samples/DynaHaptic/DynaHaptic.dsw を Visual C++ で開いてビルドしてください.
ビルドが成功しない方は以下のことを確認してください.
- DirectX SDKのインクルードファイルとライブラリファイルのディレクトリの設定
[ツール]-[オプション]-[ディレクトリ]の「表示するディレクトリ(S)」を「インクルードファイル」に変え, DirectX SDKのインクルードファイルのディレクトリ(例:"C:\DXSDK\INCLUDE")が設定されているか確認してください.
設定されていなければ設定してください.
また,検索の優先順位を上げるために「↑」のボタンを何度かクリックして, 一番上に来るようにしてください.
ライブラリファイルについてもインクルードファイルと同様にパスの設定を行ってください (「表示するディレクトリ(S)」を「ライブラリファイル」に変更する). - アクティブプロジェクトの設定 [ビルド]-[アクティブな構成の設定]の 「プロジェクトの構成]を "Dynahaptic - Win32 MFC Debug (or Release)" にして下さい.
- Springheadのページの「今朝のビルド」を見てください. ここにはその日の午前3時の時点でVSSにアップされているプロジェクトのビルド結果が表示されています. ここに載っていないプロジェクトのビルドは通らないということになりますので,過去のビルドが成功するバージョンのファイルを取得してきてください.
- 実行します.
実行したら,[ファイル]-[開く]でSpringhead/src/Samples/data/にあるデータファイル(Direct3D Xファイル)を適当にロードしてみてください. 実行時の主なキー操作は以下のようになっています.
- ↑:前進
- ↓:後退
- ←:左回転
- →:右回転
- S:上回転
- X:下回転
- Q:左平行移動
- W:右平行移動
- A:上平行移動
- Z:下平行移動
- R:視点リセット
- F:フルスクリーン
- G:画面をフルスクリーンから元に戻す
- C:SPIDARのグリップのキャリブレーション
- スペース:SPIDARに力を返すか返さないかのON-OFF
- T:マルチメディアタイマーの起動 (精度の高い力覚を提示するためには必要.Release版のみ)
ボールを転がして箱に入れるという仮想世界の作成を通して, Xファイルの編集の方法を簡単に見ていきます.
まずは,rollingBall から作っていきます.
まず,仮想世界に必要なオブジェクトとして, 床,ジャンプ台となる三角柱,ボールをモデリングします. .x形式で保存することのできるモデリングソフトを使用して作ってください.
−作成例−
仮想世界に登場する物体にはさきほど作成したような直方体,球のような凸物体と, 箱のような凹物体があります. Springheadでは衝突判定に用いているアルゴリズムの性質上, 物体はすべて凸物体でなければなりません. そこで,箱を作るときには,底と四方の壁の5つの直方体を組み合わせて作成します.
作成例では,親フレーム Vessel の下に 子フレームとして VesselFront,Back,Left,Right,Bottom を配置しています. 各フレームにある FrameTransformMatrix は アフィン行列を転置した形で記述されており, 親フレームからのローカル変換を表しています. (VesselFront,Back,left,right はこのローカル変換が異なるだけで, その下に記述されている Mesh の部分は同じものを使用しています)
−作成例−
では実際に世界を作っていきます. まず,世界の一番の親フレームとして frTop を作成し, その子フレームに床を,そして床の子フレームとして三角柱を配置します.
−作成例−
次は,床を傾けます.
さきほど,三角柱を床の子フレームとしているので, 床フレームの FrameTransformMatrix を編集するだけで, 三角柱ごと傾けることができます.
−作成例−
ボールを frTop の子フレームとして配置します.
−作成例−
ここまでの状態で実行しても, 暗くてあまり見えないのでライトを追加します. 具体的には,ライトの位置・姿勢を決めるためのフレームと そのライトの性質を示す Light8 を frTop の下に追加します.
−作成例−
ではいよいよ仮想世界に物理法則を追加します. 具体的には,
- SolidContainer : 仮想物体の物理的性質
- GravityEngine : 重力の制御
- PenaltyEngine : 衝突判定の制御
を追加することになります.
現在作りたい世界の仕様を,
- ボールが動く.
- 重力がボールにはたらく.床にははたらかない.
- ボールと床の間で衝突が起こり,衝突後ボールは跳ね返るが床は固定.
とすると,SolidContainer および GravityEngine にはボールだけを登録し, PenaltyEngine には,ボールと床の衝突判定を行い衝突後はボールだけに反力を加えるという記述をします.
なお,PenaltyEngine では, 親フレームとの衝突判定を行うように記述すれば, 再帰的に子フレームとの衝突判定も行うので, ボールと床との衝突判定を記述しておけば, 床の子フレームである三角柱との衝突判定も自動的に行います.
−作成例−
このままでは画面に映る範囲が狭いので, 少しひいた(ズームアウトした)位置に視点を動かします.
視点の位置を設定するためには,frTop の下に Camera を追加します. Camera がない場合はデフォルトのカメラ位置になります. (デフォルトのカメラ設定については Springhead/src/Graphics/GRCamera.cpp の GRCameraData::InitData() を参照) これまではカメラの設定をしていなかったので, デフォルトのカメラ位置になっていたということになります.
カメラの位置の設定には,保存の機能を使うと便利です. 保存を行うと,そのときのカメラの設定をXファイルに書き出してくれます. よって,
実行 → キー操作により任意の視点位置に移動 → “名前を変えて”保存 → 保存したXファイルのカメラ設定を元のファイルにコピー
という手順で行うと楽です. 保存する際,ボールの位置など仮想世界の状態も一緒に保存してしまうので, 別の名前で保存する必要があります.
−作成例−
次は,床を広くして,ボールももっと上から転がるように変更します. 床を広くするためには物体の頂点座標を管理している Mesh を変更します. ボールの位置の変更は FrameTransformMatrix の平行移動成分を変更して行います.
−作成例−
ボールをキャッチする箱を配置します.
凹物体を作る で作成した箱フレームを追加し, ボールとの衝突判定を行うように Penalty も追加します.
−作成例−
箱にボールが入らなかったので,ボールがもっと遠くへ飛んでいくように, Solid を編集して初期速度を大きくします.
−作成例−
箱にボールが入るところまでできたので,少し見た目を向上させるために, 背景を付け,テクスチャも貼ります.
背景は,世界の後方に大きな平面オブジェクトを置いて作ることにします. テクスチャは,Material の中の TextureFilename で指定します.
−作成例−
これでひとまず rollingBall は完成です.
つづいて rollingBall を改良して golf を作っていきます.
まずは,世界をgolf用に変更します.
−作成例−
行った作業は以下の通りです.
- 床の変更
- 傾きを水平にした
- カップを作るために床を4分割した(そのうちの一つには傾斜をつけた)
- ジャンプ台を低くした
- 球の初期位置,初期速度の変更
- 箱の位置の変更
SPIDARのグリップ部分に対応するポインタを作ります. まずは,ポインタのフレームを作成します. そして,ポインタの物理(Solid,Penalty)を追加します. データファイル側の作業は以上で終わりです.
−作成例−
あとはSPIDARの設定等,プログラムを編集する作業になります. SPIDARの設定については SPIDAR を参照.
もうしばらくおまちください....
自分用に新しくプロジェクトを作ります.
プログラムに変更を加えていく場合は, 新しいプロジェクトを作ることをお勧めします.
今回は,簡単な方法ということで既存のプロジェクト(Springhead/src/Samples/DynaHaptic)を コピーして名前だけ変更するという方法を取ることにします.
- VSSから $/Project/Springhead/src/Samples/DynaHaptic 以下を取得する.
- DynaHapticフォルダをコピーし, 適当なところ(Samplesの下でいいと思います)に貼り付ける.
- 貼り付けたフォルダ内のすべてのファイルの読み取り専用のチェックをはずし, ファイル名及び各ファイルの中に登場する "DynaHaptic" を すべて新しいプロジェクト名に置換する.
.dsp, dsw, rc, sccファイルなんかもテキストエディタで開いて置換してください. -# ビルドして実行する. ビルドがうまくいかない方は,名前がすべて変更されているか, またはビルドして実行してみるのビルドのところを確認してください.
Generated on Sun Apr 16 02:07:53 2006 for Springhead by
1.4.1