# クラス fk_IFSTexture

IFSテクスチャを生成、管理するクラス. [詳細]

fk_IFSTextureに対する継承グラフ
[凡例]
fk_IFSTextureのコラボレーション図
[凡例]

すべてのメンバ一覧

## Public メソッド
| fk_IFSTexture (fk_Image *image=(fk_Image *) NULL)
| コンストラクタ
| ~fk_IFSTexture ()
| デストラクタ
void | init (void)
| 初期化関数
fk_TexCoord | getTextureCoord (int tID, int vID)
| テクスチャ座標参照関数
fk_IndexFaceSet * | getIFS (void)
| 形状データ参照関数
void | setTextureCoord (int tID, int vID, fk_TexCoord &coord)
| テクスチャ座標設定関数
bool | readMQOFile (std::string fileName, std::string objName, int materialID=-1, bool contFlg=true)
| MQOファイル入力関数.
bool | readMQOData (unsigned char *buffer, std::string objName, int materialID=-1, bool contFlg=true)
| MQOデータ入力関数.
bool | readD3DXFile (std::string fileName, std::string objName, int materialID=-1)
| DirectX (D3DX) ファイル入力関数.
void | setConnectMode (bool connectFlg)
| 法線連続性設定関数
bool | getConnectMode (void)
| 法線連続性設定関数
bool | moveVPosition (int vID, const fk_Vector &pos, int order=0)
| 頂点移動関数1
bool | moveVPosition (int vID, double x, double y, double z, int order=0)
| 頂点移動関数2
bool | moveVPosition (int vID, double *pos, int order=0)
| 頂点移動関数3
void | setAnimationTime (double t)
| アニメーション時間設定関数
void | setBVHMotion (fk_BVHMotion *bvh)
| BVH データ設定関数.

## 説明

IFSテクスチャを生成、管理するクラス.

このクラスは、「IFSテクスチャ」を制御する機能を提供します。 IFSテクスチャとは、多数の三角形テクスチャをひとまとめにした形状のことで、 実質的には fk_IndexFaceSet クラスに対してテクスチャを付加したものです。 このクラスの主な用途は、 他のモデラー等で作成した形状データファイルを読み込んで表示するというものです。 また、 fk_IndexFaceSet クラスと同様に形状のアニメーションを入力することも可能です。

なお、このクラスでテクスチャ付きの形状データを読み込む場合、 テクスチャデータは 1 個のファイルで構成されていなければならないという制限があります。

実際に利用する際には、まずテクスチャ画像データを設定する必要があります。 画像データの入力や生成については、 fk_Texture のマニュアルを参照して下さい。 形状データの入力と画像データの設定は、どちらが先であっても問題ありません。

本クラスと同様の機能を持つクラスとして、 fk_MeshTexture があります。 fk_MeshTexture クラスと比較した、 本クラスの長所と短所をまとめると以下のようになります。

- 長所
  - 描画速度が速い。
  - D3DXファイルの入力に対応している。
- 短所
  - 3角形テクスチャの動的生成ができない。

ほとんどの用途においては fk_IFSTexture の方が有利と言えますが、 3角形テクスチャの動的生成を行いたい場合は fk_MeshTexture の利用を検討する価値があると言えます。

参照:
  fk_IndexFaceSet, fk_Texture, fk_MeshTexture

## コンストラクタとデストラクタ

fk_IFSTexture::fk_IFSTexture | ( | fk_Image * | image = `(fk_Image *) NULL` | ) |

コンストラクタ

引数によってテクスチャ画像を設定することが可能です。

引数:

  `[in]` | image | テクスチャデータ。 省略されるか、NULL が代入された場合はテクスチャデータを空の状態として生成します。

fk_IFSTexture::~fk_IFSTexture | ( |  | ) |

デストラクタ

## 関数

void fk_IFSTexture::init | ( | void |  | ) |

初期化関数

テクスチャデータおよびテクスチャ座標のデータを全て破棄し、 初期化を行います。

fk_TexCoord fk_IFSTexture::getTextureCoord | ( | int | tID,
|  | int | vID |
| ) |  |  |

テクスチャ座標参照関数

テクスチャ座標を参照します。

引数:

  `[in]` | tID | 三角形ID
  `[in]` | vID | 頂点ID

戻り値:
  テクスチャ座標

fk_IndexFaceSet* fk_IFSTexture::getIFS | ( | void |  | ) |

形状データ参照関数

fk_IFSTexture では、形状データとして fk_IndexFaceSet クラスのインスタンスを保持しています。 この関数は、そのインスタンスのポインタを返します。 ここで得たインスタンスに対して形状を操作することで、 fk_IFSTexture による形状の操作が可能となります。

戻り値:
  fk_IndexFaceSet 型の形状データのポインタ

void fk_IFSTexture::setTextureCoord | ( | int | tID,
|  | int | vID,
|  | fk_TexCoord & | coord |
| ) |  |  |

テクスチャ座標設定関数

テクスチャ座標を設定します。

引数:

  `[in]` | tID | 三角形ID
  `[in]` | vID | 頂点ID
  `[in]` | coord | テクスチャ座標

bool fk_IFSTexture::readMQOFile | ( | std::string | fileName,
|  | std::string | objName,
|  | int | materialID = `-1`,
|  | bool | contFlg = `true` |
| ) |  |  |

MQOファイル入力関数.

MQO形式のファイルからデータを入力します。 この関数で入力できるのは形状とテクスチャ座標データです。 テクスチャ画像データは fk_Texture のメンバ関数によって、 別途入力する必要があります。

MQOデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数:

  `[in]` | fileName | ファイル名
  `[in]` | objName | オブジェクト名
  `[in]` | materialID | MQOデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。
  `[in]` | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。

戻り値:
  ファイルの入力に成功した場合 true を、失敗した場合 false を返します。

参照:
  readMQOData(), fk_IFSTexture::readMQOFile()

bool fk_IFSTexture::readMQOData | ( | unsigned char * | buffer,
|  | std::string | objName,
|  | int | materialID = `-1`,
|  | bool | contFlg = `true` |
| ) |  |  |

MQOデータ入力関数.

MQO形式のデータを入力します。 この関数では、MQO形式のデータが既に unsigned char 型の配列中に入力されていると仮定し、 readMQOFile() 関数と同様の処理を行います。

この関数で入力できるのは形状とテクスチャ座標データです。 テクスチャ画像データは fk_Texture のメンバ関数によって、 別途入力する必要があります。

MQOデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数:

  `[in]` | buffer | データが格納されているバッファ
  `[in]` | objName | オブジェクト名
  `[in]` | materialID | MQOデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。
  `[in]` | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。

戻り値:
  データ入力に成功した場合 true を、失敗した場合 false を返します。

参照:
  readMQOFile(), fk_IndexFaceSet::readMQOData()

bool fk_IFSTexture::readD3DXFile | ( | std::string | fileName,
|  | std::string | objName,
|  | int | materialID = `-1` |
| ) |  |  |

DirectX (D3DX) ファイル入力関数.

DirectX 形式 (X 形式と呼ばれることもあります) のフォーマット (以下、「D3DX形式」) であるファイルからデータを入力します。 この関数で入力できるのは形状、テクスチャ座標データ、 そしてアニメーションデータです。 テクスチャ画像データは fk_Texture のメンバ関数によって、 別途入力する必要があります。

D3DXデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数:

  `[in]` | fileName | ファイル名
  `[in]` | objName | オブジェクト名。 D3DX 形式では、オブジェクト名を省略することが許容されています。 そのような場合は、この引数に空文字列 ( "" ) を入れてください。 この場合、ファイル中で最初に存在するオブジェクトのデータを入力します。
  `[in]` | materialID | D3DXデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。

戻り値:
  ファイルの入力に成功した場合 true を、失敗した場合 false を返します。

void fk_IFSTexture::setConnectMode | ( | bool | connectFlg | ) |

法線連続性設定関数

入力する形状に対して法線連続性の設定を行います。 法線連続性を有効にした場合、 形状全体に対してスムースシェーディングの効果を有効とします。 この場合は、各ポリゴン同士の境界がわかりづらくなります。 法線連続性を無効にした場合、 ポリゴン同士のスムースシェーディングは行いません。 そのため、各ポリゴン同士の描画が明確となります。

なお、この関数による設定はファイル入力よりも前に行う必要があります。 既に入力したデータに対しては適用されません。

引数:

  `[in]` | connectFlg | true の場合、法線連続性が有効となります。false の場合は無効となります。

参照:
  getConnectMode()

bool fk_IFSTexture::getConnectMode | ( | void |  | ) |

法線連続性設定関数

法線連続性の設定を参照します。 法線連続性の詳細については、 setConnectMode() を参照して下さい。

戻り値:
  true の場合、法線連続性が有効であることを意味します。 false の場合は無効であることを意味します。

参照:
  setConnectMode()

bool fk_IFSTexture::moveVPosition | ( | int | vID,
|  | const fk_Vector & | pos,
|  | int | order = `0` |
| ) |  |  |

頂点移動関数1

形状の頂点を移動します。

引数:

  `[in]` | vID | 頂点ID
  `[in]` | pos | 移動位置ベクトル
  `[in]` | order | 全頂点ID のうち、もっとも最小の ID 番号

戻り値:
  頂点移動が成功したら true を、失敗したら false を返します。

bool fk_IFSTexture::moveVPosition | ( | int | vID,
|  | double | x,
|  | double | y,
|  | double | z,
|  | int | order = `0` |
| ) |  |  |

頂点移動関数2

形状の頂点を移動します。

引数:

  `[in]` | vID | 頂点ID
  `[in]` | x | 移動位置ベクトルの x 成分
  `[in]` | y | 移動位置ベクトルの y 成分
  `[in]` | z | 移動位置ベクトルの z 成分
  `[in]` | order | 全頂点ID のうち、もっとも最小の ID 番号

戻り値:
  頂点移動が成功したら true を、失敗したら false を返します。

bool fk_IFSTexture::moveVPosition | ( | int | vID,
|  | double * | pos,
|  | int | order = `0` |
| ) |  |  |

頂点移動関数3

形状の頂点を移動します。

引数:

  `[in]` | vID | 頂点ID
  `[in]` | pos | 移動位置ベクトルを示す double 型配列の先頭アドレス。
  `[in]` | order | 全頂点ID のうち、もっとも最小の ID 番号

戻り値:
  頂点移動が成功したら true を、失敗したら false を返します。

void fk_IFSTexture::setAnimationTime | ( | double | t | ) |

アニメーション時間設定関数

D3DX形式の入力や BVH データ設定によってアニメーションが設定されていた場合、 形状を指定した時間に対応する状態に設定します。

引数:

  `[in]` | t | 時間

void fk_IFSTexture::setBVHMotion | ( | fk_BVHMotion * | bvh | ) |

BVH データ設定関数.

入力した形状データに対し、 fk_BVHMotion によるのモーションデータを設定します。

引数:

  `[in]` | bvh | モーションデータ