>3Dの基本単位は三角形です。それは、三角形があれば大抵の図形、立体を表現できるからです。四角形であれば、三角形を2つつなげればできますし、直方体ならその四角形を6つつなげればできます。細かい三角形をつなげれば擬似的に球のようなものも作れます。平面を集めれば球になります。ミラーボールのようなイメージです。人間のような複雑なものも細かい三角形を集めて表せます。三角形を利用することにより、一意の平面を表現できます。これが四角形だった場合はどうでしょう。4頂点が同一平面にある場合のみしか平面を表現できません。すると3Dの作成時には常にそのことに気をつけなければならず、ミスの発生にもつながります。3Dに興味がおありの方はどこかでワイヤーフレームというものを見たことがあるのではないでしょうか。あれを良く見てもらえば分かりますが、三角形で構成されています。』と検索すると沢山出てきます。ゲームのキャラクター等で、3万ポリゴンと言えば、そのキャラクターには細かな三角形が3万個も使われていることになります。三角形が多ければ多いほど滑らかになりますので、このポリゴン数はリアリティやディティールの細かさを示す指標として使われることもあります。ポリゴン数が増えればコンピューターへの負荷も高くなります。』と表現したりします。これは1秒間に3万2千個の三角形を表示できるということです。3万ポリゴンのキャラクターであれば1体しか表示することができません。キャラクターをどうしても2体表示したい場合、このキャラクターの3Dを16,000ポリゴン以下で作り直さなければなりません。するとリアリティが下がります。これが3Dゲーム開発の考え方です。参考までに、PS2は6,600万ポリゴン/秒らしいです。>それでは早速その最小単位である三角形を一つ描画してみましょう。今回はこのような頂点座標を持つ三角形を描画してみます。例にならって三角形の情報を保持するクラス変数を定義します。NULL;開放処理の説明はもう省きますが、今まで通りアプリケーションの終了時にデバイスよりも先に開放してください。三角形を描くにはその頂点座標に関する情報が必要です。その色に関する情報も必要です。そこでそれぞれ以下のように宣言/定義します。(D3DFVF_XYZ|D3DFVF_DIFFUSE)最初の構造体は、実際に情報を格納するための構造体です。頂点座標とその色を宣言しています。次のdefineでは、作成した頂点情報の構造体がどのようなものであるかを定義しています。2つの定数をまとめて1つの定数にしています。これは構造体情報と同じにしておかなくてはなりません。今回は頂点座標とその色を宣言したいますので、それに関する定数が使用されています。』というのが色を表します。』といってもDirectXでは何種類かに分かれているのですが、それはまた別の章で解説します。次に、これは今回のみのお決まりですが、カリングの設定を無効にします。カリングとは、ポリゴンの背面を描画するかどうかの設定です。DirectXのポリゴンは頂点を時計回りに描画すると、その面が表になります。そのポリゴンを裏から見ると、頂点は半時計周りに描画されているように見えます。よって半時計周りに描画されたポリゴンは裏になります。背面描画をなしにすると、描画の負荷が減らせます。3Dゲームを開発する際、表も裏も見なければならないドア等は、カリングしてはいけません。カリングすると反対側から見たときにドアがなくなります。逆に、サイコロのように常に表が外側を向いているものはカリングを行ったほうが良いです。今回は、三角形の座標を色々変えて学習できるようにするため、カリングを行わない設定にします。);ちなみに、カリングの有効/無効は任意のタイミングで変更することができます。今回はライトをオフにします。ただでさえ新情報が多いのにライトまでやるとパニックになりますので。』の章で詳しく取り上げます。>それでは実際に三角形の情報を作成しましょう。ここで作成する三角形について確認しておきましょう。この三角形の情報を上で定義した構造体を使って作成してみましょう。,};構造体の配列に、x、y、z、とその色情報を格納しています。頂点情報を格納するクラスを作成します。それは以下のコードによって実現されます。pSharedHandle);『Length』には格納する情報のサイズを設定します。『Usage』にはとりあえず『0』を設定してください。『FVF』には、作成する頂点情報がどのようなものであるかを設定します。『Pool』にはとりあえず『D3DPOOL_DEFAULT』を設定してください。『ppVertexBuffer』には作成した情報を格納するクラス変数を指定してください。『pSharedHandle』にはとりあえず『NULL』を指定してください。これで頂点情報を格納するクラスができました。頂点情報は入っていません。先程作成したクラスをロックします。);そしてそこへ、構造体から頂点情報を流し込みます。);そして最後にロックを解除します。g_pVB->Unlock();以下の流れを覚えてください。以上で三角形の情報作成が完了しました。>3Dの世界は最初混沌としています。真っ暗な無重力の宇宙に放り出されたようなものです。x、y、zの座標はあるものの、あまり意味はありません。地面もない、上下左右もない、なのでどこを向いているのかも分からない、自分がどこにいるのかも分からない。それらは全て自分で設定しなければなりません。自分で世界を作るのです。神様みたいなものですね。何か宗教を作りたくなってきますね。世界の中心を決めます。世界の中心はx、y、z軸が交わる原点で良いので、以下のようにして設定します。』は基本的なマトリックスを作成する関数です。この関数により、原点に関するマトリックスが作成されます。』で設定されています。この関数はマトリックスを設定する関数で、第1引数に与えるフラグによって設定されるマトリックスを判断します。次に、カメラ(自分の視点)を設定する必要があります。カメラには3つの情報が必要です。』というのはカメラの上をどの方向にするかということです。通常はy軸方向で良いと思いますが、演出でカメラを傾けたい場合等もあると思います。そのためにこの項目も指定する必要があります。これらの情報はD3DXVECTOR3構造体に格納して、マトリックスを作成します。以下にそのマトリックスを作成するコードを示します。』を利用して設定しています。最後にプロジェクションマトリックスを作成します。』と思っておいてください。);そしてこれら一連の処理は描画を行う直前に呼び出します。>それでは実際にポリゴンを表示してみます。ポリゴン描画の流れは以下の通りです。描画処理まず、ポリゴンの情報を渡すコードです。Stride);『StreamNumber』にはとりあえず『0』を指定してください。『pStreamData』には頂点情報のクラスへのポインタを渡します。『OffsetInBytes』にはオフセットを指定します。通常は『0』で良いです。『Stride』には頂点情報構造体の、1つあたりのサイズを指定します。実際には以下のように実行します。));次にフォーマットを渡します。);最後に描画します。描画する関数は以下の通りです。PrimitiveCount);『PrimitiveType』には描画する三角形の種類を指定します。次章で詳しく説明しますので、今回は流してください。『StartVertex』には描画する頂点のオフセットを指定します。頂点情報が3つ以上ある場合に使用します。『PrimitiveCount』描画する三角形の個数を指定します。実際には以下のように実行します。>このサンプルを実行すると、クライアント領域にカラフルな三角形が表示されます。)から見ているので、そのような見え方になっています。ポイントはピンク色で示してあります。