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

tutorialVC.h

00001 #ifndef Spr_TUTORIALVC_H
00002 #define Spr_TUTORIALVC_H
00003 
00004 /** @page TutorialVC チュートリアル(Visual C++)
00005 
00006     @section Content 目次
00007         - @ref Execution
00008         - @ref EditDataFile
00009             -# @ref MakeConvex
00010             -# @ref MakeConcave
00011             -# @ref SetTrianglePole
00012             -# @ref TiltFloor
00013             -# @ref SetSphere
00014             -# @ref SetLight
00015             -# @ref SetPhysics
00016             -# @ref SetCamera
00017             -# @ref BroadenFloor
00018             -# @ref SetVessel
00019             -# @ref AccelSphere
00020             -# @ref SetTexture
00021             -# @ref Adjustment
00022             -# @ref SetPointer
00023         - @ref SPIDAR
00024         - @ref NewProject
00025 
00026     @section Execution ビルドして実行してみる
00027     まずは,慣れるために既存のプロジェクト(今回は Springhead/src/Samples/DynaHaptic)を実行してみます.
00028         -# ビルドを行う準備として以下のことを行ってください.
00029             - 環境変数 Springhead に Springhead をインストールしたディレクトリを
00030             指定して下さい.<br>
00031             Windows2000ならば[マイコンピュータ]-[プロパティ]-[詳細]-[環境変数]-[新規]のダイアログに
00032             [変数名] Springhead [変数値] インストールしたディレクトリとしてください.
00033             - DirectX8.1か9.0のSDKをインストールしてください.
00034         -# Springhead/src/Samples/DynaHaptic/DynaHaptic.dsw を Visual C++ で開いてビルドしてください.<br>
00035         ビルドが成功しない方は以下のことを確認してください.
00036             - DirectX SDKのインクルードファイルとライブラリファイルのディレクトリの設定<br>
00037             [ツール]-[オプション]-[ディレクトリ]の「表示するディレクトリ(S)」を「インクルードファイル」に変え,
00038             DirectX SDKのインクルードファイルのディレクトリ(例:"C:\DXSDK\INCLUDE")が設定されているか確認してください.<br>
00039             設定されていなければ設定してください.<br>
00040             また,検索の優先順位を上げるために「↑」のボタンを何度かクリックして,
00041             一番上に来るようにしてください.<br>
00042             ライブラリファイルについてもインクルードファイルと同様にパスの設定を行ってください
00043             (「表示するディレクトリ(S)」を「ライブラリファイル」に変更する).
00044             - アクティブプロジェクトの設定
00045             [ビルド]-[アクティブな構成の設定]の
00046             「プロジェクトの構成]を "Dynahaptic - Win32 MFC Debug (or Release)" 
00047             にして下さい.
00048             - <A href=http://sklab-www.pi.titech.ac.jp/~hase/springhead/>Springheadのページ</A>の「今朝のビルド」を見てください.
00049             ここにはその日の午前3時の時点でVSSにアップされているプロジェクトのビルド結果が表示されています.
00050             ここに載っていないプロジェクトのビルドは通らないということになりますので,過去のビルドが成功するバージョンのファイルを取得してきてください.
00051         -# 実行します.<br>
00052         実行したら,[ファイル]-[開く]で<A href=../../Samples/data/>Springhead/src/Samples/data/</A>にあるデータファイル(@ref XFile "Direct3D Xファイル")を適当にロードしてみてください.
00053         実行時の主なキー操作は以下のようになっています.
00054                 - ↑:前進
00055                 - ↓:後退
00056                 - ←:左回転
00057                 - →:右回転
00058                 - S:上回転
00059                 - X:下回転
00060                 - Q:左平行移動
00061                 - W:右平行移動
00062                 - A:上平行移動
00063                 - Z:下平行移動
00064                 - R:視点リセット
00065                 - F:フルスクリーン
00066                 - G:画面をフルスクリーンから元に戻す
00067                 - C:SPIDARのグリップのキャリブレーション
00068                 - スペース:SPIDARに力を返すか返さないかのON-OFF
00069                 - T:マルチメディアタイマーの起動
00070                 (精度の高い力覚を提示するためには必要.Release版のみ)
00071 
00072     @section EditDataFile データファイルを編集する
00073     ボールを転がして箱に入れるという仮想世界の作成を通して,
00074     Xファイルの編集の方法を簡単に見ていきます.<br><br>
00075     - @ref XFile とは?
00076     - 完成例
00077         - rollingBall <A href=../../Samples/data/tutorial/rollingBall.x>Springhead/src/Samples/data/tutorial/rollingBall.x</A>
00078         - golf <A href=../../Samples/data/tutorial/golf.x>Springhead/src/Samples/data/turorial/golf.x</A>
00079 
00080     まずは,rollingBall から作っていきます.
00081 
00082         @subsection MakeConvex 凸物体を作る
00083         まず,仮想世界に必要なオブジェクトとして,
00084         床,ジャンプ台となる三角柱,ボールをモデリングします.
00085         .x形式で保存することのできるモデリングソフトを使用して作ってください.<br><br>
00086         −作成例−
00087         - <A href=../../Samples/data/tutorial/floor.x>floor.x</A>
00088         - <A href=../../Samples/data/tutorial/trianglePole.x>trianglePole.x</A>
00089         - <A href=../../Samples/data/tutorial/sphere.x>sphere.x</A>
00090 
00091         @subsection MakeConcave 凹物体を作る
00092         仮想世界に登場する物体にはさきほど作成したような直方体,球のような凸物体と,
00093         箱のような凹物体があります.
00094         Springheadでは衝突判定に用いているアルゴリズムの性質上,
00095         物体はすべて凸物体でなければなりません.
00096         そこで,箱を作るときには,底と四方の壁の5つの直方体を組み合わせて作成します.<br>
00097         作成例では,親フレーム Vessel の下に
00098         子フレームとして VesselFront,Back,Left,Right,Bottom を配置しています.
00099         各フレームにある FrameTransformMatrix は
00100         アフィン行列を転置した形で記述されており,
00101         親フレームからのローカル変換を表しています.
00102         (VesselFront,Back,left,right はこのローカル変換が異なるだけで,
00103         その下に記述されている Mesh の部分は同じものを使用しています)<br><br>
00104         −作成例− 
00105         - <A href=../../Samples/data/tutorial/vessel.x>vessel.x</A> 
00106 
00107         @subsection SetTrianglePole 床に三角柱を配置する
00108         では実際に世界を作っていきます.
00109         まず,世界の一番の親フレームとして frTop を作成し,
00110         その子フレームに床を,そして床の子フレームとして三角柱を配置します.<br><br>
00111         −作成例− 
00112         - <A href=../../Samples/data/tutorial/rollingBall1.x>rollingBall1.x</A>
00113         
00114         @subsection TiltFloor 床を傾ける
00115         次は,床を傾けます.<br>
00116         さきほど,三角柱を床の子フレームとしているので,
00117         床フレームの FrameTransformMatrix を編集するだけで,
00118         三角柱ごと傾けることができます.<br><br>
00119         −作成例− 
00120         - <A href=../../Samples/data/tutorial/rollingBall2.x>rollingBall2.x</A>
00121 
00122         @subsection SetSphere ボールを配置する
00123         ボールを frTop の子フレームとして配置します.<br><br>
00124         −作成例− 
00125         - <A href=../../Samples/data/tutorial/rollingBall3.x>rollingBall3.x</A>
00126 
00127         @subsection SetLight ライトを追加する 
00128         ここまでの状態で実行しても,
00129         暗くてあまり見えないのでライトを追加します.
00130         具体的には,ライトの位置・姿勢を決めるためのフレームと
00131         そのライトの性質を示す Light8 を frTop の下に追加します.<br><br>
00132         −作成例− 
00133         - <A href=../../Samples/data/tutorial/rollingBall4.x>rollingBall4.x</A>
00134         
00135         @subsection SetPhysics 物理法則を追加する
00136         ではいよいよ仮想世界に物理法則を追加します.
00137         具体的には,
00138         - SolidContainer : 仮想物体の物理的性質
00139         - GravityEngine : 重力の制御
00140         - PenaltyEngine : 衝突判定の制御
00141 
00142         を追加することになります.<br>
00143         現在作りたい世界の仕様を,
00144 
00145             - ボールが動く.
00146             - 重力がボールにはたらく.床にははたらかない.
00147             - ボールと床の間で衝突が起こり,衝突後ボールは跳ね返るが床は固定.
00148 
00149         とすると,SolidContainer および GravityEngine にはボールだけを登録し,
00150         PenaltyEngine には,ボールと床の衝突判定を行い衝突後はボールだけに反力を加えるという記述をします.<br>
00151         なお,PenaltyEngine では,
00152         親フレームとの衝突判定を行うように記述すれば,
00153         再帰的に子フレームとの衝突判定も行うので,
00154         ボールと床との衝突判定を記述しておけば,
00155         床の子フレームである三角柱との衝突判定も自動的に行います.<br><br>
00156         −作成例− 
00157         - <A href=../../Samples/data/tutorial/rollingBall5.x>rollingBall5.x</A>
00158 
00159         @subsection SetCamera カメラを追加
00160         このままでは画面に映る範囲が狭いので,
00161         少しひいた(ズームアウトした)位置に視点を動かします.<br>
00162         視点の位置を設定するためには,frTop の下に Camera を追加します.
00163         Camera がない場合はデフォルトのカメラ位置になります.
00164         (デフォルトのカメラ設定については <A href=../../src/Graphics/GRCamera.cpp>Springhead/src/Graphics/GRCamera.cpp</A> の GRCameraData::InitData() を参照)
00165         これまではカメラの設定をしていなかったので,
00166         デフォルトのカメラ位置になっていたということになります.<br>
00167         カメラの位置の設定には,保存の機能を使うと便利です.
00168         保存を行うと,そのときのカメラの設定をXファイルに書き出してくれます.
00169         よって,<br>
00170 
00171         実行 → キー操作により任意の視点位置に移動 → “名前を変えて”保存 
00172         → 保存したXファイルのカメラ設定を元のファイルにコピー
00173 
00174         という手順で行うと楽です.
00175         保存する際,ボールの位置など仮想世界の状態も一緒に保存してしまうので,
00176         別の名前で保存する必要があります.<br><br>
00177         −作成例− 
00178         - <A href=../../Samples/data/tutorial/rollingBall6.x>rollingBall6.x</A>
00179 
00180         @subsection BroadenFloor 床を広くしてボールを移動
00181         次は,床を広くして,ボールももっと上から転がるように変更します.
00182         床を広くするためには物体の頂点座標を管理している Mesh を変更します.
00183         ボールの位置の変更は FrameTransformMatrix の平行移動成分を変更して行います.<br><br>
00184         −作成例− 
00185         - <A href=../../Samples/data/tutorial/rollingBall7.x>rollingBall7.x</A>
00186 
00187         @subsection SetVessel 箱を配置
00188         ボールをキャッチする箱を配置します.<br>
00189         @ref MakeConcave で作成した箱フレームを追加し,
00190         ボールとの衝突判定を行うように Penalty も追加します.<br><br>
00191         −作成例− 
00192         - <A href=../../Samples/data/tutorial/rollingBall8.x>rollingBall8.x</A>
00193 
00194         @subsection AccelSphere ボールの初期速度を大きくする
00195         箱にボールが入らなかったので,ボールがもっと遠くへ飛んでいくように,
00196         Solid を編集して初期速度を大きくします.<br><br>
00197         −作成例− 
00198         - <A href=../../Samples/data/tutorial/rollingBall9.x>rollingBall9.x</A>
00199 
00200         @subsection SetTexture  背景をつけ,テクスチャを貼る.
00201         箱にボールが入るところまでできたので,少し見た目を向上させるために,
00202         背景を付け,テクスチャも貼ります.<br>
00203         背景は,世界の後方に大きな平面オブジェクトを置いて作ることにします.
00204         テクスチャは,Material の中の TextureFilename で指定します.<br><br>
00205         −作成例− 
00206         - <A href=../../Samples/data/tutorial/rollingBall.x>rollingBall.x</A>
00207 
00208         これでひとまず rollingBall は完成です.
00209 
00210         @subsection Adjustment 各オブジェクト位置の変更
00211         つづいて rollingBall を改良して golf を作っていきます.<br>
00212         まずは,世界をgolf用に変更します.<br><br>
00213         −作成例− 
00214         - <A href=../../Samples/data/tutorial/golf1.x>golf1.x</A>
00215 
00216         行った作業は以下の通りです.
00217         - 床の変更
00218                 - 傾きを水平にした
00219                 - カップを作るために床を4分割した(そのうちの一つには傾斜をつけた)
00220                 - ジャンプ台を低くした
00221         - 球の初期位置,初期速度の変更
00222         - 箱の位置の変更
00223 
00224         @subsection SetPointer 力覚ポインタを作る
00225         SPIDARのグリップ部分に対応するポインタを作ります.
00226         まずは,ポインタのフレームを作成します.
00227         そして,ポインタの物理(Solid,Penalty)を追加します.
00228         データファイル側の作業は以上で終わりです.<br><br>
00229         −作成例− 
00230         - <A href=../../Samples/data/tutorial/golf.x>golf.x</A>
00231         
00232         あとはSPIDARの設定等,プログラムを編集する作業になります.
00233         SPIDARの設定については @ref SPIDAR を参照.
00234 
00235     @section SPIDAR SPIDAR
00236     もうしばらくおまちください....
00237 
00238     @section NewProject 新しくプロジェクトを作る
00239     自分用に新しくプロジェクトを作ります.<br>
00240     プログラムに変更を加えていく場合は,
00241     新しいプロジェクトを作ることをお勧めします.<br>
00242     今回は,簡単な方法ということで既存のプロジェクト(Springhead/src/Samples/DynaHaptic)を
00243     コピーして名前だけ変更するという方法を取ることにします.
00244         -# VSSから $/Project/Springhead/src/Samples/DynaHaptic 以下を取得する.
00245         -# DynaHapticフォルダをコピーし,
00246         適当なところ(Samplesの下でいいと思います)に貼り付ける.
00247         -# 貼り付けたフォルダ内のすべてのファイルの読み取り専用のチェックをはずし,
00248         ファイル名及び各ファイルの中に登場する "DynaHaptic" を
00249         すべて新しいプロジェクト名に置換する.<br>
00250         .dsp, dsw, rc, sccファイルなんかもテキストエディタで開いて置換してください.        -# ビルドして実行する.
00251         ビルドがうまくいかない方は,名前がすべて変更されているか,
00252         または@ref Executionのビルドのところを確認してください.
00253 
00254 
00255 */
00256 
00257 #endif

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