クラス fk_IndexFaceSet

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

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

すべてのメンバ一覧

Public メソッド

 fk_IndexFaceSet (void)
 コンストラクタ
 ~fk_IndexFaceSet ()
 デストラクタ
ファイル・データ入力関数



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=NULL, bool triFlg=false)
 VRML ファイル出力関数1.
bool writeVRMLFile (std::string fileName, std::vector< double > *time, std::vector< fk_Vector > *pos, fk_Material *material=NULL, 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 getFaceSize (void)
 面数参照関数
fk_Vector getPosVec (int vertexID)
 頂点位置ベクトル参照関数
std::vector< int > getFaceData (int faceID)
 頂点 ID 配列参照関数
int getFaceData (int faceID, int vertexNum)
 頂点 ID 参照関数
fk_IFType getFaceType (void)
 面タイプ取得関数
fk_Vector getPNorm (int faceID, int order=0)
 面法線ベクトル取得関数
fk_Vector getVNorm (int vertexID, int order=0)
 頂点法線ベクトル取得関数
int getElemMaterialID (int faceID)
 マテリアルID取得関数
汎用形状操作関数



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, int order=0)
 任意形状生成関数
bool setPNorm (int faceID, const fk_Vector &norm, int order=0)
 面法線ベクトル設定関数
bool setVNorm (int vertexID, const fk_Vector &norm, int order=0)
 頂点法線ベクトル設定関数
bool setElemMaterialID (int faceID, int materialID)
 マテリアルID設定関数
void flush (void)
 法線ベクトル強制計算関数
直方体形状制御関数



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)
 正多角柱(円柱)形状生成関数
void setPrismDivide (int div)
 正多角柱(円柱)角数設定関数
void setPrismTopRadius (double top)
 正多角柱(円柱)上面半径設定関数
void setPrismBottomRadius (double bottom)
 正多角柱(円柱)角数設定関数
void setPrismHeight (double height)
 正多角柱(円柱)高さ設定関数
正多角錐(円錐)形状制御関数



void makeCone (int div, double rad, double height)
 正多角錐(円錐)形状生成関数
void setConeDivide (int div)
 正多角錐(円錐)角数設定関数
void setConeRadius (double rad)
 正多角錐(円錐)底面半径設定関数
void setConeHeight (double height)
 正多角錐(円錐)高さ設定関数
その他



void putSolid (fk_Solid *solid)
 fk_Solid 出力関数
void setAnimationTime (double time)
 アニメーション時間設定関数
void setBVHMotion (fk_BVHMotion *bvh)
 BVHデータ設定関数.

説明

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

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

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

また、これらのデータファイル入力の他に、 頂点座標データとインデックスフェースデータから形状を自前で生成することも可能です。 ただし、作成できる形状には制限げあります。 この機能の詳細は 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_IndexFaceSet::fk_IndexFaceSet ( void   ) 

コンストラクタ

fk_IndexFaceSet::~fk_IndexFaceSet (  ) 

デストラクタ


関数

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

SMFファイル入力関数.

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

引数:
[in] fileName ファイル名
戻り値:
成功すれば true を、失敗すれば false を返します。
bool 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は文法解釈、特にセパレータの扱い方についてはあまり厳密になっておらず、 様々なデータによって異なる解釈がなされているようです。 そのため、構文解析がうまくいかずに入力失敗する場合がありえます。
bool 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 を返します。
bool fk_IndexFaceSet::readHRCFile ( std::string  fileName  ) 

HRCファイル入力関数.

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

引数:
[in] fileName ファイル名
戻り値:
成功すれば true を、失敗すれば false を返します。
bool fk_IndexFaceSet::readRDSFile ( std::string  fileName,
bool  solidFlg = true 
)

RDSファイル入力関数.

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

引数:
[in] fileName ファイル名
[in] solidFlg true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
戻り値:
成功すれば true を、失敗すれば false を返します。
bool fk_IndexFaceSet::readDXFFile ( std::string  fileName,
bool  solidFlg = true 
)

DXFファイル入力関数.

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

引数:
[in] fileName ファイル名
[in] solidFlg true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
戻り値:
成功すれば true を、失敗すれば false を返します。
bool 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 の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
readMQOData(), fk_IFSTexture::readMQOFile()
bool 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 の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
readMQOData(), fk_IFSTexture::readMQOFile()
bool 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 の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
readMQOFile(), fk_IFSTexture::readMQOData()
bool 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 の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
readMQOFile(), fk_IFSTexture::readMQOData()
bool 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()
bool 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] solidFlg true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
[in] materialID D3DXデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。
戻り値:
ファイルの入力に成功した場合 true を、失敗した場合 false を返します。
参照:
fk_IFSTexture::readD3DXFile()
bool fk_IndexFaceSet::writeVRMLFile ( std::string  fileName,
fk_Material material = NULL,
bool  triFlg = false 
)

VRML ファイル出力関数1.

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

引数:
[in] fileName ファイル名
[in] material VRMLファイル中に「Material」ノードとしてマテリアル情報を保存します。 NULL を代入した場合は、VRMLファイル中に「Material」ノードを生成しません。
[in] triFlg 仮想関数からの継承のために存在する引数で、処理には一切影響しません。
戻り値:
ファイルの出力に成功した場合 true を、失敗した場合 false を返します。
bool fk_IndexFaceSet::writeVRMLFile ( std::string  fileName,
std::vector< double > *  time,
std::vector< fk_Vector > *  pos,
fk_Material material = NULL,
bool  triFlg = false 
)

VRML ファイル出力関数2.

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

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

STL ファイル出力関数.

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

引数:
[in] fileName ファイル名
戻り値:
ファイルの出力に成功した場合 true を、失敗した場合 false を返します。
bool fk_IndexFaceSet::writeDXFFile ( std::string  fileName,
bool  triFlg = false 
)

DXF ファイル出力関数.

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

引数:
[in] fileName ファイル名
[in] triFlg 面情報を3角形として出力したい場合は、true を代入します。 false の場合、3角形面を2点が重複している4角形面として出力します。
戻り値:
ファイルの出力に成功した場合 true を、失敗した場合 false を返します。
bool fk_IndexFaceSet::writeMQOFile ( std::string  fileName  ) 

MQO ファイル出力関数.

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

引数:
[in] fileName ファイル名
戻り値:
ファイルの出力に成功した場合 true を、失敗した場合 false を返します。
int fk_IndexFaceSet::getPosSize ( void   ) 

頂点数参照関数

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

戻り値:
頂点数
int fk_IndexFaceSet::getFaceSize ( void   ) 

面数参照関数

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

戻り値:
面数
fk_Vector fk_IndexFaceSet::getPosVec ( int  vertexID  ) 

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

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

引数:
[in] vertexID 頂点ID。一番最初の頂点IDは 0 になります。 最後の ID は頂点数から 1 を引いたものとなります。
戻り値:
頂点の位置ベクトル
参照:
moveVPosition()
std::vector<int> fk_IndexFaceSet::getFaceData ( int  faceID  ) 

頂点 ID 配列参照関数

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

引数:
[in] faceID 面 ID。一番最初の面IDは 0 になります。 最後の ID は面数から 1 を引いたものとなります。
戻り値:
頂点 ID 配列
int 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
fk_IFType fk_IndexFaceSet::getFaceType ( void   ) 

面タイプ取得関数

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

戻り値:
面タイプ
fk_Vector fk_IndexFaceSet::getPNorm ( int  faceID,
int  order = 0 
)

面法線ベクトル取得関数

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

引数:
[in] faceID 面ID
[in] order 最初の面IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
面の法線ベクトル
参照:
setPNorm(), getVNorm()
fk_Vector fk_IndexFaceSet::getVNorm ( int  vertexID,
int  order = 0 
)

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

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

引数:
[in] vertexID 頂点ID
[in] order 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
頂点の法線ベクトル
参照:
setVNorm(), getPNorm()
int fk_IndexFaceSet::getElemMaterialID ( int  faceID  ) 

マテリアルID取得関数

面に対して個別に設定してあるマテリアル ID を取得します。 マテリアルの個別設定については fk_Shape::setMaterialMode() および fk_Shape::setPalette() を参照して下さい。

引数:
[in] faceID 面ID
戻り値:
マテリアルID
参照:
setElemMaterialID(), fk_Shape
bool fk_IndexFaceSet::moveVPosition ( int  vertexID,
const fk_Vector pos,
int  order = 0 
)

頂点移動関数1

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

引数:
[in] vertexID 頂点ID
[in] pos 移動先の位置ベクトル
[in] order 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
getPosVec()
bool fk_IndexFaceSet::moveVPosition ( int  vertexID,
double  x,
double  y,
double  z,
int  order = 0 
)

頂点移動関数2

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

引数:
[in] vertexID 頂点ID
[in] x 移動先位置ベクトルの x 成分
[in] y 移動先位置ベクトルの y 成分
[in] z 移動先位置ベクトルの z 成分
[in] order 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
getPosVec()
bool fk_IndexFaceSet::moveVPosition ( int  vertexID,
double *  array,
int  order = 0 
)

頂点移動関数3

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

引数:
[in] vertexID 頂点ID
[in] array 移動先位置ベクトルの各成分が入った double 型配列。
[in] order 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
getPosVec()
void fk_IndexFaceSet::makeIFSet ( int  faceNum,
int  polyNum,
int *  IFSet,
int  vertexNum,
fk_Vector posArray,
int  order = 0 
)

任意形状生成関数

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

引数:
[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
bool fk_IndexFaceSet::setPNorm ( int  faceID,
const fk_Vector norm,
int  order = 0 
)

面法線ベクトル設定関数

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

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

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

引数:
[in] faceID 面ID
[in] norm 法線ベクトル。あらかじめ正規化しておく必要があります。 正規化されていない放線ベクトルを入力した場合、 動作が異常となる場合があります。
[in] order 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
getPNorm(), setVNorm()
bool fk_IndexFaceSet::setVNorm ( int  vertexID,
const fk_Vector norm,
int  order = 0 
)

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

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

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

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

引数:
[in] vertexID 頂点ID
[in] norm 法線ベクトル。あらかじめ正規化しておく必要があります。 正規化されていない放線ベクトルを入力した場合、 動作が異常となる場合があります。
[in] order 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値:
成功すれば true を、失敗すれば false を返します。
参照:
getVNorm(), setPNorm()
bool fk_IndexFaceSet::setElemMaterialID ( int  faceID,
int  materialID 
)

マテリアルID設定関数

面に対してマテリアルIDを設定します。 マテリアルの個別設定については fk_Shape::setMaterialMode() および fk_Shape::setPalette() を参照して下さい。

引数:
[in] faceID 面ID
[in] materialID マテリアルID
戻り値:
設定に成功すれば true を、失敗すれば false を返します。
参照:
getElemMaterialID, fk_Shape
void fk_IndexFaceSet::flush ( void   ) 

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

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

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

参照:
getPNorm(), getVNorm(), setPNorm(), setVNorm()
void 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
void fk_IndexFaceSet::setBlockSize ( double  x,
double  y,
double  z 
)

直方体辺長変更関数

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

引数:
[in] x x方向の辺長
[in] y y方向の辺長
[in] z z方向の辺長
参照:
makeBlock(), fk_Block
void 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
void fk_IndexFaceSet::setBlockScale ( double  scale  ) 

直方体全体拡大縮小関数

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

引数:
[in] scale 倍率
参照:
makeBlock(), fk_Block
void 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
void fk_IndexFaceSet::setBlockScale ( double  x,
double  y,
double  z 
)

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

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

引数:
[in] x x方向の倍率
[in] y y方向の倍率
[in] z z方向の倍率
参照:
makeBlock(), fk_Block
void fk_IndexFaceSet::makeCircle ( int  div,
double  rad 
)

円形状生成関数

円形状を生成します。

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

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

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

引数:
[in] div 分割数。実際には円弧全体をこの数値の 4 倍で分割します。
[in] rad 半径
参照:
fk_Circle
void fk_IndexFaceSet::setCircleRadius ( double  rad  ) 

円形状半径設定関数

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

引数:
[in] rad 半径
参照:
makeCircle(), fk_Circle
void fk_IndexFaceSet::setCircleDivide ( int  div  ) 

円形状分割数設定関数

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

引数:
[in] div 分割数
参照:
makeCircle(), fk_Circle
void fk_IndexFaceSet::setCircleScale ( double  scale  ) 

円形状拡大縮小関数

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

引数:
[in] scale 倍率
参照:
makeCircle(), fk_Circle
void fk_IndexFaceSet::makeSphere ( int  div,
double  rad 
)

球形状生成関数

球形状を生成します。

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

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

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

引数:
[in] div 分割数
[in] rad 半径
参照:
fk_Sphere
void fk_IndexFaceSet::setSphereRadius ( double  rad  ) 

球形状半径設定関数

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

引数:
[in] rad 半径
参照:
makeSphere(), fk_Sphere
void fk_IndexFaceSet::setSphereDivide ( int  div  ) 

球形状分割数設定関数

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

引数:
[in] div 分割数
参照:
makeSphere(), fk_Sphere
void fk_IndexFaceSet::setSphereScale ( double  scale  ) 

球形状拡大縮小関数

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

引数:
[in] scale 倍率
参照:
makeSphere(), fk_Sphere
void fk_IndexFaceSet::makePrism ( int  div,
double  top,
double  bottom,
double  height 
)

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

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

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

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

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

引数:
[in] div 角数
[in] top 上面半径
[in] bottom 底面半径
[in] height 高さ
参照:
fk_Prism
void fk_IndexFaceSet::setPrismDivide ( int  div  ) 

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

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

引数:
[in] div 角数
参照:
makePrism(), fk_Prism
void fk_IndexFaceSet::setPrismTopRadius ( double  top  ) 

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

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

引数:
[in] top 上面半径
参照:
makePrism(), fk_Prism
void fk_IndexFaceSet::setPrismBottomRadius ( double  bottom  ) 

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

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

引数:
[in] bottom 底面半径
参照:
makePrism(), fk_Prism
void fk_IndexFaceSet::setPrismHeight ( double  height  ) 

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

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

引数:
[in] height 高さ
参照:
makePrism(), fk_Prism
void fk_IndexFaceSet::makeCone ( int  div,
double  rad,
double  height 
)

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

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

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

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

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

引数:
[in] div 角数
[in] rad 底面半径
[in] height 高さ
参照:
fk_Cone
void fk_IndexFaceSet::setConeDivide ( int  div  ) 

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

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

引数:
[in] div 角数
参照:
makeCone(), fk_Cone
void fk_IndexFaceSet::setConeRadius ( double  rad  ) 

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

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

引数:
[in] rad 底面半径
参照:
makeCone(), fk_Cone
void fk_IndexFaceSet::setConeHeight ( double  height  ) 

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

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

引数:
[in] height 高さ
参照:
makeCone(), fk_Cone
void fk_IndexFaceSet::putSolid ( fk_Solid solid  ) 

fk_Solid 出力関数

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

引数:
[in] solid fk_Solid 型インスタンスのアドレス
参照:
fk_Solid
void fk_IndexFaceSet::setAnimationTime ( double  time  ) 

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

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

引数:
[in] time アニメーション時間
参照:
readD3DXFile(), setBVHMotion(), fk_BVHMotion
void fk_IndexFaceSet::setBVHMotion ( fk_BVHMotion bvh  ) 

BVHデータ設定関数.

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

引数:
[in] bvh fk_BVHMotion 型インスタンスのアドレス
参照:
setAnimationTime(), readD3DXFile(), fk_BVHMotion

FineKernelToolKitに対してSat Sep 26 20:35:30 2009に生成されました。  doxygen 1.6.1