FineKernelToolKit 4.2.13
|
Gregory 曲面を生成、管理するクラス [詳解]
#include <CLI/FK_CLI/include/Gregory_CLI.h>
公開メンバ関数 | |
fk_Gregory (void) | |
コンストラクタ | |
~fk_Gregory () | |
デストラクタ | |
!fk_Gregory () | |
ファイナライザ | |
void | Init (void) |
初期化用メソッド | |
bool | SetBoundary (fk_UV uv, int vID, fk_Vector^ pos) |
境界制御点設定メソッド | |
bool | SetDerivative (fk_UV uv, int vID, fk_Vector^ pos) |
流れベクトル制御点設定メソッド | |
fk_Vector ^ | GetBoundary (fk_UV uv, int vID) |
境界制御点参照メソッド | |
fk_Vector ^ | GetDerivative (fk_UV uv, int vID) |
流れベクトル制御点参照メソッド | |
void | AdjustDerivative (void) |
流れベクトル制御点自動設定メソッド | |
void | AdjustDerivative (fk_UV uv) |
境界別流れベクトル制御点自動設定メソッド | |
bool | Connect (fk_Gregory^ surf, fk_UV thisUV, fk_UV otherUV, bool d, bool mode) |
隣接曲面G1連続接続メソッド | |
fk_Vector ^ | Pos (double u, double v) |
曲面点算出メソッド | |
fk_Vector ^ | Norm (double u, double v) |
曲面法線ベクトル算出メソッド | |
fk_Vector ^ | UDeriv (double u, double v) |
曲面 u 方向偏微分ベクトル算出メソッド | |
fk_Vector ^ | VDeriv (double u, double v) |
曲面 v 方向偏微分ベクトル算出メソッド | |
![]() | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< int >^ array) |
シェーダー内 attribute 変数設定メソッド1 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< float >^ array) |
シェーダー内 attribute 変数設定メソッド2 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< double >^ array) |
シェーダー内 attribute 変数設定メソッド3 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_Vector^>^ array) |
シェーダー内 attribute 変数設定メソッド4 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_TexCoord^>^ array) |
シェーダー内 attribute 変数設定メソッド5 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_HVector^>^ array) |
シェーダー内 attribute 変数設定メソッド6 | |
![]() | |
bool | SetAttrII (int key, int value) |
キーが int 型、値が int 型である属性設定メソッド | |
bool | SetAttrID (int key, double value) |
キーが int 型、値が double 型である属性設定メソッド | |
bool | SetAttrIS (int key, String^ value) |
キーが int 型、値が String 型である属性設定メソッド | |
bool | SetAttrSI (String^ key, int value) |
キーが String 型、値が int 型である属性設定メソッド | |
bool | SetAttrSD (String^ key, double value) |
キーが String 型、値が double 型である属性設定メソッド | |
bool | SetAttrSS (String ^ key, String^ value) |
キーが String 型、値が String 型である属性設定メソッド | |
int | GetAttrII (int key) |
キーが int 型、値が int 型である属性参照メソッド | |
double | GetAttrID (int key) |
キーが int 型、値が double 型である属性参照メソッド | |
String ^ | GetAttrIS (int key) |
キーが int 型、値が String 型である属性参照メソッド | |
int | GetAttrSI (String^ key) |
キーが String 型、値が int 型である属性参照メソッド | |
double | GetAttrSD (String^ key) |
キーが String 型、値が double 型である属性参照メソッド | |
String ^ | GetAttrSS (String^ key) |
キーが String 型、値が String 型である属性参照メソッド | |
bool | ExistAttrII (int key) |
キーが int 型、値が int 型である属性存在参照メソッド | |
bool | ExistAttrID (int key) |
キーが int 型、値が double 型である属性存在参照メソッド | |
bool | ExistAttrIS (int key) |
キーが int 型、値が String 型である属性存在参照メソッド | |
bool | ExistAttrSI (String^ key) |
キーが String 型、値が int 型である属性存在参照メソッド | |
bool | ExistAttrSD (String^ key) |
キーが String 型、値が double 型である属性存在参照メソッド | |
bool | ExistAttrSS (String^ key) |
キーが String 型、値が String 型である属性存在参照メソッド | |
bool | DeleteAttrII (int key) |
キーが int 型、値が int 型である属性消去メソッド | |
bool | DeleteAttrID (int key) |
キーが int 型、値が double 型である属性消去メソッド | |
bool | DeleteAttrIS (int key) |
キーが int 型、値が String 型である属性消去メソッド | |
bool | DeleteAttrSI (String^ key) |
キーが String 型、値が int 型である属性消去メソッド | |
bool | DeleteAttrSD (String^ key) |
キーが String 型、値が double 型である属性消去メソッド | |
bool | DeleteAttrSS (String^ key) |
キーが String 型、値が String 型である属性消去メソッド | |
プロパティ | |
int | Div [get, set] |
分割数プロパティ | |
![]() | |
fk_RealShapeType^ | RealShapeType [get] |
形状データ構造プロパティ | |
Gregory 曲面を生成、管理するクラス
このクラスは、形状として Gregory 曲面を制御する機能を提供します。 u,v 両方向で 3 次式のみに対応しています。
Gregory 曲面の境界線や制御点は以下の図のような構成を持っています。
以降、この図に基づいて各要素を解説していきます。
Gregory 曲面の境界は以下のような 4 本の 3 次 Bezier 曲線により構成されています。
これらの境界線を構成する制御点を「境界制御点」と呼び、 図中の「C」で構成されている制御点にあたります。 これらの点位置は setBoundary() で設定が可能で、 「曲線名」と「ID」によって指定します。 図中の境界制御点の一番目が曲線名、二番目が ID にあたります。 4隅の制御点については指定方法が 2 種類あります。 例えば、図の左上の制御点は SetBoundary(fk_UV.U_E, 0, V) と SetBoundary(fk_UV.V_S, 3, V) の両方の指定方法があります。
Gregory 曲面は境界制御点の他に、流れベクトルを制御する 「流れベクトル制御点」があり、図中の「D」で構成されている点にあたります。 これらの制御点の位置を変更しても境界線は変化しませんが、 曲面境界部分の流れベクトル(偏微分ベクトル)が変化します。 流れベクトルを適切に設定すると、 隣り合う曲面が境界部分で折れ曲がらず滑らかに接続することができます。
FK_CLI::fk_Gregory::fk_Gregory | ( | void | ) |
コンストラクタ
FK_CLI::fk_Gregory::~fk_Gregory | ( | ) |
デストラクタ
FK_CLI::fk_Gregory::!fk_Gregory | ( | ) |
ファイナライザ
void FK_CLI::fk_Gregory::Init | ( | void | ) |
初期化用メソッド
このメソッドは、曲面を初期状態(全ての制御点が原点にある状態)にします。
境界制御点設定メソッド
境界線の制御点位置ベクトルを設定します。
[in] | uv | 設定を行う境界線の種類 |
[in] | vID | 制御点 ID。先頭は 0 になります。 |
[in] | pos | 制御点位置ベクトル |
流れベクトル制御点設定メソッド
流れベクトル制御点位置ベクトルを設定します。
[in] | uv | 設定を行う境界線の種類 |
[in] | vID | 制御点 ID。1, 2 のいずれかになります。 |
[in] | pos | 制御点位置ベクトル |
境界制御点参照メソッド
曲面の境界制御点位置ベクトルを参照します。
[in] | uv | 境界線種類 |
[in] | vID | 制御点のv方向ID |
流れベクトル制御点参照メソッド
曲面の流れベクトル制御点位置ベクトルを参照します。
[in] | uv | 境界線種類 |
[in] | vID | 制御点のv方向ID |
void FK_CLI::fk_Gregory::AdjustDerivative | ( | void | ) |
流れベクトル制御点自動設定メソッド
現在の境界曲線情報より、流れベクトル制御点を自動的に設定します。 このとき、内部制御点は境界上の流れベクトルが線形補間となるように設定されます。
void FK_CLI::fk_Gregory::AdjustDerivative | ( | fk_UV | uv | ) |
境界別流れベクトル制御点自動設定メソッド
特定の境界線に対し、現在の境界曲線情報より流れベクトル制御点を自動的に設定します。 このとき、流れベクトル制御点は境界上の流れベクトルが線形補間となるように設定されます。
[in] | uv | 指定する制御点に隣接する境界曲線を指定します。 |
bool FK_CLI::fk_Gregory::Connect | ( | fk_Gregory^ | surf, |
fk_UV | thisUV, | ||
fk_UV | otherUV, | ||
bool | d, | ||
bool | mode | ||
) |
隣接曲面G1連続接続メソッド
隣接する曲面と G1 連続性を持つように制御点位置を移動します。 隣接する境界線のうち、両端点については一致している必要があります。 その他の制御点については、 surf 側の制御点に従って補正が行われます。
[in] | surf | 隣接曲面。 隣接している境界線の両端点が一致している必要があります。 |
[in] | thisUV | 接続する境界曲線を指定します。 |
[in] | otherUV | surf 側の接続境界曲線を指定します。 |
[in] | d | 自身と surf の境界が同じ方向になる場合 true を、 逆方向になる場合 false を代入します。 |
[in] | mode | 連続性を C1 とするか G1 とするかを設定します。 C1 連続とは、境界上の流れベクトルが全て連続であることです。 一方、G1 連続とは境界上の接平面が連続であることです。 G1 連続は必ずしも流れベクトルが連続である必要はありません。 |
true の場合、C1 連続性を持つように制御点を移動します。 false の場合、G1 連続性を持つように制御点を移動します。
fk_Vector ^ FK_CLI::fk_Gregory::Pos | ( | double | u, |
double | v | ||
) |
曲面点算出メソッド
パラメータに対応する曲面上の点の位置ベクトルを返します。
[in] | u | 曲面の u パラメータ |
[in] | v | 曲面の v パラメータ |
fk_Vector ^ FK_CLI::fk_Gregory::Norm | ( | double | u, |
double | v | ||
) |
曲面法線ベクトル算出メソッド
曲面上の法線ベクトルを返します。
[in] | u | u パラメータ |
[in] | v | v パラメータ |
fk_Vector ^ FK_CLI::fk_Gregory::UDeriv | ( | double | u, |
double | v | ||
) |
曲面 u 方向偏微分ベクトル算出メソッド
曲面上の u 方向偏微分ベクトルを算出する関数です。
[in] | u | u パラメータ |
[in] | v | v パラメータ |
fk_Vector ^ FK_CLI::fk_Gregory::VDeriv | ( | double | u, |
double | v | ||
) |
曲面 v 方向偏微分ベクトル算出メソッド
曲面上の v 方向偏微分ベクトルを算出する関数です。
[in] | u | u パラメータ |
[in] | v | v パラメータ |
|
getset |
分割数プロパティ
このプロパティは、描画時分割数の設定や参照に使用します。