この節では、単純な立方体を例として、テクスチャ、フレーム、アニメーションを立方体に追加する方法を説明する。
このファイルは、4つの赤い面と2つの緑の面を持つ単純な立方体を定義する。このファイル中のオプション情報が、Meshテンプレートによって定義されるデータオブジェクトに情報を追加するのに使用されていることに注意する。
Material RedMaterial { 1.000000;0.000000;0.000000;1.000000;; // R = 1.0, G = 0.0, B = 0.0 0.000000; 0.000000;0.000000;0.000000;; 0.000000;0.000000;0.000000;; } Material GreenMaterial { 0.000000;1.000000;0.000000;1.000000;; // R = 0.0, G = 1.0, B = 0.0 0.000000; 0.000000;0.000000;0.000000;; 0.000000;0.000000;0.000000;; } // 8頂点と12面(三角形)を持つメッシュを定義する。 // メッシュ中のオプションデータオブジェクトを使用して // マテリアル、法線およびテクスチャ座標を指定する。 Mesh CubeMesh { 8; // 8頂点 1.000000;1.000000;-1.000000;, // 頂点0 -1.000000;1.000000;-1.000000;, // 頂点1 -1.000000;1.000000;1.000000;, // など 1.000000;1.000000;1.000000;, 1.000000;-1.000000;-1.000000;, -1.000000;-1.000000;-1.000000;, -1.000000;-1.000000;1.000000;, 1.000000;-1.000000;1.000000;; 12; // 12面 3;0,1,2;, // 面0には3頂点がある。 3;0,2,3;, // など 3;0,4,5;, 3;0,5,1;, 3;1,5,6;, 3;1,6,2;, 3;2,6,7;, 3;2,7,3;, 3;3,7,4;, 3;3,4,0;, 3;4,7,6;, 3;4,6,5;; // 必須データがすべて定義された。ここで、オプションデータを定義 // する。定義には、ファイルフォーマットの階層的性質を使用する。 MeshMaterialList { 2; // 使用するマテリアル数 12; // 各面のマテリアル 0, // 面0が最初の 0, // マテリアルを使用する。 0, 0, 0, 0, 0, 0, 1, // 面8が2番目のマテリアルを 1, // 使用する。 1, 1;; {RedMaterial} // マテリアル0と1の {GreenMaterial} // 定義への参照。 } MeshNormals { 8; // 8法線を定義する。 0.333333;0.666667;-0.666667;, -0.816497;0.408248;-0.408248;, -0.333333;0.666667;0.666667;, 0.816497;0.408248;0.408248;, 0.666667;-0.666667;-0.333333;, -0.408248;-0.408248;-0.816497;, -0.666667;-0.666667;0.333333;, 0.408248;-0.408248;0.816497;; 12; // 12面に対して 3;0,1,2;, // 法線を定義する。 3;0,2,3;, 3;0,4,5;, 3;0,5,1;, 3;1,5,6;, 3;1,6,2;, 3;2,6,7;, 3;2,7,3;, 3;3,7,4;, 3;3,4,0;, 3;4,7,6;, 3;4,6,5;; } MeshTextureCoords { 8; // 各頂点に対して、 0.000000;1.000000; // テクスチャ座標を定義する。 1.000000;1.000000; 0.000000;1.000000; 1.000000;1.000000; 0.000000;0.000000; 1.000000;0.000000; 0.000000;0.000000; 1.000000;0.000000;; } }
テクスチャを追加するには、ファイルフォーマットの階層的性質を利用し、オプションのTextureFilenameデータオブジェクトをMaterialデータオブジェクトに追加する。したがって、Materialオブジェクトは、以下のようになる。
Material RedMaterial { 1.000000;0.000000;0.000000;1.000000;; // R = 1.0, G = 0.0, B = 0.0 0.000000; 0.000000;0.000000;0.000000;; 0.000000;0.000000;0.000000;; TextureFilename { "tex1.ppm"; } } Material GreenMaterial { 0.000000;1.000000;0.000000;1.000000;; // R = 0.0, G = 1.0, B = 0.0 0.000000; 0.000000;0.000000;0.000000;; 0.000000;0.000000;0.000000;; TextureFilename { "win95.ppm"; } }
この項では、フレームとアニメーションを単純な立方体に追加する方法を説明する。
フレームは以下の構造体をとることが要求される。
Frame Aframe { // フレーム名は便宜上選択したものである。 FrameTransformMatrix { ...変換データ... } [メッシュ ]および/あるいは[さらにフレーム] }
事前に定義した立方体メッシュをフレーム内部に恒等変換で置く。その後、アニメーションをこのフレームに追加する。
Frame CubeFrame { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000;; } {CubeMesh} // メッシュインラインを使用することもできる // が、代わりにオブジェクト参照を使用する。 }
DirectXファイルフォーマット中のアニメーションとアニメーションセットは、Direct3D保持モードのアニメーションの概念に直接マップされる。
Animation Animation0 { // 名前は便宜的に選択されたものである。 { 通常、参照が適用されるフレーム } AnimationKey { ...アニメーションキーデータ... } { ...さらにアニメーションキー... } }
この後、次のようにアニメーションは、アニメーションセットにグループ化される。
AnimationSet AnimationSet0 { // 名前は便宜的に選択したものである。 { アニメーション - インラインでも参照でも良い } { ... さらにアニメーション ... } }
ここですることは、アニメーションを通して立方体をとることである。
AnimationSet AnimationSet0 { Animation Animation0 { {CubeFrame} // 立方体を含むフレームを使用する。 AnimationKey { 2; // 位置キー 9; // 9キー 10; 3; -100.000000, 0.000000, 0.000000;;, 20; 3; -75.000000, 0.000000, 0.000000;;, 30; 3; -50.000000, 0.000000, 0.000000;;, 40; 3; -25.500000, 0.000000, 0.000000;;, 50; 3; 0.000000, 0.000000, 0.000000;;, 60; 3; 25.500000, 0.000000, 0.000000;;, 70; 3; 50.000000, 0.000000, 0.000000;;, 80; 3; 75.500000, 0.000000, 0.000000;;, 90; 3; 100.000000, 0.000000, 0.000000;;; } } }
トップに戻る
© 1999 Microsoft and/or its suppliers. All rights reserved. Terms of Use.