TOYSTUDIO SDK
1.6.1.3
|
ポリゴン(多角形) データはメッシュ タイプ(TA_OBJECT_MESH)か、 ジョイント タイプ(TA_OBJECT_JOINT)のオブジェクトのみで利用できます。 ジョイント タイプの場合、ポリゴンはスキニング時のボーンの影響範囲として機能します。 オブジェクトは以下のように頂点のリスト、面のリストを持っています。 面が頂点を参照することで、ポリゴンを構成します。
頂点は三次元空間上のポイントを定義します。 頂点ごとに三次元座標値を持ち、 スキニング用のボーン インデックスとウェイトを4個(TA_MAX_VERTEX_BONE_COUNT)ずつ持つことができます。
三次元座標値はベクトル値(TA_VECTOR)で扱い、 CTaObject::GetVertexPositions() で取得、 CTaObject::SetVertexPositions() でセットします。
ボーン インデックスはバイト値(0〜255)で扱い、 ボーン ウェイトはfloat値で扱います。 CTaObject::GetVertexBones() で取得、 CTaObject::GetVertexBones() でセットします。 4個のボーン ウェイトの合計は1である必要があります。 オブジェクトのスキニングが無効な場合でも、頂点のボーン データは保持されます。
面は頂点を参照することでポリゴン(多角形)を定義します。 面ごとにマテリアル(CTaMaterial)の参照を持ち、 ポリゴンの頂点ごとに、頂点の参照、フラット シェーディング フラグ、 法線ベクトル、頂点カラーを持ち、 テクスチャ用のUV座標値を持つことができます。 TOYSTUDIOではポリゴンとして三角形か四角形を使用しますが、 より頂点数の多いポリゴンについての制限はありません。
マテリアルの参照は、 CTaMaterial のポインタで扱います。 CTaObject::GetFaceMaterials() で取得、 CTaObject::SetFaceMaterials() でセットします。 ポインタがNULLの場合は表示にデフォルト マテリアルが利用されます。
頂点の参照は、 CTaObject::GetFaceVertexIndices() で頂点のインデックスを取得します。
フラット シェーディング フラグはBOOL値で扱い、 TRUEの場合フラット シェーディング、 FALSEの場合スムーズ シェーディングとなります。 CTaObject::GetFaceVertexFlatShades() で取得、 CTaObject::SetFaceVertexFlatShades() でセットします。
法線ベクトルは、 CTaObject::GetFaceVertexNormals() でベクトル値(TA_VECTOR)を取得します。
頂点カラーは TA_COLOR 値で扱い、 CTaObject::GetFaceVertexColors() で取得、 CTaObject::SetFaceVertexColors() でセットします。
UV座標値は2Dベクトル値(TA_VECTOR_2D)で扱い、 CTaObject::GetFaceVertexUVs() で取得、 CTaObject::SetFaceVertexUVs() でセットします。
ポリゴンの追加は、以下の順番で行います。
1.では、 CTaObject::AddVertex() や CTaObject::AddVertices() で頂点を追加します。 頂点の追加後には、 CTaObject::SetVertexBones() で頂点のボーン インデックス、 ボーン ウェイトをセットできます。
2.では、 CTaObject::AddFace()や CTaObject::AddFaces()で面を追加します。 面の追加後には、 CTaObject::SetFaceMaterials() でマテリアルの参照をセット、 CTaObject::SetFaceVertexFlatShades() でフラット シェーディング フラグのセット、 CTaObject::SetFaceVertexColors() で頂点カラーのセット、 CTaObject::SetFaceVertexUVs() でUV座標値のセットを行えます。
3.では、 CTaObject::UpdateMeshTopology() でポリゴンの接続関係を更新します。 ポリゴンの不正な面や頂点を取り除きたい場合、 この処理の前に CTaObject::CleanUpMesh() を実行します。
4.では、 CTaObject::UpdateMeshNormals() でポリゴンの法線ベクトルを更新します。 これにより、 CTaObject::GetFaceNormals() で取得されるポリゴンの面の法線ベクトルや、 CTaObject::GetFaceVertexNormals() で取得されるポリゴンの頂点の法線ベクトルが更新されます。
5.では、 CTaObject::UpdateBoundBox() でオブジェクトのバウンド ボックスを更新します。 バウンド ボックスはオブジェクトの選択時などにオブジェクトの周り表示される枠です。 最後に、 CTaObject::UpdateGraphics() でオブジェクトのグラフィックスを更新します。