Platform SDK: DirectX |
次のユーザー定義構造体は、2 つの行列間でブレンドする頂点に使用できる。
// // この頂点の柔軟な頂点フォーマット記述子は次のとおりである。 // // dwFVF = D3DFVF_XYZB1 | D3DFVF_NORMAL | D3DFVF_TEX1; // struct D3DBLENDVERTEX { D3DVECTOR v; FLOAT blend; D3DVECTOR n; FLOAT tu, tv; };
「ブレンディングの重み」で説明するように、ブレンドの重みは柔軟な頂点フォーマット内の位置座標および RHW データの後ろで、かつ頂点法線の前になければならない。
前の頂点フォーマットには、ブレンディングの重みが 1 つしかないことに注意する。これは、D3DTRANSFORMSTATE_WORLD および D3DTRANSFORMSTATE_WORLD1 トランスフォーム ステートで定義される 2 つのワールド行列があるためである。これら 2 つの行列間でそれぞれの頂点が、1 つの重みを使用してブレンドされる。行列が 3 つある場合、重みは 2 つ必要である。
次のユーザー定義型は、2 つの行列間でブレンドする頂点に使用できる。
' ' この頂点の柔軟な頂点フォーマット記述子は次のとおりである。 ' ' lFVF = (D3DFVF_XYZB1 Or D3DFVF_NORMAL Or D3DFVF_TEX1) ' Type D3DBLENDVERTEX v As D3DVECTOR blend As Single n As D3DVECTOR tu As Single tv As Single End Type
「ブレンディングの重み」で説明するように、ブレンドの重みは柔軟な頂点フォーマット内の位置座標および RHW データの後ろで、かつ頂点法線の前になければならない。
前の頂点フォーマットには、ブレンディングの重みが 1 つしかないことに注意する。これは、D3DTRANSFORMSTATE_WORLD および D3DTRANSFORMSTATE_WORLD1 トランスフォーム ステートで定義される 2 つのワールド行列があるためである。これら 2 つの行列間でそれぞれの頂点が、1 つの重みを使用してブレンドされる。行列が 3 つある場合、重みは 2 つ必要である。
注 : スキンの重みは簡単に定義できる。ジョイントするオブジェクト間の距離の線形関数を使用するとよいが、より滑らかな S 字関数を使用するとさらによい。スキンの重み分布関数を選択すると、必要に応じてジョイント部に鮮明なしわを付けることができる (短い距離間でスキンの重みの変化を大きくする)。