FineKernelToolKit 4.2.13
|
メッシュテクスチャを生成、管理するクラス [詳解]
#include <FK/MeshTexture.h>
公開メンバ関数 | |
fk_MeshTexture (fk_Image *image=nullptr) | |
コンストラクタ | |
virtual | ~fk_MeshTexture () |
デストラクタ | |
void | init (void) |
初期化関数 | |
bool | setTriNum (int num) |
3角形面数設定関数 | |
int | getTriNum (void) |
3角形面数参照関数 | |
bool | setTextureCoord (int tID, int vID, double x, double y) |
テクスチャ座標設定関数1 | |
bool | setTextureCoord (int tID, int vID, fk_TexCoord coord) |
テクスチャ座標設定関数2 | |
bool | setTriTextureCoord (int tID, std::vector< fk_TexCoord > *array) |
テクスチャ座標配列設定関数1 | |
bool | setTriTextureCoord (int tID, fk_TexCoord *array) |
テクスチャ座標配列設定関数2 | |
fk_TexCoord | getTextureCoord (int tID, int vID) |
テクスチャ座標参照関数 | |
bool | setVertexPos (int tID, int vID, double x, double y, double z) |
頂点位置ベクトル設定関数1 | |
bool | setVertexPos (int tID, int vID, fk_Vector pos) |
頂点位置ベクトル設定関数2 | |
bool | setTriPos (int tID, std::vector< fk_Vector > *array) |
頂点位置ベクトル配列設定関数1 | |
bool | setTriPos (int tID, fk_Vector *array) |
頂点位置ベクトル配列設定関数2 | |
fk_Vector | getVertexPos (int tID, int vID) |
頂点位置ベクトル参照関数 | |
void | putIndexFaceSet (fk_IndexFaceSet *ifs) |
fk_IndexFaceSet インスタンスコピー関数 | |
bool | readMQOFile (std::string fileName, std::string objName, bool contFlg=true) |
MQOファイル入力関数 | |
![]() | |
void | setImage (fk_Image *image) |
画像データ設定関数 | |
fk_Image * | getImage (void) |
画像データ取得関数 | |
bool | readBMP (std::string fileName) |
BMP ファイル入力関数 | |
bool | readBMPData (fk_ImType *buf) |
BMP バッファ入力関数 | |
bool | readPNG (std::string fileName) |
PNG ファイル入力関数 | |
bool | readPNGData (fk_ImType *buf) |
PNG バッファ入力関数 | |
bool | readJPG (std::string fileName) |
JPEG ファイル入力関数 | |
const fk_Dimension * | getImageSize (void) |
画像サイズ取得関数 | |
const fk_Dimension * | getBufferSize (void) |
画像バッファサイズ取得関数 | |
void | setTextureMode (fk_TexMode mode) |
テクスチャモード設定関数 | |
fk_TexMode | getTextureMode (void) |
テクスチャモード取得関数 | |
void | setTexRendMode (fk_TexRendMode mode) |
テクスチャ描画品質設定関数 | |
fk_TexRendMode | getTexRendMode (void) |
テクスチャ描画品質取得関数 | |
void | setTexWrapMode (fk_TexWrapMode mode) |
テクスチャ外周部モード設定関数 | |
fk_TexWrapMode | getTexWrapMode (void) |
テクスチャ外周部モード取得関数 | |
void | fillColor (const fk_Color &color) |
一様色初期化関数1 | |
void | fillColor (int r, int g, int b, int a=0) |
一様色初期化関数2 | |
const fk_ImType * | getImageBuf (void) |
画像データ配列先頭アドレス取得関数 | |
void | setFrameBuffer (fk_FrameBuffer *buffer) |
フレームバッファー設定関数 | |
fk_FrameBuffer * | getFrameBuffer (void) |
フレームバッファー取得関数 | |
void | initFrameBuffer (void) |
フレームバッファー情報初期化関数 | |
![]() | |
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_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_BaseObject (fk_Type type=fk_Type::BASEOBJECT) | |
コンストラクタ | |
fk_Type | getObjectType (void) const |
タイプ取得関数 | |
メッシュテクスチャを生成、管理するクラス
このクラスは、複数の3角形テクスチャを制御する機能を提供します。
メッシュテクスチャを生成するおおまかな手順は以下のようになります。
空間上に各頂点を配置する際、頂点の順番が反時計回りになっている側が表面となります。 テクスチャ座標系の方は必ずしも反時計回りになっている必要はありませんが、 それが時計回りである場合は表示される画像が結果的に裏返ります。
本クラスでは、1つのインスタンスで複数枚の3角形テクスチャを扱うことができます。 (その分、 fk_TriTexture よりも利用方法はやや複雑になっています。) 同様の機能を持つクラスとして、 fk_IFSTexture があります。 fk_IFSTexture クラスと比較した、 本クラスの長所と短所をまとめると以下のようになります。
総じて、3角形テクスチャの動的生成を想定する場合は fk_MeshTexture が有用です。 それ以外の用途では、 fk_IFSTexture の利用を検討する価値があると言えます。
FK::fk_MeshTexture::fk_MeshTexture | ( | fk_Image * | image = nullptr | ) |
コンストラクタ
[in] | image | テクスチャ画像。省略するか nullptr を代入した場合は、 テクスチャ画像を初期状態では生成しません。 |
|
virtual |
デストラクタ
void FK::fk_MeshTexture::init | ( | void | ) |
初期化関数
現在設定されているテクスチャ画像を廃棄し、全ての設定を初期状態に戻します。
bool FK::fk_MeshTexture::setTriNum | ( | int | num | ) |
3角形面数設定関数
3角形テクスチャ面の枚数を設定します。 枚数を変更しても、前に設定した面データは可能な限り保持します。
[in] | num | 枚数 |
int FK::fk_MeshTexture::getTriNum | ( | void | ) |
bool FK::fk_MeshTexture::setTextureCoord | ( | int | tID, |
int | vID, | ||
double | x, | ||
double | y | ||
) |
テクスチャ座標設定関数1
頂点のテクスチャ座標を設定します。 テクスチャ座標系については fk_TexCoord の説明を参照して下さい。 テクスチャ座標は、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | vID | 頂点IDを入力します。0, 1, 2 のいずれかになります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
[in] | x | テクスチャ座標の x 成分。0 以上 1 以下である必要があります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
[in] | y | テクスチャ座標の y 成分。0 以上 1 以下である必要があります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
bool FK::fk_MeshTexture::setTextureCoord | ( | int | tID, |
int | vID, | ||
fk_TexCoord | coord | ||
) |
テクスチャ座標設定関数2
頂点のテクスチャ座標を設定します。 テクスチャ座標系については fk_TexCoord の説明を参照して下さい。 テクスチャ座標は、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | vID | 頂点IDを入力します。0, 1, 2 のいずれかになります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
[in] | coord | テクスチャ座標。各成文は 0 以上 1 以下である必要があります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
bool FK::fk_MeshTexture::setTriTextureCoord | ( | int | tID, |
std::vector< fk_TexCoord > * | array | ||
) |
テクスチャ座標配列設定関数1
各3角形テクスチャのテクスチャ座標を、配列によって設定します。 テクスチャ座標系については fk_TexCoord の説明を参照して下さい。 テクスチャ座標は、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | array | テクスチャ座標を表す配列へのポインタです。 配列の先頭3個分のデータが利用されます。 |
bool FK::fk_MeshTexture::setTriTextureCoord | ( | int | tID, |
fk_TexCoord * | array | ||
) |
テクスチャ座標配列設定関数2
各3角形テクスチャのテクスチャ座標を、配列によって設定します。 テクスチャ座標系については fk_TexCoord の説明を参照して下さい。 テクスチャ座標は、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | array | テクスチャ座標を表す配列へのポインタです。 配列の先頭3個分のデータが利用されます。 |
fk_TexCoord FK::fk_MeshTexture::getTextureCoord | ( | int | tID, |
int | vID | ||
) |
テクスチャ座標参照関数
設定されているテクスチャ座標を取得します。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | vID | 頂点IDを入力します。0, 1, 2 のいずれかになります。 |
bool FK::fk_MeshTexture::setVertexPos | ( | int | tID, |
int | vID, | ||
double | x, | ||
double | y, | ||
double | z | ||
) |
頂点位置ベクトル設定関数1
頂点の空間中での位置ベクトルを設定します。 位置ベクトルは、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | vID | 頂点IDを入力します。0, 1, 2 のいずれかになります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
[in] | x | 頂点位置ベクトルの x 成分 |
[in] | y | 頂点位置ベクトルの y 成分 |
[in] | z | 頂点位置ベクトルの z 成分 |
bool FK::fk_MeshTexture::setVertexPos | ( | int | tID, |
int | vID, | ||
fk_Vector | pos | ||
) |
頂点位置ベクトル設定関数2
頂点の空間中での位置ベクトルを設定します。 位置ベクトルは、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | vID | 頂点IDを入力します。0, 1, 2 のいずれかになります。 それ以外の値を入力した場合はエラーとなり、false を返します。 |
[in] | pos | 頂点位置ベクトル |
bool FK::fk_MeshTexture::setTriPos | ( | int | tID, |
std::vector< fk_Vector > * | array | ||
) |
頂点位置ベクトル配列設定関数1
各3角形テクスチャの頂点位置ベクトルを、配列によって設定します。 位置ベクトルは、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | array | 頂点の位置ベクトルを表す配列へのポインタです。 配列の先頭3個分のデータが利用されます。 |
bool FK::fk_MeshTexture::setTriPos | ( | int | tID, |
fk_Vector * | array | ||
) |
頂点位置ベクトル配列設定関数2
各3角形テクスチャの頂点位置ベクトルを、配列によって設定します。 位置ベクトルは、一度設定した後でも動的に変更することが可能です。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | array | 頂点の位置ベクトルを表す配列へのポインタです。 配列の先頭3個分のデータが利用されます。 |
fk_Vector FK::fk_MeshTexture::getVertexPos | ( | int | tID, |
int | vID | ||
) |
頂点位置ベクトル参照関数
設定されている頂点位置ベクトルを取得します。
[in] | tID | 3角形面の ID を入力します。 ID は 0 から始まる整数値で、最大が枚数から1を引いたものとなります。 |
[in] | vID | 頂点IDを入力します。0, 1, 2 のいずれかになります。 |
void FK::fk_MeshTexture::putIndexFaceSet | ( | fk_IndexFaceSet * | ifs | ) |
fk_IndexFaceSet インスタンスコピー関数
現在の形状データを、 fk_IndexFaceSet 型のインスタンスにコピーします。
[in] | ifs | fk_IndexFaceSet 型インスタンスのアドレス。 |
bool FK::fk_MeshTexture::readMQOFile | ( | std::string | fileName, |
std::string | objName, | ||
bool | contFlg = true |
||
) |
MQOファイル入力関数
MQO 形式のファイルからデータを入力します。 本関数が入力を行うのは形状データとテクスチャ座標であり、 画像データの入力は行いません。 画像データ入力は fk_Texture のメンバ関数等を用いて別途行ってください。
MQOデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。
[in] | fileName | ファイル名 |
[in] | objName | オブジェクト名 |
[in] | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。 |