FineKernelToolKit: FK::fk_IndexFaceSet クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_IndexFaceSet クラス

インデックスフェースセットによる任意形状を生成、管理するクラス [詳解]

`#include <FK/IndexFace.h>`

FK::fk_IndexFaceSet の継承関係図
[凡例]
FK::fk_IndexFaceSet 連携図
[凡例]

## 公開メンバ関数

| fk_IndexFaceSet (void)
| コンストラクタ
virtual | ~fk_IndexFaceSet ()
| デストラクタ
void | cloneShape (fk_IndexFaceSet *ifs)
| 形状コピー関数
ファイル・データ入力関数
bool | readSMFFile (std::string fileName)
| SMFファイル入力関数
bool | readVRMLFile (std::string fileName, bool materialFlg=true, bool solidFlg=true)
| VRML ファイル入力関数
bool | readSTLFile (std::string fileName, bool solidFlg=true, double tolerance=1.0e-08)
| STL ファイル入力関数
bool | readHRCFile (std::string fileName)
| HRCファイル入力関数
bool | readRDSFile (std::string fileName, bool solidFlg=true)
| RDSファイル入力関数
bool | readDXFFile (std::string fileName, bool solidFlg=true)
| DXFファイル入力関数
bool | readMQOFile (std::string fileName, std::string objName, bool solidFlg=true, bool contFlg=true, bool materialFlg=false)
| MQOファイル入力関数1
bool | readMQOFile (std::string fileName, std::string objName, int materialID, bool solidFlg=true, bool contFlg=true, bool materialFlg=false)
| MQOファイル入力関数2
bool | readMQOData (unsigned char *buffer, std::string objName, bool solidFlg=true, bool contFlg=true, bool materialFlg=false)
| MQOデータ入力関数1
bool | readMQOData (unsigned char *buffer, std::string objName, int materialID, bool solidFlg=true, bool contFlg=true, bool materialFlg=false)
| MQOデータ入力関数2
bool | readD3DXFile (std::string fileName, std::string objName, bool solidFlg=true)
| DirectX (D3DX) ファイル入力関数1
bool | readD3DXFile (std::string fileName, std::string objName, int materialID, bool solidFlg=true)
| DirectX (D3DX) ファイル入力関数2
ファイル出力関数
bool | writeVRMLFile (std::string fileName, fk_Material *material=nullptr, bool triFlg=false)
| VRML ファイル出力関数1
bool | writeVRMLFile (std::string fileName, std::vector< double > *time, std::vector< fk_Vector > *pos, fk_Material *material=nullptr, bool triFlg=false)
| VRML ファイル出力関数2
bool | writeSTLFile (std::string fileName)
| STL ファイル出力関数
bool | writeDXFFile (std::string fileName, bool triFlg=false)
| DXF ファイル出力関数
bool | writeMQOFile (std::string fileName)
| MQO ファイル出力関数
形状情報参照関数
int | getPosSize (void)
| 頂点数参照関数
int | getEdgeSize (void)
| 稜線数参照関数
int | getFaceSize (void)
| 面数参照関数
fk_Vector | getPosVec (int vertexID)
| 頂点位置ベクトル参照関数
std::vector< int > | getFaceData (int faceID)
| 頂点 ID 配列参照関数
int | getFaceData (int faceID, int vertexNum)
| 頂点 ID 参照関数
fk_Vector | getFaceNorm (int faceID, int order=0)
| 面法線ベクトル取得関数
fk_Vector | getVertexNorm (int vertexID, int order=0)
| 頂点法線ベクトル取得関数
汎用形状操作関数
bool | moveVPosition (int vertexID, const fk_Vector &pos, int order=0)
| 頂点移動関数1
bool | moveVPosition (int vertexID, double x, double y, double z, int order=0)
| 頂点移動関数2
bool | moveVPosition (int vertexID, double *array, int order=0)
| 頂点移動関数3
void | makeIFSet (int faceNum, int polyNum, int *IFSet, int vertexNum, fk_Vector *posArray, bool smoothMode=false, int order=0)
| 任意形状生成関数1
void | makeIFSet (int faceNum, int polyNum, int *IFSet, int vertexNum, fk_Vector *posArray, int order)
| 任意形状生成関数2
void | makeIFSet (std::vector< std::vector< int > > *faceArray, std::vector< fk_Vector > *posArray, bool smoothMode=false, int order=0)
| 任意形状生成関数3
void | makeIFSet (std::vector< std::vector< int > > *faceArray, std::vector< fk_Vector > *posArray, int order)
| 任意形状生成関数4
bool | setFaceNorm (int faceID, const fk_Vector &norm, int order=0)
| 面法線ベクトル設定関数
bool | setVertexNorm (int vertexID, const fk_Vector &norm, int order=0)
| 頂点法線ベクトル設定関数
void | flush (void)
| 法線ベクトル強制計算関数
多角形形状制御関数
void | makePolygon (std::vector< fk_Vector > *posArray)
| 多角形生成関数1
void | makePolygon (int num, fk_Vector *posArray)
| 多角形生成関数2
直方体形状制御関数
void | makeBlock (double x, double y, double z)
| 直方体生成関数
void | setBlockSize (double x, double y, double z)
| 直方体辺長変更関数
void | setBlockSize (double length, fk_Axis axis)
| 直方体個別辺長設定関数
void | setBlockScale (double scale)
| 直方体全体拡大縮小関数
void | setBlockScale (double scale, fk_Axis axis)
| 直方体軸方向拡大縮小関数
void | setBlockScale (double x, double y, double z)
| 直方体軸方向個別拡大縮小関数
円形状制御関数
void | makeCircle (int div, double rad)
| 円形状生成関数
void | setCircleRadius (double rad)
| 円形状半径設定関数
void | setCircleDivide (int div)
| 円形状分割数設定関数
void | setCircleScale (double scale)
| 円形状拡大縮小関数
球形状制御関数
void | makeSphere (int div, double rad)
| 球形状生成関数
void | setSphereRadius (double rad)
| 球形状半径設定関数
void | setSphereDivide (int div)
| 球形状分割数設定関数
void | setSphereScale (double scale)
| 球形状拡大縮小関数
正多角柱(円柱)形状制御関数
void | makePrism (int div, double top, double bottom, double height, bool smoothMode=false)
| 正多角柱(円柱)形状生成関数
void | setPrismDivide (int div)
| 正多角柱(円柱)角数設定関数
void | setPrismTopRadius (double top)
| 正多角柱(円柱)上面半径設定関数
void | setPrismBottomRadius (double bottom)
| 正多角柱(円柱)角数設定関数
void | setPrismHeight (double height)
| 正多角柱(円柱)高さ設定関数
正多角錐(円錐)形状制御関数
void | makeCone (int div, double rad, double height, bool smoothMode=true)
| 正多角錐(円錐)形状生成関数
void | setConeDivide (int div)
| 正多角錐(円錐)角数設定関数
void | setConeRadius (double rad)
| 正多角錐(円錐)底面半径設定関数
void | setConeHeight (double height)
| 正多角錐(円錐)高さ設定関数
カプセル型形状制御関数
void | makeCapsule (int div, double len, double rad)
| カプセル型形状生成関数
void | setCapsuleSize (double len, double rad)
| カプセル型形状寸法設定関数
その他
void | putSolid (fk_Solid *solid)
| fk_Solid 出力関数
void | setAnimationTime (double time)
| アニメーション時間設定関数
void | setBVHMotion (fk_BVHBase *bvh)
| BVHデータ設定関数
基底クラス FK::fk_Shape に属する継承公開メンバ関数
| fk_Shape (fk_Type=fk_Type::SHAPE)
| コンストラクタ
virtual | ~fk_Shape ()
| デストラクタ
fk_RealShapeType | getRealShapeType (void)
| 形状データ構造取得関数
void | setShaderAttribute (std::string name, int dim, std::vector< int > *array, bool self=false)
| シェーダー内 attribute 変数設定関数1
void | setShaderAttribute (std::string name, int dim, std::vector< float > *array, bool self=false)
| シェーダー内 attribute 変数設定関数2
void | setShaderAttribute (std::string name, int dim, std::vector< fk_Vector > *array)
| シェーダー内 attribute 変数設定関数3
void | setShaderAttribute (std::string name, int dim, std::vector< fk_TexCoord > *array)
| シェーダー内 attribute 変数設定関数4
void | setShaderAttribute (std::string name, int dim, std::vector< fk_HVector > *array)
| シェーダー内 attribute 変数設定関数5
void | modifyAttribute (std::string name)
| attribute 変数更新関数
基底クラス FK::fk_Attribute に属する継承公開メンバ関数
| fk_Attribute (void)
| コンストラクタ
virtual | ~fk_Attribute ()
| デストラクタ
bool | setAttrII (const int key, const int value)
| キーが int 型、値が int 型である属性設定関数
bool | setAttrID (const int key, const double value)
| キーが int 型、値が double 型である属性設定関数
bool | setAttrIS (const int key, const std::string value)
| キーが int 型、値が std::string 型である属性設定関数
bool | setAttrSI (const std::string key, const int value)
| キーが std::string 型、値が int 型である属性設定関数
bool | setAttrSD (const std::string key, const double value)
| キーが std::string 型、値が double 型である属性設定関数
bool | setAttrSS (const std::string key, const std::string value)
| キーが std::string 型、値が std::string 型である属性設定関数
int | getAttrII (const int key) const
| キーが int 型、値が int 型である属性参照関数
double | getAttrID (const int key) const
| キーが int 型、値が double 型である属性参照関数
std::string | getAttrIS (const int key) const
| キーが int 型、値が std::string 型である属性参照関数
int | getAttrSI (const std::string key) const
| キーが std::string 型、値が int 型である属性参照関数
double | getAttrSD (const std::string key) const
| キーが std::string 型、値が double 型である属性参照関数
std::string | getAttrSS (const std::string key) const
| キーが std::string 型、値が std::string 型である属性参照関数
bool | existAttrII (const int key) const
| キーが int 型、値が int 型である属性存在参照関数
bool | existAttrID (const int key) const
| キーが int 型、値が double 型である属性存在参照関数
bool | existAttrIS (const int key) const
| キーが int 型、値が std::string 型である属性存在参照関数
bool | existAttrSI (const std::string key) const
| キーが std::string 型、値が int 型である属性存在参照関数
bool | existAttrSD (const std::string key) const
| キーが std::string 型、値が double 型である属性存在参照関数
bool | existAttrSS (const std::string key) const
| キーが std::string 型、値が std::string 型である属性存在参照関数
bool | deleteAttrII (const int key)
| キーが int 型、値が int 型である属性消去関数
bool | deleteAttrID (const int key)
| キーが int 型、値が double 型である属性消去関数
bool | deleteAttrIS (const int key)
| キーが int 型、値が std::string 型である属性消去関数
bool | deleteAttrSI (const std::string key)
| キーが std::string 型、値が int 型である属性消去関数
bool | deleteAttrSD (const std::string key)
| キーが std::string 型、値が double 型である属性消去関数
bool | deleteAttrSS (const std::string key)
| キーが std::string 型、値が std::string 型である属性消去関数
基底クラス FK::fk_BaseObject に属する継承公開メンバ関数
| fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT)
| コンストラクタ
fk_Type | getObjectType (void) const
| タイプ取得関数

## 詳解

インデックスフェースセットによる任意形状を生成、管理するクラス

このクラスは、 「インデックスフェースセット」による任意形状を制御する機能を提供します。

fk_IndexFaceSet の主な用途は、3次元形状データファイルからデータを読み込み、 それを表示することです。以下のデータフォーマットをサポートしています。

- VRML 形式
- STL 形式
- SMF 形式
- HRC 形式
- RDS (Ray Dream Studio) 形式
- DXF 形式
- MQO (Metasequoia) 形式
- D3DX (DirectX) 形式

また、これらのデータファイル入力の他に、 頂点座標データとインデックスフェースデータから 形状を自前で生成することも可能です。 ただし、作成できる形状には制限があります。 この機能の詳細は makeIFSet() を参照して下さい。

入力した形状に対し、各頂点を移動してアニメーションを表現することが可能です。 この機能の詳細は moveVPosition() を参照して下さい。 位相変化を伴う変形は、 fk_IndexFaceSet では行うことができません。 位相変化を伴う変形を行うには、 fk_Solid クラスを用いてください。

D3DX 形式ではボーンアニメーションをサポートしていますが、 その再生を行うことも可能です。 この機能の詳細は setAnimationTime() を参照して下さい。 また、ボーンアニメーションデータのみのデータとして BVH 形式を入力し、 アニメーションをすることも可能になっています。 この機能の詳細は setBVHMotion() を参照して下さい。

任意の形状を表現するクラスとして、 fk_IndexFaceSet の他に fk_Solid があります。 fk_IndexFaceSet は、 fk_Solid と比較して高速な描画が行えるという長所があります。 しかしその一方で、 fk_IndexFaceSet は面が3角形か4角形のみ(そして混在は不可) という制限があります。 また、位相変化を伴う変形には対応していません。 より高度な形状表現や位相変化を伴う変形を利用する場合は fk_Solid を利用して下さい。

fk_IndexFaceSet 自体は、テクスチャ描画に対応していません。 テクスチャによる形状描画を行いたい場合は、 fk_IFSTexture クラスを用いて下さい。

参照
  fk_IFSTexture, fk_Solid, fk_Shape, fk_Model, fk_Block, fk_Circle, fk_Sphere, fk_Prism, fk_Cone, fk_Capsule

## 構築子と解体子

## ◆ fk_IndexFaceSet()

FK::fk_IndexFaceSet::fk_IndexFaceSet | ( | void |  | ) |

コンストラクタ

## ◆ ~fk_IndexFaceSet()

virtual FK::fk_IndexFaceSet::~fk_IndexFaceSet | ( |  | ) |

virtual

デストラクタ

## 関数詳解

## ◆ cloneShape()

void FK::fk_IndexFaceSet::cloneShape | ( | fk_IndexFaceSet * | ifs | ) |

形状コピー関数

引数として与えられたインスタンス中の形状をコピーします。 各種属性およびマテリアル情報は写しません。

引数

  [in] | ifs | 複写元インスタンス

## ◆ readSMFFile()

bool FK::fk_IndexFaceSet::readSMFFile | ( | std::string | fileName | ) |

SMFファイル入力関数

SMF形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readVRMLFile()

bool FK::fk_IndexFaceSet::readVRMLFile | ( | std::string | fileName,
|  | bool | materialFlg = true,
|  | bool | solidFlg = true )

VRML ファイル入力関数

VRML形式のファイルからデータを入力します。 VRMLでは、形状を表す様々なノードがありますが、 本関数が対応しているのは「IndexedFaceSet」 ノードに記述された形状のみです。

引数

  [in] | fileName | ファイル名
  [in] | materialFlg | true の場合、 VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 入力データのままインデックスフェースセットを構築します。

戻り値
  成功すれば true を、失敗すれば false を返します。

覚え書き
  VRML形式は、1994年に策定された通称「VRML1.0」と、 1997年に策定された「VRML97」の2種類があり、 VRML97は「VRML2.0」とも呼ばれます。 本関数では入力フォーマットとして VRML2.0 を想定しています。
  VRMLは文法解釈、 特にセパレータの扱い方についてはあまり厳密になっておらず、 様々なデータによって異なる解釈がなされているようです。 そのため、構文解析がうまくいかずに入力失敗する場合がありえます。

## ◆ readSTLFile()

bool FK::fk_IndexFaceSet::readSTLFile | ( | std::string | fileName,
|  | bool | solidFlg = true,
|  | double | tolerance = 1.0e-08 )

STL ファイル入力関数

STL形式のファイルからデータを入力します。 対応しているのは面データのみです。 また、以下の条件に当てはまるデータは fk_IndexFaceSet では入力できません。

- 5以上の角数である面が存在する。
- 3角形面と4角形面が混在している。

引数

  [in] | fileName | ファイル名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  [in] | tolerance | solidFlg で true を指定した場合、 頂点同士が同一かどうかを判断するための距離許容誤差を指定します。 solidFlg が false であった場合、この値は無視されます。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readHRCFile()

bool FK::fk_IndexFaceSet::readHRCFile | ( | std::string | fileName | ) |

HRCファイル入力関数

HRC形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readRDSFile()

bool FK::fk_IndexFaceSet::readRDSFile | ( | std::string | fileName,
|  | bool | solidFlg = true )

RDSファイル入力関数

RDS (Ray Dream Studio) 形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readDXFFile()

bool FK::fk_IndexFaceSet::readDXFFile | ( | std::string | fileName,
|  | bool | solidFlg = true )

DXFファイル入力関数

DXF 形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readMQOFile() [1/2]

bool FK::fk_IndexFaceSet::readMQOFile | ( | std::string | fileName,
|  | std::string | objName,
|  | bool | solidFlg = true,
|  | bool | contFlg = true,
|  | bool | materialFlg = false )

MQOファイル入力関数1

MQO 形式のファイルからデータを入力します。

この関数は、テクスチャ用のデータの入力は行いません。 テクスチャデータも併せて表示を行いたい場合は、 fk_IFSTexture クラスを利用して下さい。

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

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  [in] | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。
  [in] | materialFlg | true の場合、MQOファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。

戻り値
  成功すれば true を、失敗すれば false を返します。

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

## ◆ readMQOFile() [2/2]

bool FK::fk_IndexFaceSet::readMQOFile | ( | std::string | fileName,
|  | std::string | objName,
|  | int | materialID,
|  | bool | solidFlg = true,
|  | bool | contFlg = true,
|  | bool | materialFlg = false )

MQOファイル入力関数2

MQO 形式のファイルからデータを入力します。

この関数は、テクスチャ用のデータの入力は行いません。 テクスチャデータも併せて表示を行いたい場合は、 fk_IFSTexture クラスを利用して下さい。

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

引数

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

戻り値
  成功すれば true を、失敗すれば false を返します。

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

## ◆ readMQOData() [1/2]

bool FK::fk_IndexFaceSet::readMQOData | ( | unsigned char * | buffer,
|  | std::string | objName,
|  | bool | solidFlg = true,
|  | bool | contFlg = true,
|  | bool | materialFlg = false )

MQOデータ入力関数1

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

この関数は、テクスチャ用のデータの入力は行いません。 テクスチャデータも併せて表示を行いたい場合は、 fk_IFSTexture クラスを利用して下さい。

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

引数

  [in] | buffer | データが格納されているバッファ
  [in] | objName | オブジェクト名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  [in] | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。
  [in] | materialFlg | true の場合、MQOデータ中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。

戻り値
  成功すれば true を、失敗すれば false を返します。

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

## ◆ readMQOData() [2/2]

bool FK::fk_IndexFaceSet::readMQOData | ( | unsigned char * | buffer,
|  | std::string | objName,
|  | int | materialID,
|  | bool | solidFlg = true,
|  | bool | contFlg = true,
|  | bool | materialFlg = false )

MQOデータ入力関数2

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

この関数は、テクスチャ用のデータの入力は行いません。 テクスチャデータも併せて表示を行いたい場合は、 fk_IFSTexture クラスを利用して下さい。

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

引数

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

戻り値
  成功すれば true を、失敗すれば false を返します。

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

## ◆ readD3DXFile() [1/2]

bool FK::fk_IndexFaceSet::readD3DXFile | ( | std::string | fileName,
|  | std::string | objName,
|  | bool | solidFlg = true )

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

DirectX 形式 (X 形式と呼ばれることもあります) のフォーマット (以下、「D3DX形式」) であるファイルからデータを入力します。 この関数で入力できるのは形状データとアニメーションデータです。 テクスチャデータを入力したい場合は、 fk_IndexFaceSet クラスではなく fk_IFSTexture クラスを利用して下さい。

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

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名。 D3DX 形式では、オブジェクト名を省略することが許容されています。 そのような場合は、この引数に空文字列 ( "" ) を入れてください。 この場合、ファイル中で最初に存在するオブジェクトのデータを入力します。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

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

参照
  fk_IFSTexture::readD3DXFile()

## ◆ readD3DXFile() [2/2]

bool FK::fk_IndexFaceSet::readD3DXFile | ( | std::string | fileName,
|  | std::string | objName,
|  | int | materialID,
|  | bool | solidFlg = true )

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

DirectX 形式 (X 形式と呼ばれることもあります) のフォーマット (以下、「D3DX形式」) であるファイルからデータを入力します。 この関数で入力できるのは形状データとアニメーションデータです。 テクスチャデータを入力したい場合は、 fk_IndexFaceSet クラスではなく fk_IFSTexture クラスを利用して下さい。

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

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名。 D3DX 形式では、オブジェクト名を省略することが許容されています。 そのような場合は、この引数に空文字列 ( "" ) を入れてください。 この場合、ファイル中で最初に存在するオブジェクトのデータを入力します。
  [in] | materialID | D3DXデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

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

参照
  fk_IFSTexture::readD3DXFile()

## ◆ writeVRMLFile() [1/2]

bool FK::fk_IndexFaceSet::writeVRMLFile | ( | std::string | fileName,
|  | fk_Material * | material = nullptr,
|  | bool | triFlg = false )

VRML ファイル出力関数1

VRML (VRML2.0) 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名
  [in] | material | VRMLファイル中に「Material」ノードとしてマテリアル情報を保存します。 nullptr を代入した場合は、VRMLファイル中に「Material」ノードを生成しません。
  [in] | triFlg | 仮想関数からの継承のために存在する引数で、処理には一切影響しません。

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

## ◆ writeVRMLFile() [2/2]

bool FK::fk_IndexFaceSet::writeVRMLFile | ( | std::string | fileName,
|  | std::vector< double > * | time,
|  | std::vector< fk_Vector > * | pos,
|  | fk_Material * | material = nullptr,
|  | bool | triFlg = false )

VRML ファイル出力関数2

VRML (VRML2.0) 形式で形状データを出力します。 この引数形式の場合は、 CoordinateInterpolator ノードを用いた アニメーションデータを出力することが可能です。

引数

  [in] | fileName | ファイル名
  [in] | time | CoordinateInterpolator における時間配列 (key) を入力します。
  [in] | pos | CoordinateInterpolator における位置ベクトル配列 (keyValue) を入力します。
  [in] | material | VRMLファイル中に「Material」ノードとしてマテリアル情報を保存します。 nullptr を代入した場合は、VRMLファイル中に「Material」ノードを生成しません。
  [in] | triFlg | 仮想関数からの継承のために存在する引数で、処理には一切影響しません。

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

## ◆ writeSTLFile()

bool FK::fk_IndexFaceSet::writeSTLFile | ( | std::string | fileName | ) |

STL ファイル出力関数

STL 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名

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

## ◆ writeDXFFile()

bool FK::fk_IndexFaceSet::writeDXFFile | ( | std::string | fileName,
|  | bool | triFlg = false )

DXF ファイル出力関数

DXF 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名
  [in] | triFlg | 面情報を3角形として出力したい場合は、true を代入します。 false の場合、3角形面を2点が重複している4角形面として出力します。

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

## ◆ writeMQOFile()

bool FK::fk_IndexFaceSet::writeMQOFile | ( | std::string | fileName | ) |

MQO ファイル出力関数

MQO 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名

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

## ◆ getPosSize()

int FK::fk_IndexFaceSet::getPosSize | ( | void |  | ) |

頂点数参照関数

形状データの頂点数を取得します。

戻り値
  頂点数

## ◆ getEdgeSize()

int FK::fk_IndexFaceSet::getEdgeSize | ( | void |  | ) |

稜線数参照関数

形状データの稜線数を取得します。

戻り値
  稜線数

## ◆ getFaceSize()

int FK::fk_IndexFaceSet::getFaceSize | ( | void |  | ) |

面数参照関数

形状データの面数を取得します。

戻り値
  面数

## ◆ getPosVec()

fk_Vector FK::fk_IndexFaceSet::getPosVec | ( | int | vertexID | ) |

頂点位置ベクトル参照関数

形状データ中の、頂点の位置ベクトルを取得します。

引数

  [in] | vertexID | 頂点ID。一番最初の頂点IDは 0 になります。 最後の ID は頂点数から 1 を引いたものとなります。

戻り値
  頂点の位置ベクトル

参照
  moveVPosition()

## ◆ getFaceData() [1/2]

std::vector< int > FK::fk_IndexFaceSet::getFaceData | ( | int | faceID | ) |

頂点 ID 配列参照関数

面を構成する頂点 ID の配列を取得します。

引数

  [in] | faceID | 面 ID。一番最初の面IDは 0 になります。 最後の ID は面数から 1 を引いたものとなります。

戻り値
  頂点 ID 配列

## ◆ getFaceData() [2/2]

int FK::fk_IndexFaceSet::getFaceData | ( | int | faceID,
|  | int | vertexNum )

頂点 ID 参照関数

面を構成する頂点 ID を取得します。

引数

  [in] | faceID | 面 ID。一番最初の面IDは 0 になります。 最後の ID は面数から 1 を引いたものとなります。
  [in] | vertexNum | 面の中での頂点番号。 3角形であれば 0 から 2、 4角形であれば 0 から 3 のいずれかを入力すると、 格納されている頂点 ID を取得できます。

戻り値
  頂点 ID

## ◆ getFaceNorm()

fk_Vector FK::fk_IndexFaceSet::getFaceNorm | ( | int | faceID,
|  | int | order = 0 )

面法線ベクトル取得関数

面の法線ベクトルを取得します。

引数

  [in] | faceID | 面ID
  [in] | order | 最初の面IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  面の法線ベクトル

参照
  setFaceNorm(), getVertexNorm()

## ◆ getVertexNorm()

fk_Vector FK::fk_IndexFaceSet::getVertexNorm | ( | int | vertexID,
|  | int | order = 0 )

頂点法線ベクトル取得関数

頂点の法線ベクトルを取得します。

引数

  [in] | vertexID | 頂点ID
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  頂点の法線ベクトル

参照
  setVertexNorm(), getFaceNorm()

## ◆ moveVPosition() [1/3]

bool FK::fk_IndexFaceSet::moveVPosition | ( | int | vertexID,
|  | const fk_Vector & | pos,
|  | int | order = 0 )

頂点移動関数1

指定された頂点を移動します。 なお、 setVertexNorm() によって法線ベクトルが設定されていた場合や、 setFaceNorm() によって周辺の面に放線ベクトルが設定されていた場合、 この関数によって破棄されます。

引数

  [in] | vertexID | 頂点ID
  [in] | pos | 移動先の位置ベクトル
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  成功すれば true を、失敗すれば false を返します。

参照
  getPosVec()

## ◆ moveVPosition() [2/3]

bool FK::fk_IndexFaceSet::moveVPosition | ( | int | vertexID,
|  | double | x,
|  | double | y,
|  | double | z,
|  | int | order = 0 )

頂点移動関数2

指定された頂点を移動します。 なお、 setVertexNorm() によって法線ベクトルが設定されていた場合や、 setFaceNorm() によって周辺の面に放線ベクトルが設定されていた場合、 この関数によって破棄されます。

引数

  [in] | vertexID | 頂点ID
  [in] | x | 移動先位置ベクトルの x 成分
  [in] | y | 移動先位置ベクトルの y 成分
  [in] | z | 移動先位置ベクトルの z 成分
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  成功すれば true を、失敗すれば false を返します。

参照
  getPosVec()

## ◆ moveVPosition() [3/3]

bool FK::fk_IndexFaceSet::moveVPosition | ( | int | vertexID,
|  | double * | array,
|  | int | order = 0 )

頂点移動関数3

指定された頂点を移動します。 なお、 setVertexNorm() によって法線ベクトルが設定されていた場合や、 setFaceNorm() によって周辺の面に放線ベクトルが設定されていた場合、 この関数によって破棄されます。

引数

  [in] | vertexID | 頂点ID
  [in] | array | 移動先位置ベクトルの各成分が入った double 型配列。
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  成功すれば true を、失敗すれば false を返します。

参照
  getPosVec()

## ◆ makeIFSet() [1/4]

void FK::fk_IndexFaceSet::makeIFSet | ( | int | faceNum,
|  | int | polyNum,
|  | int * | IFSet,
|  | int | vertexNum,
|  | fk_Vector * | posArray,
|  | bool | smoothMode = false,
|  | int | order = 0 )

任意形状生成関数1

与えられたインデックスフェースセット情報から、形状を生成します。

引数

  [in] | faceNum | 面数
  [in] | polyNum | 面の角数。現在、ここに入力できる数値は 3 か 4 のみです。
  [in] | IFSet | インデックスフェースセット配列。 この配列は、各面を構成する頂点 ID を並べたものになります。 たとえば、頂点 ID が [0, 1, 2] と [2, 1, 3] という構成を持つ 2面からなる形状を生成する場合、 int 型の配列に対して [0, 1, 2, 2, 1, 3] という数値を入力しておきます。 4角形の場合も同様です。 結果的に、この配列の長さは面数と角数を掛けたもの以上である必要があります。
  [in] | vertexNum | 頂点数
  [in] | posArray | 頂点位置ベクトルの配列。配列の長さは頂点数以上である必要があります。
  [in] | smoothMode | true の場合、スムースシェーディングとなります。 false の場合はフラットシェーディングとなります。
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

参照
  fk_Solid

## ◆ makeIFSet() [2/4]

void FK::fk_IndexFaceSet::makeIFSet | ( | int | faceNum,
|  | int | polyNum,
|  | int * | IFSet,
|  | int | vertexNum,
|  | fk_Vector * | posArray,
|  | int | order )

任意形状生成関数2

与えられたインデックスフェースセット情報から、形状を生成します。

引数

  [in] | faceNum | 面数
  [in] | polyNum | 面の角数。現在、ここに入力できる数値は 3 か 4 のみです。
  [in] | IFSet | インデックスフェースセット配列。 この配列は、各面を構成する頂点 ID を並べたものになります。 たとえば、頂点 ID が [0, 1, 2] と [2, 1, 3] という構成を持つ 2面からなる形状を生成する場合、 int 型の配列に対して [0, 1, 2, 2, 1, 3] という数値を入力しておきます。 4角形の場合も同様です。 結果的に、この配列の長さは面数と角数を掛けたもの以上である必要があります。
  [in] | vertexNum | 頂点数
  [in] | posArray | 頂点位置ベクトルの配列。配列の長さは頂点数以上である必要があります。
  [in] | order | 最初の頂点IDを補正するオーダー。

参照
  fk_Solid

## ◆ makeIFSet() [3/4]

void FK::fk_IndexFaceSet::makeIFSet | ( | std::vector< std::vector< int > > * | faceArray,
|  | std::vector< fk_Vector > * | posArray,
|  | bool | smoothMode = false,
|  | int | order = 0 )

任意形状生成関数3

与えられたIFSデータから、形状を生成します。

引数

  [in]

  faceArray

  面データ配列。 IFSet を vector< vector<int> > 型、 polygon を vector<int> 型としたとき、 以下のようにして面データを生成していきます。

      polygon.clear();
      polygon.push_back(頂点ID1);
      polygon.push_back(頂点ID2);
          :
      polygon.push_back(頂点IDn);
      IFSet.push_back(polygon);

  [in] | posArray | 頂点位置ベクトルデータ配列
  [in] | smoothMode | true の場合、辺や頂点の周囲を滑らかにレンダリングします。 false の場合は辺や頂点を折れたものとしてレンダリングします。
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

## ◆ makeIFSet() [4/4]

void FK::fk_IndexFaceSet::makeIFSet | ( | std::vector< std::vector< int > > * | faceArray,
|  | std::vector< fk_Vector > * | posArray,
|  | int | order )

任意形状生成関数4

与えられたIFSデータから、形状を生成します。

引数

  [in]

  faceArray

  面データ配列。 IFSet を vector< vector<int> > 型、 polygon を vector<int> 型としたとき、 以下のようにして面データを生成していきます。

      polygon.clear();
      polygon.push_back(頂点ID1);
      polygon.push_back(頂点ID2);
          :
      polygon.push_back(頂点IDn);
      IFSet.push_back(polygon);

  [in] | posArray | 頂点位置ベクトルデータ配列
  [in] | order | 最初の頂点IDを補正するオーダー。

## ◆ setFaceNorm()

bool FK::fk_IndexFaceSet::setFaceNorm | ( | int | faceID,
|  | const fk_Vector & | norm,
|  | int | order = 0 )

面法線ベクトル設定関数

面の法線ベクトルを設定します。

通常、面の法線ベクトルは自前で設定しなくても、 形状から自動的に算出されます。 しかし、バンプマッピングなどの技法を用いる場合など、 自前で計算した法線ベクトルを与える場合は、この関数を用います。

なお、 moveVPosition() 関数によって面上の点が移動された場合、 設定した法線ベクトルは破棄されます。

引数

  [in] | faceID | 面ID
  [in] | norm | 法線ベクトル。あらかじめ正規化しておく必要があります。 正規化されていない放線ベクトルを入力した場合、 動作が異常となる場合があります。
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  成功すれば true を、失敗すれば false を返します。

参照
  getFaceNorm(), setVertexNorm()

## ◆ setVertexNorm()

bool FK::fk_IndexFaceSet::setVertexNorm | ( | int | vertexID,
|  | const fk_Vector & | norm,
|  | int | order = 0 )

頂点法線ベクトル設定関数

頂点の法線ベクトルを設定します。

通常、頂点の法線ベクトルは自前で設定しなくても、 形状から自動的に算出されます。 しかし、バンプマッピングなどの技法を用いる場合など、 自前で計算した法線ベクトルを与える場合は、この関数を用います。

なお、 moveVPosition() 関数によって頂点が移動された場合、 設定した法線ベクトルは破棄されます。

引数

  [in] | vertexID | 頂点ID
  [in] | norm | 法線ベクトル。あらかじめ正規化しておく必要があります。 正規化されていない放線ベクトルを入力した場合、 動作が異常となる場合があります。
  [in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。

戻り値
  成功すれば true を、失敗すれば false を返します。

参照
  getVertexNorm(), setFaceNorm()

## ◆ flush()

void FK::fk_IndexFaceSet::flush | ( | void |  | ) |

法線ベクトル強制計算関数

fk_IndexFaceSet では、 面や頂点の法線ベクトルは形状生成した時点ではまだ算出しません。 描画時など、実際に法線ベクトルが必要となった場合に随時計算が行われます。 この仕様は、必ずしも法線ベクトルを必要としない状況において 計算量を削減する効果がありますが、 一方でアプリケーションの実行において不都合を生じる場合があります。 例えば、対象形状が初めてシーンに登録された時点で 画面が一瞬止まってしまうといった状況が想定されます。

この関数は、形状中のすべての面と頂点に対して法線ベクトルを強制的に算出します。 なお、 setFaceNorm() や setVertexNorm() で設定した法線ベクトルは全て破棄されます。

参照
  getFaceNorm(), getVertexNorm(), setFaceNorm(), setVertexNorm()

## ◆ makePolygon() [1/2]

void FK::fk_IndexFaceSet::makePolygon | ( | std::vector< fk_Vector > * | posArray | ) |

多角形生成関数1

多角形 (ポリゴン) を生成します。 頂点を結ぶ境界線が反時計回りに見える側が表になります。 現時点では凸多角形のみサポートしており、 非凸多角形が入力された場合の動作は保証されません。

生成後、頂点を移動するには moveVPosition() を利用して下さい。

引数

  [in] | posArray | 多角形頂点配列

## ◆ makePolygon() [2/2]

void FK::fk_IndexFaceSet::makePolygon | ( | int | num,
|  | fk_Vector * | posArray )

多角形生成関数2

多角形 (ポリゴン) を生成します。 頂点を結ぶ境界線が反時計回りに見える側が表になります。 現時点では凸多角形のみサポートしており、 非凸多角形が入力された場合の動作は保証されません。

生成後、頂点を移動するには moveVPosition() を利用して下さい。

引数

  [in] | num | 頂点数
  [in] | posArray | 多角形頂点配列

## ◆ makeBlock()

void FK::fk_IndexFaceSet::makeBlock | ( | double | x,
|  | double | y,
|  | double | z )

直方体生成関数

直方体を生成します。

直方体は、原点の物体の中心が来るように配置されます。 従って、(x, y, z) という大きさで直方体を生成した場合、 各頂点の位置ベクトルは以下のようになります。

- (x/2, y/2, z/2)
- (-x/2, y/2, z/2)
- (-x/2, -y/2, z/2)
- (x/2, -y/2, z/2)
- (x/2, y/2, -z/2)
- (-x/2, y/2, -z/2)
- (-x/2, -y/2, -z/2)
- (x/2, -y/2, -z/2)

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数

  [in] | x | x方向の辺長
  [in] | y | y方向の辺長
  [in] | z | z方向の辺長

参照
  fk_Block

## ◆ setBlockSize() [1/2]

void FK::fk_IndexFaceSet::setBlockSize | ( | double | x,
|  | double | y,
|  | double | z )

直方体辺長変更関数

makeBlock() によって直方体を生成した後に、 直方体の辺長を一括して設定しなおします。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | x | x方向の辺長
  [in] | y | y方向の辺長
  [in] | z | z方向の辺長

参照
  makeBlock(), fk_Block

## ◆ setBlockSize() [2/2]

void FK::fk_IndexFaceSet::setBlockSize | ( | double | length,
|  | fk_Axis | axis )

直方体個別辺長設定関数

makeBlock() によって直方体を生成した後に、 直方体の辺長を個別に設定します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | length | 辺長

  [in]

  axis

  軸方向。以下のいずれかを指定します。
  - fk_X x方向
  - fk_Y y方向
  - fk_Z z方向

参照
  makeBlock(), fk_Block

## ◆ setBlockScale() [1/3]

void FK::fk_IndexFaceSet::setBlockScale | ( | double | scale | ) |

直方体全体拡大縮小関数

makeBlock() によって直方体を生成した後に、 直方体全体を指定された倍率で拡大・縮小します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | scale | 倍率

参照
  makeBlock(), fk_Block

## ◆ setBlockScale() [2/3]

void FK::fk_IndexFaceSet::setBlockScale | ( | double | scale,
|  | fk_Axis | axis )

直方体軸方向拡大縮小関数

makeBlock() によって直方体を生成した後に、 指定された軸方向についてのみ拡大・縮小します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | scale | 倍率

  [in]

  axis

  軸方向。以下のいずれかを指定します。
  - fk_X x方向
  - fk_Y y方向
  - fk_Z z方向

参照
  makeBlock(), fk_Block

## ◆ setBlockScale() [3/3]

void FK::fk_IndexFaceSet::setBlockScale | ( | double | x,
|  | double | y,
|  | double | z )

直方体軸方向個別拡大縮小関数

makeBlock() によって直方体を生成した後に、 各軸方向に対し個別の倍率で拡大・縮小します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | x | x方向の倍率
  [in] | y | y方向の倍率
  [in] | z | z方向の倍率

参照
  makeBlock(), fk_Block

## ◆ makeCircle()

void FK::fk_IndexFaceSet::makeCircle | ( | int | div,
|  | double | rad )

円形状生成関数

円形状を生成します。

ここでの「円」は実際には正多角形を円に近似して扱っています。 多角形の角数は (分割数) * 4 となっています。 この多角形は、実質的には設定された半径の円に内接するものです。 円としての見栄えを良くするには分割数を大きめに設定すべきですが、 分割数の大きい円を大量に利用すると描画処理が遅くなるという問題が生じます。

初期状態では、中心を原点とし、 面の法線ベクトルが (0, 0, 1) となるように配置されます。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数

  [in] | div | 分割数。実際には円弧全体をこの数値の 4 倍で分割します。
  [in] | rad | 半径

参照
  fk_Circle

## ◆ setCircleRadius()

void FK::fk_IndexFaceSet::setCircleRadius | ( | double | rad | ) |

円形状半径設定関数

makeCircle() によって円形状を生成した後に、 半径を設定しなおします。 この関数は、 makeCircle() によって円形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | rad | 半径

参照
  makeCircle(), fk_Circle

## ◆ setCircleDivide()

void FK::fk_IndexFaceSet::setCircleDivide | ( | int | div | ) |

円形状分割数設定関数

makeCircle() によって円形状を生成した後に、 分割数を設定しなおします。 この関数は、 makeCircle() によって円形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | div | 分割数

参照
  makeCircle(), fk_Circle

## ◆ setCircleScale()

void FK::fk_IndexFaceSet::setCircleScale | ( | double | scale | ) |

円形状拡大縮小関数

makeCircle() によって円形状を生成した後に、 形状全体を与えられた倍率で拡大・縮小します。 この関数は、 makeCircle() によって円形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | scale | 倍率

参照
  makeCircle(), fk_Circle

## ◆ makeSphere()

void FK::fk_IndexFaceSet::makeSphere | ( | int | div,
|  | double | rad )

球形状生成関数

球形状を生成します。

実際には、球を近似する3角形面集合として表現されています。 3角形面の数は分割数を \( d \) とした場合 \( 8d(d-1) \) 枚となります。 分割数が高いほど球としての描画精度は高くなりますが、 面数も多くなるため描画速度が低下することになります。 特に多くのオブジェクトを同時に配置する場合は注意が必要です。

初期状態では、中心を原点とするように配置されます。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数

  [in] | div | 分割数
  [in] | rad | 半径

参照
  fk_Sphere

## ◆ setSphereRadius()

void FK::fk_IndexFaceSet::setSphereRadius | ( | double | rad | ) |

球形状半径設定関数

makeSphere() によって球形状を生成した後に、 半径を設定しなおします。 この関数は、 makeSphere() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | rad | 半径

参照
  makeSphere(), fk_Sphere

## ◆ setSphereDivide()

void FK::fk_IndexFaceSet::setSphereDivide | ( | int | div | ) |

球形状分割数設定関数

makeSphere() によって球形状を生成した後に、 分割数を設定しなおします。 この関数は、 makeSphere() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | div | 分割数

参照
  makeSphere(), fk_Sphere

## ◆ setSphereScale()

void FK::fk_IndexFaceSet::setSphereScale | ( | double | scale | ) |

球形状拡大縮小関数

makeSphere() によって球形状を生成した後に、 形状全体を与えられた倍率で拡大・縮小します。 この関数は、 makeSphere() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | scale | 倍率

参照
  makeSphere(), fk_Sphere

## ◆ makePrism()

void FK::fk_IndexFaceSet::makePrism | ( | int | div,
|  | double | top,
|  | double | bottom,
|  | double | height,
|  | bool | smoothMode = false )

正多角柱(円柱)形状生成関数

正多角柱(円柱)を生成します。

円柱は、分割数の多い正多角柱として生成します。 通常、分割数が 20 を超える程度でほとんど円柱と見分けがつかなくなります。 配置は、底面の中心が原点となり、 多角柱の上面が -z 方向、底面が +z 方向となります。

設定できる要素は角数、上面半径、底面半径、高さの4要素です。 上面と底面の半径とは、それぞれの面を構成する正多角形の外接円半径を指します。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数

  [in] | div | 角数
  [in] | top | 上面半径
  [in] | bottom | 底面半径
  [in] | height | 高さ
  [in] | smoothMode | true の場合、側面を滑らかにレンダリングし、 擬似的な円錐として表示します。 false の場合は側面を独立した平面としてレンダリングし、 角錐として表示します。

参照
  fk_Prism

## ◆ setPrismDivide()

void FK::fk_IndexFaceSet::setPrismDivide | ( | int | div | ) |

正多角柱(円柱)角数設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 角数を設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | div | 角数

参照
  makePrism(), fk_Prism

## ◆ setPrismTopRadius()

void FK::fk_IndexFaceSet::setPrismTopRadius | ( | double | top | ) |

正多角柱(円柱)上面半径設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 上面の外接円半径を設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | top | 上面半径

参照
  makePrism(), fk_Prism

## ◆ setPrismBottomRadius()

void FK::fk_IndexFaceSet::setPrismBottomRadius | ( | double | bottom | ) |

正多角柱(円柱)角数設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 底面の外接円半径を設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | bottom | 底面半径

参照
  makePrism(), fk_Prism

## ◆ setPrismHeight()

void FK::fk_IndexFaceSet::setPrismHeight | ( | double | height | ) |

正多角柱(円柱)高さ設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 高さを設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | height | 高さ

参照
  makePrism(), fk_Prism

## ◆ makeCone()

void FK::fk_IndexFaceSet::makeCone | ( | int | div,
|  | double | rad,
|  | double | height,
|  | bool | smoothMode = true )

正多角錐(円錐)形状生成関数

正多角錐(円錐)を生成します。

円錐は、分割数の多い正多角錐として生成します。 通常、分割数が 20 を超える程度でほとんど円錐と見分けがつかなくなります。 配置は、底面の中心が原点となり、 頂点 -z 方向、底面が +z 方向となります。

設定できる要素は角数、底面半径、高さの3要素です。 底面半径とは、面を構成する正多角形の外接円半径を指します。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数

  [in] | div | 角数
  [in] | rad | 底面半径
  [in] | height | 高さ
  [in] | smoothMode | true の場合、側面を滑らかにレンダリングし、 擬似的な円錐として表示します。 false の場合は側面を独立した平面としてレンダリングし、 角錐として表示します。

参照
  fk_Cone

## ◆ setConeDivide()

void FK::fk_IndexFaceSet::setConeDivide | ( | int | div | ) |

正多角錐(円錐)角数設定関数

makeCone() によって正多角錐(円錐)を生成した後に、 角数を設定しなおします。 この関数は、 makeCone() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | div | 角数

参照
  makeCone(), fk_Cone

## ◆ setConeRadius()

void FK::fk_IndexFaceSet::setConeRadius | ( | double | rad | ) |

正多角錐(円錐)底面半径設定関数

makeCone() によって正多角錐(円錐)を生成した後に、 底面外接円半径を設定しなおします。 この関数は、 makeCone() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | rad | 底面半径

参照
  makeCone(), fk_Cone

## ◆ setConeHeight()

void FK::fk_IndexFaceSet::setConeHeight | ( | double | height | ) |

正多角錐(円錐)高さ設定関数

makeCone() によって正多角錐(円錐)を生成した後に、 高さを設定しなおします。 この関数は、 makeCone() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | height | 高さ

参照
  makeCone(), fk_Cone

## ◆ makeCapsule()

void FK::fk_IndexFaceSet::makeCapsule | ( | int | div,
|  | double | len,
|  | double | rad )

カプセル型形状生成関数

カプセル型を生成します。 カプセル型は半径の等しい円柱側面と半球面によって構成されています。 数学的には、カプセル型の内部は1本の線分より一定距離以下の部分の集合であり、 その一定距離は前述の半径と等しくなります。この線分を「中心軸」と呼びます。 初期状態は中心軸の中点が原点に配置され、z軸方向と中心軸が平行となります。 設定できる要素は中心軸長、半径、分割数です。 実際のカプセル型の全長は「中心軸長 + (半径)*2」となります。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数

  [in] | div | 分割数
  [in] | len | 中心軸長
  [in] | rad | 半径

参照
  fk_Capsule

## ◆ setCapsuleSize()

void FK::fk_IndexFaceSet::setCapsuleSize | ( | double | len,
|  | double | rad )

カプセル型形状寸法設定関数

makeCapsule() によってカプセル型形状を生成した後に、 中心軸長と半径を再度設定します。 この関数は、 makeCapsule() によってカプセル型形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数

  [in] | len | 中心軸長
  [in] | rad | 半径

参照
  makeCapsule(), fk_Capsule

## ◆ putSolid()

void FK::fk_IndexFaceSet::putSolid | ( | fk_Solid * | solid | ) |

fk_Solid 出力関数

fk_IndexFaceSet 型にある形状情報を、 fk_Solid 型のインスタンスにコピーします。 fk_Solid 側に格納されている形状情報や属性情報は破棄されます。 なお、マテリアル情報や法線ベクトル情報はコピーされません。

引数

  [in] | solid | fk_Solid 型インスタンスのアドレス

参照
  fk_Solid

## ◆ setAnimationTime()

void FK::fk_IndexFaceSet::setAnimationTime | ( | double | time | ) |

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

D3DX形式からの入力や、 BVH情報からの入力によってアニメーションが設定されている場合、 この関数を用いることで形状状態を任意のアニメーション時間に設定することができます。

引数

  [in] | time | アニメーション時間

参照
  readD3DXFile(), setBVHMotion(), fk_BVHMotion

## ◆ setBVHMotion()

void FK::fk_IndexFaceSet::setBVHMotion | ( | fk_BVHBase * | bvh | ) |

BVHデータ設定関数

形状に対し、BVH 形式によるアニメーションを設定します。

引数

  [in] | bvh | fk_BVHMotion 型インスタンスのアドレス

参照
  setAnimationTime(), readD3DXFile(), fk_BVHMotion