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

シェーダー内 attribute 変数用ベクトル管理クラス [詳解]

#include <FK/FVecArray.h>

公開メンバ関数

 fk_FVecArray (void)
 コンストラクタ
 
 ~fk_FVecArray ()
 デストラクタ
 
fk_FVecArrayoperator= (const fk_FVecArray &)
 代入演算子
 
 fk_FVecArray (const fk_FVecArray &)
 コピーコンストラクタ
 
void setDim (int dim)
 次元設定関数
 
int getDim (void)
 次元参照関数
 
void resize (int size)
 要素数設定関数
 
int getSize (void)
 要素数参照関数
 
void clear (void)
 データ消去関数
 
void push (const fk_Vector &v)
 fk_Vector 型ベクトル追加関数
 
void push (const fk_FVector &v)
 fk_FVector 型ベクトル追加関数
 
void push (const fk_HVector &v)
 fk_HVector 型ベクトル追加関数
 
void push (const fk_TexCoord &v)
 fk_TexCoord 型ベクトル追加関数
 
void push (const fk_Color &c)
 fk_Color 型色値追加関数
 
void push (double x, double y, double z=0.0, double w=0.0)
 ベクトル追加関数1
 
void push (float x, float y, float z=0.0f, float w=0.0f)
 ベクトル追加関数2
 
bool set (int id, const fk_Vector &v)
 fk_Vector 型ベクトル設定関数
 
bool set (int id, const fk_FVector &v)
 fk_FVector 型ベクトル設定関数
 
bool set (int id, const fk_HVector &v)
 fk_HVector 型ベクトル設定関数
 
bool set (int id, const fk_TexCoord &v)
 fk_TexCoord 型ベクトル設定関数
 
bool set (int id, const fk_Color &c)
 fk_Color 型ベクトル設定関数
 
bool set (int id, double x, double y)
 2次元ベクトル設定関数1
 
bool set (int id, double x, double y, double z)
 3次元ベクトル設定関数1
 
bool set (int id, double x, double y, double z, double w)
 4次元ベクトル設定関数1
 
bool set (int id, float x, float y)
 2次元ベクトル設定関数2
 
bool set (int id, float x, float y, float z)
 3次元ベクトル設定関数2
 
bool set (int id, float x, float y, float z, float w)
 4次元ベクトル設定関数2
 
fk_Vector getV (int id)
 fk_Vector 型取得関数
 
fk_FVector getF (int id)
 fk_FVector 型取得関数
 
fk_HVector getHV (int id)
 fk_HVector 型取得関数
 
fk_TexCoord getT (int id)
 fk_TexCoord 型取得関数
 
fk_Color getC (int id)
 fk_Color 型取得関数
 
std::vector< float > * getP (void)
 データアドレス取得関数
 
bool isModify (void)
 全体変更状態取得関数
 
bool isModify (int id)
 個別要素変更状態取得関数
 
void reset (void)
 変更状態初期化関数
 

詳解

シェーダー内 attribute 変数用ベクトル管理クラス

このクラスは、シェーダー内の attribute 変数として使用することを念頭においた、 ベクトルデータ格納用のクラスです。 このクラスは fk_Vector のような各種ベクトル演算は利用できませんが、 FK 内で作成した様々なベクトルデータを効率的に格納し、 シェーダー側に転送する機能を提供します。 なお、内部では全て float 型浮動小数点数として保存されます。

シェーダー内で attribute 変数として使用するには、大きく4つの処理が必要です。

  1. クラス内の各種設定やデータ格納を行っておく。
  2. fk_Shape::setShaderAttribute(std::string, int, std::vector<float> *) を用いて シェーダー内の変数名を設定しておく。その際、第3引数の getP() を利用する。
  3. fk_ShaderParameter::reserveAttribute() により、シェーダー内での変数名を設定する。
  4. 格納データの変更があったら fk_Shape::modifyAttribute() を呼び出す。

\ sa fk_Vector, fk_HVector, fk_TexCoord, fk_Color, fk_Shape, fk_ShaderParameter

構築子と解体子

◆ fk_FVecArray() [1/2]

FK::fk_FVecArray::fk_FVecArray ( void  )

コンストラクタ

◆ ~fk_FVecArray()

FK::fk_FVecArray::~fk_FVecArray ( )

デストラクタ

◆ fk_FVecArray() [2/2]

FK::fk_FVecArray::fk_FVecArray ( const fk_FVecArray )

コピーコンストラクタ

関数詳解

◆ operator=()

fk_FVecArray & FK::fk_FVecArray::operator= ( const fk_FVecArray )

代入演算子

◆ setDim()

void FK::fk_FVecArray::setDim ( int  dim)

次元設定関数

格納するベクトルデータの次元数を設定します。 次元は 2 から 4 まで設定が可能で、 シェーダープログラム内での型はそれぞれ vec2, vec3, vec4 となります。 デフォルトでの次元数は 3 に設定されています。

引数
[in]dim次元数

◆ getDim()

int FK::fk_FVecArray::getDim ( void  )

次元参照関数

現在設定されている次元数を参照します。

戻り値
次元数

◆ resize()

void FK::fk_FVecArray::resize ( int  size)

要素数設定関数

要素数を設定します。 格納される float 型実数の個数は、ここで指定した要素数と次元の積となります。

引数
[in]size要素数
参照
getSize(), clear(), setDim()

◆ getSize()

int FK::fk_FVecArray::getSize ( void  )

要素数参照関数

現在設定されている要素数を返します。 格納されている float 型実数の個数は、この要素数と次元の積となります。

戻り値
要素数
参照
resize(), clear(), setDim()

◆ clear()

void FK::fk_FVecArray::clear ( void  )

データ消去関数

現在格納されている要素を全て破棄し、要素数を 0 にします。 この関数により次元は変更されません。

参照
resize(), getSize(), setDim()

◆ push() [1/7]

void FK::fk_FVecArray::push ( const fk_Vector v)

fk_Vector 型ベクトル追加関数

fk_Vector 型変数からデータを追加します。 なお、次元数が 2 だった場合は z 成分を破棄します。 また、次元数が 4 だった場合は、第 4 成分には 0 が設定されます。

引数
[in]v追加するベクトル
参照
set(int, const fk_Vector &)

◆ push() [2/7]

void FK::fk_FVecArray::push ( const fk_FVector v)

fk_FVector 型ベクトル追加関数

fk_FVector 型変数からデータを追加します。 なお、次元数が 2 だった場合は z 成分を破棄します。 また、次元数が 4 だった場合は、第 4 成分には 0 が設定されます。

引数
[in]v追加するベクトル
参照
set(int, const fk_FVector &)

◆ push() [3/7]

void FK::fk_FVecArray::push ( const fk_HVector v)

fk_HVector 型ベクトル追加関数

fk_HVector 型変数からデータを追加します。 なお、次元数が 2 だった場合は z,w 成分を、 次元数が 3 だった場合は w 成分を破棄します。

引数
[in]v追加するベクトル
参照
set(int, const fk_HVector &)

◆ push() [4/7]

void FK::fk_FVecArray::push ( const fk_TexCoord v)

fk_TexCoord 型ベクトル追加関数

fk_TexCoord 型変数からデータを追加します。 なお、次元数が 3,4 だった場合は、それぞれの成分に 0 が設定されます。

引数
[in]v追加するベクトル
参照
set(int, const fk_TexCoord &)

◆ push() [5/7]

void FK::fk_FVecArray::push ( const fk_Color c)

fk_Color 型色値追加関数

fk_Color 型変数からデータを追加します。 なお、次元数が 2 だった場合は b,a 成分を、 次元数が 3 だった場合は a 成分を破棄します。

引数
[in]c追加する色値
参照
set(int, const fk_Color &)

◆ push() [6/7]

void FK::fk_FVecArray::push ( double  x,
double  y,
double  z = 0.0,
double  w = 0.0 
)

ベクトル追加関数1

ベクトルを (x, y, z, w) の順番で追加します。 次元数が引数の個数より多かった場合は超過した成分を破棄します。 次元数が引数の個数より少なかった場合、指定されなかった成分には 0 が設定されます。 第3,4引数は省略可能です。

引数
[in]x第1成分
[in]y第2成分
[in]z第3成分
[in]w第4成分

◆ push() [7/7]

void FK::fk_FVecArray::push ( float  x,
float  y,
float  z = 0.0f,
float  w = 0.0f 
)

ベクトル追加関数2

ベクトルを (x, y, z, w) の順番で追加します。 次元数が引数の個数より多かった場合は超過した成分を破棄します。 次元数が引数の個数より少なかった場合、指定されなかった成分には 0 が設定されます。 第3,4引数は省略可能です。

引数
[in]x第1成分
[in]y第2成分
[in]z第3成分
[in]w第4成分

◆ set() [1/11]

bool FK::fk_FVecArray::set ( int  id,
const fk_Vector v 
)

fk_Vector 型ベクトル設定関数

fk_Vector 型変数のデータを設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

なお、次元数が 2 だった場合は z 成分を破棄します。 また、次元数が 4 だった場合は、第 4 成分には 0 が設定されます。

引数
[in]id要素 ID
[in]v追加するベクトル
参照
push(const fk_Vector &)

◆ set() [2/11]

bool FK::fk_FVecArray::set ( int  id,
const fk_FVector v 
)

fk_FVector 型ベクトル設定関数

fk_FVector 型変数のデータを設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

なお、次元数が 2 だった場合は z 成分を破棄します。 また、次元数が 4 だった場合は、第 4 成分には 0 が設定されます。

引数
[in]id要素 ID
[in]v追加するベクトル
参照
push(const fk_FVector &)

◆ set() [3/11]

bool FK::fk_FVecArray::set ( int  id,
const fk_HVector v 
)

fk_HVector 型ベクトル設定関数

fk_HVector 型変数のデータを設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

なお、次元数が 2 だった場合は z,w 成分を、 次元数が 3 だった場合は w 成分を破棄します。

引数
[in]id要素 ID
[in]v追加するベクトル
参照
push(const fk_HVector &)

◆ set() [4/11]

bool FK::fk_FVecArray::set ( int  id,
const fk_TexCoord v 
)

fk_TexCoord 型ベクトル設定関数

fk_TexCoord 型変数のデータを設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

なお、次元数が 3,4 だった場合は、それぞれの成分に 0 が設定されます。

引数
[in]id要素 ID
[in]v追加するベクトル
参照
push(const fk_TexCoord &)

◆ set() [5/11]

bool FK::fk_FVecArray::set ( int  id,
const fk_Color c 
)

fk_Color 型ベクトル設定関数

fk_Color 型変数のデータを設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

なお、次元数が 2 だった場合は b,a 成分を、 次元数が 3 だった場合は a 成分を破棄します。

引数
[in]id要素 ID
[in]c追加する色値
参照
push(const fk_Color &)

◆ set() [6/11]

bool FK::fk_FVecArray::set ( int  id,
double  x,
double  y 
)

2次元ベクトル設定関数1

ベクトルを (x, y) の順番で設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

次元数が引数の個数より多かった場合は超過した成分を破棄します。 次元数が引数の個数より少なかった場合、指定されなかった成分は変更しません。

引数
[in]id要素 ID
[in]x第1成分
[in]y第2成分
参照
push(double, double)

◆ set() [7/11]

bool FK::fk_FVecArray::set ( int  id,
double  x,
double  y,
double  z 
)

3次元ベクトル設定関数1

ベクトルを (x, y, z) の順番で設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

次元数が引数の個数より多かった場合は超過した成分を破棄します。 次元数が引数の個数より少なかった場合、指定されなかった成分は変更しません。

引数
[in]id要素 ID
[in]x第1成分
[in]y第2成分
[in]z第3成分
参照
push(double, double, double)

◆ set() [8/11]

bool FK::fk_FVecArray::set ( int  id,
double  x,
double  y,
double  z,
double  w 
)

4次元ベクトル設定関数1

ベクトルを (x, y, z, w) の順番で設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

次元数が引数の個数より多かった場合は超過した成分を破棄します。

引数
[in]id要素 ID
[in]x第1成分
[in]y第2成分
[in]z第3成分
[in]w第4成分
参照
push(double, double, double, double)

◆ set() [9/11]

bool FK::fk_FVecArray::set ( int  id,
float  x,
float  y 
)

2次元ベクトル設定関数2

ベクトルを (x, y) の順番で設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

次元数が引数の個数より少なかった場合、指定されなかった成分は変更しません。

引数
[in]id要素 ID
[in]x第1成分
[in]y第2成分
参照
push(float, float)

◆ set() [10/11]

bool FK::fk_FVecArray::set ( int  id,
float  x,
float  y,
float  z 
)

3次元ベクトル設定関数2

ベクトルを (x, y, z) の順番で設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

次元数が引数の個数より多かった場合は超過した成分を破棄します。 次元数が引数の個数より少なかった場合、指定されなかった成分は変更しません。

引数
[in]id要素 ID
[in]x第1成分
[in]y第2成分
[in]z第3成分
参照
push(float, float, float)

◆ set() [11/11]

bool FK::fk_FVecArray::set ( int  id,
float  x,
float  y,
float  z,
float  w 
)

4次元ベクトル設定関数2

ベクトルを (x, y, z, w) の順番で設定します。 もし id が現在の要素数以上となっていた場合は、 内部で自動的に resize(id+1) が呼び出されます。

次元数が引数の個数より多かった場合は超過した成分を破棄します。

引数
[in]id要素 ID
[in]x第1成分
[in]y第2成分
[in]z第3成分
[in]w第4成分
参照
push(float, float, float, float)

◆ getV()

fk_Vector FK::fk_FVecArray::getV ( int  id)

fk_Vector 型取得関数

fk_Vector 型で格納データを取得します。

引数
[in]id要素 ID
戻り値
要素データ
参照
set(int, const fk_Vector &)

◆ getF()

fk_FVector FK::fk_FVecArray::getF ( int  id)

fk_FVector 型取得関数

fk_FVector 型で格納データを取得します。

引数
[in]id要素 ID
戻り値
要素データ
参照
set(int, const fk_FVector &)

◆ getHV()

fk_HVector FK::fk_FVecArray::getHV ( int  id)

fk_HVector 型取得関数

fk_HVector 型で格納データを取得します。

引数
[in]id要素 ID
戻り値
要素データ
参照
set(int, const fk_HVector &)

◆ getT()

fk_TexCoord FK::fk_FVecArray::getT ( int  id)

fk_TexCoord 型取得関数

fk_TexCoord 型で格納データを取得します。

引数
[in]id要素 ID
戻り値
要素データ
参照
set(int, const fk_TexCoord &)

◆ getC()

fk_Color FK::fk_FVecArray::getC ( int  id)

fk_Color 型取得関数

fk_Color 型で格納データを取得します。

引数
[in]id要素 ID
戻り値
要素データ
参照
set(int, const fk_Color &)

◆ getP()

std::vector< float > * FK::fk_FVecArray::getP ( void  )

データアドレス取得関数

データ格納データのアドレスを取得します。 本関数は、 fk_Shape::setShaderAttribute(std::string, int, std::vector<float> *) の第3引数に入力することを想定しています。

戻り値
アドレス

◆ isModify() [1/2]

bool FK::fk_FVecArray::isModify ( void  )

全体変更状態取得関数

以前に reset() が呼ばれてからのデータ変更有無を取得します。

戻り値
変更があった場合 true を、なかった場合 false を返します。
参照
isModify(int)

◆ isModify() [2/2]

bool FK::fk_FVecArray::isModify ( int  id)

個別要素変更状態取得関数

以前に reset() が呼ばれてから、個別要素データ変更の有無を取得します。

引数
[in]id要素ID
戻り値
変更があった場合 true を、なかった場合 false を返します。
参照
isModify()

◆ reset()

void FK::fk_FVecArray::reset ( void  )

変更状態初期化関数

isModify(), isModify(int) による変更有無情報を初期化します。

参照
isModify(), isModify(int)