Havok)を使うためのライセンスについて確認しました。大切なので未読の方は一読を。Havokを導入してみましょう。Havokのホームページからダウンロード出来ます。サイトに行くと個人情報の記入欄があります。嘘つかずに記入しましょう(^-^)。記入後Submitすると前章で紹介したHavok使用におけるライセンス条文が出てきます。十分な確認をして下さい。その後Acceptに進むとDLサイトにジャンプします。VS2008)」がSDKです。今回はVS2008で開発しようと思いますので、こちらをDLすることにしました。SDKのサイズはかなりでかいです(750MBくらい)。DLファイルを回答すると幾つかのフォルダが出現します。特定の場所に移しておきましょう。私はC:/prj/havokフォルダを作り、そこに解凍したフォルダ内を移動させました:さて、ここからどうするか...。上のフォルダのDocs内にマニュアルがあり、そこに「Havok_Physics_Animation_710_Pc_Xs_Quickstart_Guide.chm」というクイックスタートがあるのですが、ん〜どうも微妙。何だかわかるようなわからないような感じです。床に落ちるキューブを目指してチュートリアルはありませんが、Havokには500を越えるサンプルプログラムがあります。これらとマニュアルとをにらめっこしながら、少しずつ進めていきます。目標を「Havokを使ってキューブを8個を高さ100mから高さ0の床めがけて垂直落下させる」という物理現象を再現する事に定めましょう。複数のキューブを設定することでオブジェクト同士の衝突の仕組みが理解できます。高さの概念から重力の設定方法を学べ、床の概念は重力に影響されない動かないものの定義、垂直落下はステップ実行の仕組みを学べるというわけです。Havokは最低限の動作環境を作るのが大変なのですまずはプロジェクトを立ち上げます。Studioに新規で空のWin32アプリケーションを作ります。C:\prj\havok\Lib\win32_net_9-0\release_multithreadedこれでヘッダーとLibへのパスが通りました。続いてテスト用の.cppとなるmain.cppを一つ作ってください。"d3dx9.lib")うげ〜っとなるのですが、これ全部必要です。Havokはライブラリが細かく分離されているため沢山プロジェクトに加える必要があります。ヘッダーには宣言順番の依存関係があり、keycode.cxxは最初の方で宣言しないとリンカーエラーが出ます。よって上の順番を守ってください。Havokの主幹となるヘッダーはhkBase.hです。メモリ管理サポートをするhkMemoryInitUtil.hが必要になります。Havokの世界(空間)を作るのがその名の通りhkpWorld.h内で宣言されています。その世界の中で存在するオブジェクトがhkpRigidBody.h、剛体としての性質をつけてくれるのがhkpInertiaTensorComputer.h...などとなっています。windows.h以下は描画周りのヘッダーで、これはHavokと直接は関係ありません。今回はDirectXで描画をしてみます。Physics)は物理現象を数値的に計算する仕組みなので、その結果はプログラマが可視化する必要があります。世界を定義しよう物理現象は何らかの「場」で発生します。その場をHavokでは「World」と読んでいます。);ここ、スンゴイ大切なので上から余すこと無く説明していきますよ。hkMemoryRouterクラスのオブジェクトを一つ作ります。このクラスはいわゆる「メモリアロケータ」です。メモリアロケータというのは、メモリを確保したり開放したりする仕組みを提供してくれる人の事です。通常私たちは何気なくnewやdeleteをしていますが、実はあの裏ではデフォルトのメモリアロケータが頑張ってメモリ管理をしてくれているんです。Havokのような複雑なライブラリの場合、デフォルトではなく独自のメモリアロケータを使って効率良くメモリ管理をするのが普通です(商用ゲームもそうです)。そのメモリアロケータを作っているのが最初の1行目というわけです。続いて、それをhkBaseSystem::initメソッドに渡しています。Havokのシステムのメモリアロケータをこれで設定したわけです。HAvok内でエラーが起きた時によばれます}この関数はHavok内でエラーが起きた時に呼ばれます。ここまででHavokが動くための基盤設定ができました。下から2行目を御覧ください。hkpWorld」とWorldオブジェクトを作っています。この引数に渡している「info」。ここに世界の性質を決めるパラメータが定義されているわけです。infoはhkpWorldCinfoクラスです。hkpWorldCinfoクラスはWorldに関するパラメータを非常に細かく設定できます。上で設定している分だけを見ていきましょう。