Microsoft DirectX 8.0 (Visual Basic) |
ライトを使用するための条件の 1 つは、各サーフェスが法線を持っていることである。これを処理するために、Lights サンプル プロジェクトでは別のカスタム頂点タイプを使用する。新しいカスタム頂点フォーマットには、3D 位置座標とサーフェスの法線が含まれる。サーフェスの法線は、Microsoft® Direct3D によって内部的にライティングの計算に使用される。
' カスタム頂点タイプの構造体。 Private Type CUSTOMVERTEX postion As D3DVECTOR ' 頂点 3D 位置。 normal As D3DVECTOR ' 頂点のサーフェス法線。 End Type ' カスタム頂点構造体を記述するカスタム FVF。 Const D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZ Or D3DFVF_NORMAL)
これで正しいベクトル フォーマットが定義されたので、Lights サンプル プロジェクトではアプリケーション定義関数 InitGeometry を呼び出して円柱を作成する。最初のステップは、頂点バッファに円柱のポイントを設定することである。次のコードでは、各ポイントが位置座標と法線によって定義されていることに注意すること。
For i = 0 To 49 theta = (2 * g_pi * i) / (50 - 1) Vertices(2 * i + 0).postion = vec3(Sin(theta), -1, Cos(theta)) Vertices(2 * i + 0).normal = vec3(Sin(theta), 0, Cos(theta)) Vertices(2 * i + 1).postion = vec3(Sin(theta), 1, Cos(theta)) Vertices(2 * i + 1).normal = vec3(Sin(theta), 0, Cos(theta)) Next
2 番目のステップは、次のコードのように、円柱のポイントを格納する頂点バッファを作成することである。
Set g_VB = g_D3DDevice.CreateVertexBuffer(VertexSizeInBytes * 50 * 2, _ 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT) If g_VB Is Nothing Then Exit Function
頂点バッファに円柱の頂点を設定したら、頂点バッファをレンダリングすることができる。ただし、円柱をレンダリングする前に、このシーンのマテリアルとライトを設定する必要がある。これについては、「ステップ 2 : マテリアルおよびライトの設定」で説明する。