概要3Dモデルは複数のポリゴンが集まってできており、ゲームで使用される3Dモデルはサーフェスモデルが使用されています。3Dモデルはメッシュとも呼ばれています。ポリゴンやサーフェスモデルについてはポリゴンの項目に記述がありますので、そちらを確認して下さい。使用データ今回は立方体のXファイルBox.xとそのファイルを確認するためのビューワDirectXViewerを使用しますので、以下のリンクからダウンロードして下さい。3Dモデルパラメータ3Dモデルに設定されているパラメータは以下のものがあります。各ファイル毎に記述形式が異なりますが、描画に必要な情報として設定されています。内容は3Dモデルを形成するための「頂点バッファ」と「インデックスバッファ」です。以下は立方体の3Dモデルの頂点情報を抜粋したものです。インデックスバッファ情報4;3,2,4,5;,4;5,4,6,7;,4;7,6,1,0;,4;1,6,4,2;,4;7,0,3,5;;}頂点設定では頂点バッファとインデックスバッファの設定を行います。各設定項目の内容は以下の通りです。1.頂点数モデル形成するための頂点数を指定します。今回の立方体では8つの頂点情報が必要なので、設定する値は8となります。2.頂点座標1で設定した頂点数1つ1つに頂点座標の設定を行います。座標はX軸、Y軸、Z軸の順番で設定します。3.ポリゴン数1の頂点を作成するポリゴンの数を指定します。立方体で必要な面の数は6つなので「6」を指定します。4.インデックスバッファ情報3のポリゴンの数に対して1つ1つポリゴンの設定を行います。頂点上から算出されるベクトルでポリゴンから直行したベクトルです。このベクトルを利用して陰影処理やポリゴンの表裏判定を行います。次の項目で説明するマテリアルの設定の一部は法線情報が存在しないと動作しません。以下は立方体の3Dモデルの法線情報を抜粋したものです。※Box.xの頂点情報定義の下に以下の内容を追加して下さい。4.各頂点に使用する法線4;0,0,0,0;,4;1,1,1,1;,4;2,2,2,2;,4;3,3,3,3;,4;4,4,4,4;,4;5,5,5,5;;}法線情報は法線の定義と、定義した法線を各ポリゴンの頂点1つ1つに設定します。定義する法線ベクトルの数を指定します。2.法線ベクトル(XYZ)法線ベクトルの指定をします。法線を適用するポリゴンの数を指定します。このポリゴンの数は頂点情報で指定しているインデックスバッファの数が使用されます。法線ベクトルの番号を指定します。法線の確認のしかたDirectXViewerには法線視覚化できるをオプション機能があるので、それを利用して法線を見てみたいと思います。Viewerの下部にある「View」をクリックします。その後、複数のチェックボックスが表示されるので「Normals」にチェックを入れてください。マテリアル情報マテリアルとはポリゴンに色を付けるために必要な情報のことです。このマテリアルを使用することにより、色や光沢、材質感を表現することができます。マテリアル情報マテリアル情報には「アンビエント」や「ディフューズ」「エミッシブ」などがあり、ファイルのフォーマットにより設定できる項目が異なります。「反射」の説明しています。ディフューズディフューズは拡散光と呼ばれており、ライトなどによる光の当たり方による反射する色を設定することができます。このディフーズを利用することで光の当たり方による陰影を表現することが可能です。ディフューズの色の決定は法線ベクトルと光のベクトルを利用した計算で算出されるので、ディフューズを利用するためには法線情報が必須となります。エミッシブエミッシブは「放射光」と呼ばれており、そのマテリアル自体が発している色です。設定した色情報が表現されます。スペキュラースペキュラーは「鏡面光」と呼ばれており、ライトなどの光を反射した金属などの輝きを表現できます。この反射の度合いが強いほど強く反射し、度合いが低いほど弱く反射します。スペキュラーも法線情報は必須です。反射スペキュラーの反射の度合いを設定します。値が小さいほど弱い反射を表現できます。以下は立方体の3Dモデルのマテリアル情報を抜粋したものです。※Box.xの法線情報定義の下に以下の内容を追加して下さい。4-4.エミッシブカラーRGB0.000000;0.000000;0.000000;;}}マテリアル情報はマテリアルの定義と、定義したマテリアルを各ポリゴンの1つ1つに設定します。定義しているマテリアルの数を指定します。2.ポリゴンの数マテリアルを設定するポリゴンの数を指定します。この数値にはインデックスバッファの数が使用されます。3.ポリゴンに使用するマテリアル番号2のポリゴン1つ1つに定義したマテリアルの番号を指定していきます。マテリアルの定義番号は「0」番から始まります。4.マテリアル定義ディフューズカラーなどの設定を行います。マテリアルの定義はマテリアルの数の設定の前に行っても問題ありません。ディフューズカラーの設定をRBGAの順番で行います。スペキュラーカラーの設定を行います。値の型はfloat型です。スペキュラーカラーの設定をRBGの順番で行います。エミッシブカラーの設定をRBGの順番で行います。変更Box.xの色情報を変えてその変化を見たいと思います。1.0)に変更してBoxの色が変わるのを確認して下さい。1.0)に変更して色の変化を確認して下さい。{1.000000;1.000000;1.000000;1.000000;;0.000000;0.000000;0.000000;0.000000;;0.000000;0.000000;1.000000;;}UV情報UV情報はマテリアルに設定されているテクスチャのUVに関する情報です。UVの数は頂点バッファの数だけ用意されます。この情報を利用してモデルにテクスチャが展開されます。ファイル情報Xファイルのテクスチャはマテリアルに付与します。以下のファイルをダウンロードして下さい。2.UV座標0.000000;0.000000;,1.000000;0.000000;,1.000000;1.000000;,0.000000;1.000000;,0.000000;0.000000;,1.000000;0.000000;,1.000000;1.000000;,0.000000;1.000000;,0.000000;0.000000;,1.000000;0.000000;,1.000000;1.000000;,0.000000;1.000000;,0.000000;0.000000;,1.000000;0.000000;,1.000000;1.000000;,0.000000;1.000000;,1.000000;1.000000;,0.000000;1.000000;,0.000000;0.000000;,1.000000;0.000000;;}UV情報は頂点1つ1つに対して設定を行います。内容は以下の通りです。指定するUVの数です。この数は頂点バッファの頂点数と同じ数になります。展開するUV座標で左からU値、V値となります。ここで指定した値は頂点バッファの上から順番に設定されていきます。最初のUV座標は頂点バッファの0番目、2番目のUV座標は頂点バッファの1番目に設定されます。UV展開の問題点なぜ最初のXファイルではUV情報の説明を行うのに問題があったかというと頂点数が少ないと設定できるUV情報も少なくなるためにこちらが表現したい設定ができない可能性があります。最初にダウンロードしてもらったBox.xの頂点数は8でした。立方体全ての面に図のようなテクスチャを貼り付けることは不可能です。設定できるUV数を増やす必要があります。探している内容が見つからなかったら以下のサイトにあるかもしれません。筆者が開発にかかわらせてもらったアプリのリンクです。