メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

チュートリアル(Visual C++)

目次

ビルドして実行してみる

まずは,慣れるために既存のプロジェクト(今回は Springhead/src/Samples/DynaHaptic)を実行してみます.
  1. ビルドを行う準備として以下のことを行ってください.
  2. Springhead/src/Samples/DynaHaptic/DynaHaptic.dsw を Visual C++ で開いてビルドしてください.
    ビルドが成功しない方は以下のことを確認してください.
  3. 実行します.
    実行したら,[ファイル]-[開く]でSpringhead/src/Samples/data/にあるデータファイル(Direct3D Xファイル)を適当にロードしてみてください. 実行時の主なキー操作は以下のようになっています.

データファイルを編集する

ボールを転がして箱に入れるという仮想世界の作成を通して, 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 には,ボールと床の衝突判定を行い衝突後はボールだけに反力を加えるという記述をします.
なお,PenaltyEngine では, 親フレームとの衝突判定を行うように記述すれば, 再帰的に子フレームとの衝突判定も行うので, ボールと床との衝突判定を記述しておけば, 床の子フレームである三角柱との衝突判定も自動的に行います.

−作成例− 

カメラを追加

このままでは画面に映る範囲が狭いので, 少しひいた(ズームアウトした)位置に視点を動かします.
視点の位置を設定するためには,frTop の下に Camera を追加します. Camera がない場合はデフォルトのカメラ位置になります. (デフォルトのカメラ設定については Springhead/src/Graphics/GRCamera.cpp の GRCameraData::InitData() を参照) これまではカメラの設定をしていなかったので, デフォルトのカメラ位置になっていたということになります.
カメラの位置の設定には,保存の機能を使うと便利です. 保存を行うと,そのときのカメラの設定をXファイルに書き出してくれます. よって,

実行 → キー操作により任意の視点位置に移動 → “名前を変えて”保存 → 保存したXファイルのカメラ設定を元のファイルにコピー

という手順で行うと楽です. 保存する際,ボールの位置など仮想世界の状態も一緒に保存してしまうので, 別の名前で保存する必要があります.

−作成例− 

床を広くしてボールを移動

次は,床を広くして,ボールももっと上から転がるように変更します. 床を広くするためには物体の頂点座標を管理している Mesh を変更します. ボールの位置の変更は FrameTransformMatrix の平行移動成分を変更して行います.

−作成例− 

箱を配置

ボールをキャッチする箱を配置します.
凹物体を作る で作成した箱フレームを追加し, ボールとの衝突判定を行うように Penalty も追加します.

−作成例− 

ボールの初期速度を大きくする

箱にボールが入らなかったので,ボールがもっと遠くへ飛んでいくように, Solid を編集して初期速度を大きくします.

−作成例− 

背景をつけ,テクスチャを貼る.

箱にボールが入るところまでできたので,少し見た目を向上させるために, 背景を付け,テクスチャも貼ります.
背景は,世界の後方に大きな平面オブジェクトを置いて作ることにします. テクスチャは,Material の中の TextureFilename で指定します.

−作成例− 

これでひとまず rollingBall は完成です.

各オブジェクト位置の変更

つづいて rollingBall を改良して golf を作っていきます.
まずは,世界をgolf用に変更します.

−作成例− 

行った作業は以下の通りです.

力覚ポインタを作る

SPIDARのグリップ部分に対応するポインタを作ります. まずは,ポインタのフレームを作成します. そして,ポインタの物理(Solid,Penalty)を追加します. データファイル側の作業は以上で終わりです.

−作成例− 

あとはSPIDARの設定等,プログラムを編集する作業になります. SPIDARの設定については SPIDAR を参照.

SPIDAR

もうしばらくおまちください....

新しくプロジェクトを作る

自分用に新しくプロジェクトを作ります.
プログラムに変更を加えていく場合は, 新しいプロジェクトを作ることをお勧めします.
今回は,簡単な方法ということで既存のプロジェクト(Springhead/src/Samples/DynaHaptic)を コピーして名前だけ変更するという方法を取ることにします.
  1. VSSから $/Project/Springhead/src/Samples/DynaHaptic 以下を取得する.
  2. DynaHapticフォルダをコピーし, 適当なところ(Samplesの下でいいと思います)に貼り付ける.
  3. 貼り付けたフォルダ内のすべてのファイルの読み取り専用のチェックをはずし, ファイル名及び各ファイルの中に登場する "DynaHaptic" を すべて新しいプロジェクト名に置換する.
    .dsp, dsw, rc, sccファイルなんかもテキストエディタで開いて置換してください. -# ビルドして実行する. ビルドがうまくいかない方は,名前がすべて変更されているか, またはビルドして実行してみるのビルドのところを確認してください.

Springheadに対してSun Apr 16 01:58:44 2006に生成されました。  doxygen 1.4.1