FineKernelToolKit 4.2.13
|
モデルを生成、管理するクラス [詳解]
#include <FK/Model.h>
公開メンバ関数 | |
fk_Model (fk_Shape *shape=nullptr) | |
コンストラクタ | |
virtual | ~fk_Model () |
デストラクタ | |
unsigned int | getID (void) const |
ID参照関数 | |
回転制御関数 | |
bool | glRotate (fk_Vector origin, fk_Axis axis, double theta) |
グローバル座標系座標軸回転関数1 | |
bool | glRotate (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
グローバル座標系座標軸回転関数2 | |
bool | glRotate (fk_Vector A, fk_Vector B, double theta) |
グローバル座標系任意軸回転関数1 | |
bool | glRotate (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
グローバル座標系任意軸回転関数2 | |
bool | loRotate (fk_Vector origin, fk_Axis axis, double theta) |
ローカル座標系座標軸回転関数1 | |
bool | loRotate (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
ローカル座標系座標軸回転関数2 | |
bool | loRotate (fk_Vector A, fk_Vector B, double theta) |
ローカル座標系任意軸回転関数1 | |
bool | loRotate (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
ローカル座標系任意軸回転関数2 | |
bool | glRotateWithVec (fk_Vector origin, fk_Axis axis, double theta) |
グローバル座標系座標軸回転(姿勢付き)関数1 | |
bool | glRotateWithVec (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
グローバル座標系座標軸回転(姿勢付き)関数2 | |
bool | glRotateWithVec (fk_Vector A, fk_Vector B, double theta) |
グローバル座標系任意軸回転(姿勢付き)関数1 | |
bool | glRotateWithVec (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
グローバル座標系任意軸回転(姿勢付き)関数2 | |
bool | loRotateWithVec (fk_Vector origin, fk_Axis axis, double theta) |
ローカル座標系座標軸回転(姿勢付き)関数1 | |
bool | loRotateWithVec (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
ローカル座標系座標軸回転(姿勢付き)関数2 | |
bool | loRotateWithVec (fk_Vector A, fk_Vector B, double theta) |
ローカル座標系任意軸回転(姿勢付き)関数1 | |
bool | loRotateWithVec (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
ローカル座標系任意軸回転(姿勢付き)関数2 | |
位置制御関数 | |
bool | glTranslate (fk_Vector v) |
グローバル座標系平行移動関数1 | |
bool | glTranslate (double x, double y, double z) |
グローバル座標系平行移動関数2 | |
bool | loTranslate (fk_Vector v) |
ローカル座標系平行移動関数1 | |
bool | loTranslate (double x, double y, double z) |
ローカル座標系平行移動関数2 | |
bool | glMoveTo (fk_Vector p) |
グローバル座標系位置指定関数1 | |
bool | glMoveTo (double x, double y, double z) |
グローバル座標系位置指定関数2 | |
形状データ制御関数 | |
void | setShape (fk_Shape *shape) |
形状設定関数 | |
fk_Shape * | getShape (void) const |
形状参照関数 | |
マテリアル属性設定関数 | |
void | setMaterial (const fk_Material &mat) |
マテリアル設定関数 | |
void | setPointColor (fk_Color *col) |
頂点色設定関数1 | |
void | setPointColor (float r, float g, float b) |
頂点色設定関数2 | |
void | setLineColor (fk_Color *col) |
稜線色設定関数1 | |
void | setLineColor (float r, float g, float b) |
稜線色設定関数2 | |
void | setCurveColor (fk_Color *col) |
曲線色設定関数1 | |
void | setCurveColor (float r, float g, float b) |
曲線色設定関数2 | |
マテリアル属性参照関数 | |
fk_Material * | getMaterial (void) |
マテリアル参照関数 | |
fk_Color * | getPointColor (void) |
頂点色参照関数 | |
fk_Color * | getLineColor (void) |
稜線色参照関数 | |
fk_Color * | getCurveColor (void) |
曲線色参照関数 | |
描画属性制御関数 | |
void | setDrawMode (const fk_Draw mode) |
描画モード設定関数 | |
fk_Draw | getDrawMode (void) const |
描画モード参照関数 | |
void | setElementMode (const fk_ElementMode mode) |
要素モード設定関数 | |
fk_ElementMode | getElementMode (void) const |
要素モード設定関数 | |
void | setShadingMode (fk_ShadingMode mode) |
シェーディングモード設定関数 | |
fk_ShadingMode | getShadingMode (void) const |
シェーディングモード取得関数 | |
void | setBlendMode (const fk_BlendMode mode, const fk_BlendFactor srcFactor=fk_BlendFactor::SRC_ALPHA, const fk_BlendFactor dstFactor=fk_BlendFactor::ONE_MINUS_SRC_ALPHA) |
ブレンドモード設定関数 | |
fk_BlendMode | getBlendMode (fk_BlendFactor *outSrc=nullptr, fk_BlendFactor *outDst=nullptr) const |
ブレンドモード参照関数 | |
void | setSmoothMode (const bool mode) |
スムースモード設定関数 | |
bool | getSmoothMode (void) const |
スムースモード参照関数 | |
void | setReverseDrawMode (const bool mode) |
描画順序制御関数 | |
bool | getReverseDrawMode (void) const |
描画順序参照関数 | |
void | setDepthMode (const fk_DepthMode mode) |
前後関係制御関数 | |
fk_DepthMode | getDepthMode (void) const |
前後関係参照関数 | |
void | setTextureMode (fk_TexMode mode) |
テクスチャモード設定関数 | |
fk_TexMode | getTextureMode (void) |
テクスチャモード取得関数 | |
void | setPointSize (const double size) |
頂点描画サイズ設定関数 | |
double | getPointSize (void) const |
頂点描画サイズ参照関数 | |
void | setShadowEffect (bool mode) |
影投影設定関数 | |
bool | getShadowEffect (void) |
影投影設定参照関数 | |
void | setShadowDraw (bool mode) |
影表示設定関数 | |
bool | getShadowDraw (void) |
影表示設定参照関数 | |
void | setFogMode (bool mode) |
霧効果設定関数 | |
bool | getFogMode (void) |
霧効果設定参照関数 | |
座標系情報参照関数 | |
fk_Matrix | getInhMatrix (void) const |
継承変換行列取得関数 | |
fk_Matrix | getInhInvMatrix (void) const |
継承逆変換行列取得関数 | |
fk_OrthoMatrix | getInhBaseMatrix (void) const |
継承移動・回転要素変換行列取得関数 | |
fk_OrthoMatrix | getInhInvBaseMatrix (void) const |
継承移動・回転要素逆変換行列取得関数 | |
fk_Vector | getInhPosition (void) const |
継承位置ベクトル参照関数 | |
fk_Vector | getInhVec (void) const |
継承方向ベクトル参照関数 | |
fk_Vector | getInhUpvec (void) const |
継承アップベクトル参照関数 | |
fk_Angle | getInhAngle (void) const |
継承オイラー角参照関数 | |
double | getInhScale (void) const |
継承全体倍率取得関数 | |
親子関係制御関数 | |
bool | setParent (fk_Model *model, bool setMode=false) |
親モデル設定関数 | |
void | deleteParent (bool setMode=false) |
親モデル解除関数 | |
fk_Model * | getParent (void) const |
親モデル参照関数 | |
bool | entryChild (fk_Model *model, bool setMode=false) |
子モデル設定関数 | |
bool | deleteChild (fk_Model *model, bool setMode=false) |
子モデル解除関数 | |
void | deleteChildren (bool setMode=false) |
全子モデル解除関数 | |
fk_Model * | foreachChild (fk_Model *model) |
子モデル逐次参照関数 | |
状態保存制御関数 | |
void | snapShot (void) |
位置・姿勢保存関数 | |
bool | restore (void) |
位置・姿勢復元関数 | |
bool | restore (double t) |
位置・姿勢途中復元関数 | |
描画制御用関数 | |
void | setShader (fk_ShaderBinder *shader) |
シェーダー設定関数 | |
fk_ShaderBinder * | getShader (void) |
シェーダー取得関数 | |
境界ボリューム自動設定関数 | |
void | adjustSphere (void) |
境界球自動設定関数 | |
void | adjustAABB (void) |
AABB 自動設定関数 | |
void | adjustOBB (void) |
OBB 自動設定関数 | |
void | adjustCapsule (void) |
境界カプセル自動設定関数(全自動) | |
void | adjustCapsule (fk_Axis axis) |
境界カプセル自動設定関数(座標軸による中心軸設定) | |
void | adjustCapsule (fk_Vector P, fk_Axis axis) |
境界カプセル自動設定関数(中心軸上の点と座標軸) | |
void | adjustCapsule (fk_Vector S, fk_Vector E, bool mode=false) |
境界カプセル自動設定関数(中心軸直接指定) | |
干渉判定・衝突判定関数 | |
bool | isInter (fk_Model *model) |
モデル間干渉判定関数 | |
std::tuple< bool, double > | isCollision (fk_Model *model) |
モデル間衝突判定関数 | |
void | setInterMode (bool mode) |
干渉継続モード設定関数 | |
bool | getInterMode (void) |
干渉継続モード取得関数 | |
bool | getInterStatus (void) |
干渉継続状態取得関数 | |
void | resetInter (void) |
干渉継続状態初期化関数 | |
干渉自動停止制御関数 | |
void | setInterStopMode (bool mode) |
干渉自動停止モード設定関数 | |
bool | getInterStopMode (void) |
干渉自動停止モード取得関数 | |
void | entryInterModel (fk_Model *model) |
干渉自動停止モデル登録関数 | |
void | deleteInterModel (fk_Model *model) |
干渉自動停止モデル解除関数 | |
void | clearInterModel (void) |
干渉自動停止モデル初期化関数 | |
![]() | |
fk_Boundary (fk_Type) | |
コンストラクタ | |
virtual | ~fk_Boundary () |
デストラクタ | |
void | setBMode (fk_BoundaryMode mode) |
境界ボリューム選択関数 | |
fk_BoundaryMode | getBMode (void) |
境界ボリューム選択状態参照関数 | |
void | setSphere (double r) |
境界球半径設定関数 | |
void | setSpherePos (fk_Vector pos) |
境界球位置設定関数 | |
double | getSphere (void) |
境界球半径参照関数 | |
fk_Vector | getSpherePos (void) |
境界球位置参照関数 | |
void | setAABBSize (double x, double y, double z) |
軸平行境界ボックス (AABB) サイズ設定関数1 | |
void | setAABBSize (fk_Vector size) |
軸平行境界ボックス (AABB) サイズ設定関数2 | |
void | setAABBMaxMin (fk_Vector max, fk_Vector min) |
軸平行境界ボックス (AABB) 最大最小設定関数 | |
void | setAABBMax (fk_Vector v) |
軸平行境界ボックス (AABB) 最大値側設定関数 | |
void | setAABBMin (fk_Vector v) |
軸平行境界ボックス (AABB) 最小値側設定関数 | |
fk_Vector | getAABBSize (void) |
軸平行境界ボックス (AABB) サイズ取得関数 | |
fk_Vector | getAABBMax (void) |
軸平行境界ボックス (AABB) 最大値側取得関数 | |
fk_Vector | getAABBMin (void) |
軸平行境界ボックス (AABB) 最小値側取得関数 | |
std::tuple< fk_Vector, fk_Vector > | getAABBMaxMin (void) |
軸平行境界ボックス (AABB) 最大最小取得関数 | |
void | setOBBSize (double x, double y, double z) |
有向境界ボックス (OBB) サイズ設定関数1 | |
void | setOBBSize (fk_Vector size) |
有向境界ボックス (OBB) サイズ設定関数2 | |
void | setOBBMaxMin (fk_Vector max, fk_Vector min) |
有向境界ボックス (OBB) 最大最小設定関数 | |
void | setOBBMax (fk_Vector v) |
有向境界ボックス (OBB) 最大値側設定関数 | |
void | setOBBMin (fk_Vector v) |
有向境界ボックス (OBB) 最小値側設定関数 | |
fk_Vector | getOBBSize (void) |
有向境界ボックス (OBB) サイズ取得関数 | |
fk_Vector | getOBBMax (void) |
有向境界ボックス (OBB) 最大値側取得関数 | |
fk_Vector | getOBBMin (void) |
有向境界ボックス (OBB) 最小値側取得関数 | |
std::tuple< fk_Vector, fk_Vector > | getOBBMaxMin (void) |
有向境界ボックス (OBB) 最大最小取得関数 | |
void | setCapsule (fk_Vector sPos, fk_Vector ePos, double r) |
カプセル型設定関数 | |
void | setCapsuleStartPos (fk_Vector argP) |
カプセル型中心軸始点設定関数 | |
void | setCapsuleEndPos (fk_Vector argP) |
カプセル型中心軸終点設定関数 | |
void | setCapsuleRadius (double r) |
カプセル型領域規定距離設定関数 | |
double | getCapsuleRadius (void) |
カプセル型領域規定距離取得関数 | |
double | getCapsuleLength (void) |
カプセル型中心軸長取得関数 | |
std::tuple< fk_Vector, fk_Vector > | getCapsulePos (void) |
カプセル型中心軸両端点取得関数 | |
fk_Vector | getCapsuleStartPos (void) |
カプセル型中心軸始点取得関数 | |
fk_Vector | getCapsuleEndPos (void) |
カプセル型中心軸終点取得関数 | |
void | setBDrawToggle (bool mode) |
境界ボリューム描画有無設定関数 | |
bool | getBDrawToggle (void) |
境界ボリューム描画有無取得関数 | |
void | setBLineColor (fk_Color col) |
境界ボリューム非干渉描画色設定関数 | |
fk_Color * | getBLineColor (void) |
境界ボリューム非干渉描画色取得関数 | |
void | setBIntLineColor (fk_Color col) |
境界ボリューム干渉状態描画色設定関数 | |
fk_Color * | getBIntLineColor (void) |
境界ボリューム干渉状態描画色取得関数 | |
void | setBLineWidth (double width) |
境界ボリューム描画線幅設定関数 | |
double | getBLineWidth (void) |
境界ボリューム描画線幅取得関数 | |
![]() | |
fk_MatrixAdmin (fk_Type=fk_Type::MATRIXADMIN) | |
コンストラクタ | |
virtual | ~fk_MatrixAdmin () |
デストラクタ | |
fk_Vector | getPosition (void) const |
位置ベクトル取得関数 | |
fk_Vector | getVec (void) const |
方向ベクトル取得関数 | |
fk_Vector | getUpvec (void) const |
アップベクトル取得関数 | |
fk_Angle | getAngle (void) const |
オイラー角取得関数 | |
fk_Matrix | getMatrix (void) const |
変換行列取得関数 | |
fk_Matrix | getInvMatrix (void) const |
逆変換行列取得関数 | |
fk_OrthoMatrix | getBaseMatrix (void) const |
移動・回転要素変換行列取得関数 | |
fk_OrthoMatrix | getInvBaseMatrix (void) const |
移動・回転要素逆変換行列取得関数 | |
bool | setScale (const double scale) |
全体絶対倍率設定関数 | |
bool | setScale (const double scale, fk_Axis axis) |
軸方向絶対倍率設定関数 | |
bool | setScale (const double x, const double y, const double z) |
軸方向個別絶対倍率設定関数 | |
bool | prdScale (const double scale) |
全体相対倍率設定関数 | |
bool | prdScale (const double scale, fk_Axis axis) |
軸方向相対倍率設定関数 | |
bool | prdScale (const double x, const double y, const double z) |
軸方向個別相対倍率設定関数 | |
double | getScale (void) const |
全体倍率取得関数 | |
double | getScale (fk_Axis axis) const |
軸方向倍率取得関数 | |
bool | getScaleMode (void) const |
拡大縮小状態判定関数 | |
bool | glRotate_ (fk_Vector &origin, fk_Axis axis, double theta) |
グローバル座標系座標軸回転関数1 | |
bool | glRotate_ (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
グローバル座標系座標軸回転関数2 | |
bool | glRotate_ (fk_Vector &A, fk_Vector &B, double theta) |
グローバル座標系任意軸回転関数1 | |
bool | glRotate_ (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
グローバル座標系任意軸回転関数2 | |
bool | loRotate_ (fk_Vector &origin, fk_Axis axis, double theta) |
ローカル座標系座標軸回転関数1 | |
bool | loRotate_ (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
ローカル座標系座標軸回転関数2 | |
bool | loRotate_ (fk_Vector &A, fk_Vector &B, double theta) |
ローカル座標系任意軸回転関数1 | |
bool | loRotate_ (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
ローカル座標系任意軸回転関数2 | |
bool | glRotateWithVec_ (fk_Vector &origin, fk_Axis axis, double theta) |
グローバル座標系座標軸回転(姿勢付き)関数1 | |
bool | glRotateWithVec_ (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
グローバル座標系座標軸回転(姿勢付き)関数2 | |
bool | glRotateWithVec_ (fk_Vector &A, fk_Vector &B, double theta) |
グローバル座標系任意軸回転(姿勢付き)関数1 | |
bool | glRotateWithVec_ (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
グローバル座標系任意軸回転(姿勢付き)関数2 | |
bool | loRotateWithVec_ (fk_Vector &origin, fk_Axis axis, double theta) |
ローカル座標系座標軸回転(姿勢付き)関数1 | |
bool | loRotateWithVec_ (double orgX, double orgY, double orgZ, fk_Axis axis, double theta) |
ローカル座標系座標軸回転(姿勢付き)関数2 | |
bool | loRotateWithVec_ (fk_Vector &A, fk_Vector &B, double theta) |
ローカル座標系任意軸回転(姿勢付き)関数1 | |
bool | loRotateWithVec_ (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta) |
ローカル座標系任意軸回転(姿勢付き)関数2 | |
bool | glTranslate_ (fk_Vector &v) |
グローバル座標系平行移動関数1 | |
bool | glTranslate_ (double x, double y, double z) |
グローバル座標系平行移動関数2 | |
bool | loTranslate_ (fk_Vector &v) |
ローカル座標系平行移動関数1 | |
bool | loTranslate_ (double x, double y, double z) |
ローカル座標系平行移動関数2 | |
bool | glMoveTo_ (fk_Vector &p) |
グローバル座標系位置指定関数1 | |
bool | glMoveTo_ (double x, double y, double z) |
グローバル座標系位置指定関数2 | |
bool | glFocus (fk_Vector p) |
グローバル座標系注視点設定関数1 | |
bool | glFocus (double x, double y, double z) |
グローバル座標系注視点設定関数2 | |
bool | loFocus (fk_Vector p) |
ローカル座標系注視点設定関数1 | |
bool | loFocus (double x, double y, double z) |
ローカル座標系注視点設定関数2 | |
bool | glVec (fk_Vector v) |
グローバル座標系方向ベクトル設定関数1 | |
bool | glVec (double x, double y, double z) |
グローバル座標系方向ベクトル設定関数2 | |
bool | glUpvec (fk_Vector v) |
グローバル座標系アップベクトル設定関数1 | |
bool | glUpvec (double x, double y, double z) |
グローバル座標系アップベクトル設定関数2 | |
bool | loUpvec (fk_Vector v) |
ローカル座標系アップベクトル設定関数1 | |
bool | loUpvec (double x, double y, double z) |
ローカル座標系アップベクトル設定関数2 | |
bool | glAngle (fk_Angle angle) |
グローバル座標系オイラー角設定関数1 | |
bool | glAngle (double h, double p, double b) |
グローバル座標系オイラー角設定関数2 | |
bool | loAngle (fk_Angle angle) |
ローカル座標系オイラー角設定関数1 | |
bool | loAngle (double h, double p, double b) |
ローカル座標系オイラー角設定関数2 | |
![]() | |
fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT) | |
コンストラクタ | |
fk_Type | getObjectType (void) const |
タイプ取得関数 | |
モデルを生成、管理するクラス
このクラスは、「モデル」を制御する機能を提供します。 FK における「モデル」とは、位置や方向を持ったオブジェクトのことを指します。 利用者は、 このクラスを通じてカメラを含むオブジェクトの位置や姿勢を制御していきます。 従って、このクラスは FK システムにおいて最も中心的な存在であると言えます。 位置や姿勢を制御するための関数の多くは、 fk_MatrixAdmin クラスから継承しています。 (ただし、後述する「親子関係」に関連する機能は本クラス自体が持っています。) fk_MatrixAdmin クラスの説明も合わせて参照して下さい。
FK において、モデルと形状は別の存在として扱います。 形状は別のクラスで作成しておき、 モデルに対して形状をリンクするという考え方です。 このような設計になっている利点は、 まず第1に1つのモデルが複数の形状を使い分けられるということがあります。 第2に、1つの形状を複数のモデルで共有することでメモリ利用量を削減できます。 形状については fk_Shape クラスおよびその派生クラスを参照して下さい。
位置や姿勢の制御と共に、このクラスの重要な機能の1つが「親子関係」です。 あるモデルを別のモデルに「子モデル」として登録したとします。 親モデルの位置や姿勢を制御すると、 子モデルの形状は親モデル内の形状と同じように追従するようになります。 例えば、車を車体モデルとタイヤモデルで別々に作成し、 タイヤモデルを車体モデルの子モデルとして登録しておけば、 車体モデルの位置移動にあわせてタイヤモデルも位置関係を維持しながら 一緒に移動します。 マテリアルや頂点色、稜線色については、 何も設定しない場合は親モデルの設定が用いられます。 それぞれのモデルにマテリアルや色属性を設定した場合、 そのモデルについては個々の設定が利用されるようになります。
また、モデル同士の干渉判定や衝突判定を検出することができます。 干渉・衝突判定を行うには、 まず「境界ボリューム」と呼ばれるモデルを覆う領域を設定します。 その後、その境界ボリューム同士が干渉部分や衝突時間の検出を行うことで実現します。 本マニュアルにおいて、「干渉判定」と「衝突判定」は以下のような意味を持ちます。
本クラスのメンバ関数では、以下のような機能を提供します。
干渉判定は現在すべての種類の境界ボリュームで対応していますが、 同じ種類同士である必要があります。 衝突判定については、現在は境界球のみで対応しています。 境界ボリュームの種類に関する解説や、適用する境界ボリュームの選択については fk_Boundary クラスのリファレンスを参照して下さい。
FK::fk_Model::fk_Model | ( | fk_Shape * | shape = nullptr | ) |
コンストラクタ
[in] | shape | 形状インスタンスのポインタ。 nullptr を代入した場合や引数を省略した場合は、 初期形状が無い状態になります。 |
|
virtual |
デストラクタ
unsigned int FK::fk_Model::getID | ( | void | ) | const |
ID参照関数
モデルの固有IDを取得します。 IDの最小値は 1 で、 同一プロセス中では同じ ID が別のモデルに割り振られることはありません。
グローバル座標系座標軸回転関数1
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、origin を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は glRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は loRotate() を利用して下さい。
[in] | origin | グローバル座標系での回転軸上の点 |
[in] | axis | 回転軸に平行な軸。fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::glRotate | ( | double | orgX, |
double | orgY, | ||
double | orgZ, | ||
fk_Axis | axis, | ||
double | theta | ||
) |
グローバル座標系座標軸回転関数2
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(orgX, orgY, orgZ) を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は glRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は loRotate() を利用して下さい。
[in] | orgX | グローバル座標系での回転軸上の点のx成分 |
[in] | orgY | グローバル座標系での回転軸上の点のy成分 |
[in] | orgZ | グローバル座標系での回転軸上の点のz成分 |
[in] | axis | 回転軸に平行な軸。fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
グローバル座標系任意軸回転関数1
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は glRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は loRotate() を利用して下さい。
[in] | A | 回転軸上の1点。B と一致してはいけません。 |
[in] | B | 回転軸上の1点。A と一致してはいけません。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::glRotate | ( | double | Ax, |
double | Ay, | ||
double | Az, | ||
double | Bx, | ||
double | By, | ||
double | Bz, | ||
double | theta | ||
) |
グローバル座標系任意軸回転関数2
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は glRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は loRotate() を利用して下さい。
[in] | Ax | 回転軸上の1点 A の x 成分 |
[in] | Ay | 回転軸上の1点 A の y 成分 |
[in] | Az | 回転軸上の1点 A の z 成分 |
[in] | Bx | 回転軸上の1点 B の x 成分 |
[in] | By | 回転軸上の1点 B の y 成分 |
[in] | Bz | 回転軸上の1点 B の z 成分 |
[in] | theta | 回転角度(ラジアン) |
ローカル座標系座標軸回転関数1
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) origin を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は loRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は glRotate() を利用して下さい。
[in] | origin | ローカル座標系での回転軸上の点 |
[in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::loRotate | ( | double | orgX, |
double | orgY, | ||
double | orgZ, | ||
fk_Axis | axis, | ||
double | theta | ||
) |
ローカル座標系座標軸回転関数2
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) (orgX, orgY, orgZ) を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は loRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は glRotate() を利用して下さい。
[in] | orgX | ローカル座標系での回転軸上の点のx成分 |
[in] | orgY | ローカル座標系での回転軸上の点のy成分 |
[in] | orgZ | ローカル座標系での回転軸上の点のz成分 |
[in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
ローカル座標系任意軸回転関数1
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は loRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は glRotate() を利用して下さい。
[in] | A | ローカル座標系における回転軸上の1点。B と一致してはいけません。 |
[in] | B | ローカル座標系における回転軸上の1点。A と一致してはいけません。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::loRotate | ( | double | Ax, |
double | Ay, | ||
double | Az, | ||
double | Bx, | ||
double | By, | ||
double | Bz, | ||
double | theta | ||
) |
ローカル座標系任意軸回転関数2
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) (Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は loRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は glRotate() を利用して下さい。
[in] | Ax | ローカル座標系における回転軸上の1点 A の x 成分 |
[in] | Ay | ローカル座標系における回転軸上の1点 A の y 成分 |
[in] | Az | ローカル座標系における回転軸上の1点 A の z 成分 |
[in] | Bx | ローカル座標系における回転軸上の1点 B の x 成分 |
[in] | By | ローカル座標系における回転軸上の1点 B の y 成分 |
[in] | Bz | ローカル座標系における回転軸上の1点 B の z 成分 |
[in] | theta | 回転角度(ラジアン) |
グローバル座標系座標軸回転(姿勢付き)関数1
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、origin を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は glRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 loRotateWithVec() を利用して下さい。
[in] | origin | グローバル座標系での回転軸上の点 |
[in] | axis | 回転軸に平行な軸。fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::glRotateWithVec | ( | double | orgX, |
double | orgY, | ||
double | orgZ, | ||
fk_Axis | axis, | ||
double | theta | ||
) |
グローバル座標系座標軸回転(姿勢付き)関数2
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(orgX, orgY, orgZ) を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は glRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 loRotateWithVec() を利用して下さい。
[in] | orgX | グローバル座標系での回転軸上の点のx成分 |
[in] | orgY | グローバル座標系での回転軸上の点のy成分 |
[in] | orgZ | グローバル座標系での回転軸上の点のz成分 |
[in] | axis | 回転軸に平行な軸。fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
グローバル座標系任意軸回転(姿勢付き)関数1
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は glRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 loRotateWithVec() を利用して下さい。
[in] | A | 回転軸上の1点。B と一致してはいけません。 |
[in] | B | 回転軸上の1点。A と一致してはいけません。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::glRotateWithVec | ( | double | Ax, |
double | Ay, | ||
double | Az, | ||
double | Bx, | ||
double | By, | ||
double | Bz, | ||
double | theta | ||
) |
グローバル座標系任意軸回転(姿勢付き)関数2
モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は glRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 loRotateWithVec() を利用して下さい。
[in] | Ax | 回転軸上の1点 A の x 成分 |
[in] | Ay | 回転軸上の1点 A の y 成分 |
[in] | Az | 回転軸上の1点 A の z 成分 |
[in] | Bx | 回転軸上の1点 B の x 成分 |
[in] | By | 回転軸上の1点 B の y 成分 |
[in] | Bz | 回転軸上の1点 B の z 成分 |
[in] | theta | 回転角度(ラジアン) |
ローカル座標系座標軸回転(姿勢付き)関数1
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) origin を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は loRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 glRotateWithVec() を利用して下さい。
[in] | origin | ローカル座標系での回転軸上の点 |
[in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::loRotateWithVec | ( | double | orgX, |
double | orgY, | ||
double | orgZ, | ||
fk_Axis | axis, | ||
double | theta | ||
) |
ローカル座標系座標軸回転(姿勢付き)関数2
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) (orgX, orgY, orgZ) を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は loRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 glRotateWithVec() を利用して下さい。
[in] | orgX | ローカル座標系での回転軸上の点のx成分 |
[in] | orgY | ローカル座標系での回転軸上の点のy成分 |
[in] | orgZ | ローカル座標系での回転軸上の点のz成分 |
[in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_X, fk_Y, fk_Z のいずれかになります。 |
[in] | theta | 回転角度(ラジアン) |
ローカル座標系任意軸回転(姿勢付き)関数1
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は loRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 glRotateWithVec() を利用して下さい。
[in] | A | ローカル座標系における回転軸上の1点。B と一致してはいけません。 |
[in] | B | ローカル座標系における回転軸上の1点。A と一致してはいけません。 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::loRotateWithVec | ( | double | Ax, |
double | Ay, | ||
double | Az, | ||
double | Bx, | ||
double | By, | ||
double | Bz, | ||
double | theta | ||
) |
ローカル座標系任意軸回転(姿勢付き)関数2
モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) (Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。
この関数は、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は loRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 glRotateWithVec() を利用して下さい。
[in] | Ax | ローカル座標系における回転軸上の1点 A の x 成分 |
[in] | Ay | ローカル座標系における回転軸上の1点 A の y 成分 |
[in] | Az | ローカル座標系における回転軸上の1点 A の z 成分 |
[in] | Bx | ローカル座標系における回転軸上の1点 B の x 成分 |
[in] | By | ローカル座標系における回転軸上の1点 B の y 成分 |
[in] | Bz | ローカル座標系における回転軸上の1点 B の z 成分 |
[in] | theta | 回転角度(ラジアン) |
bool FK::fk_Model::glTranslate | ( | fk_Vector | v | ) |
グローバル座標系平行移動関数1
モデルを、クローバル座標系によって平行移動した位置に移動します。 平行移動量はベクトルで指定します。
ローカル座標系による平行移動量の指定を行いたい場合は、 loTranslate() を利用して下さい。
[in] | v | 平行移動量ベクトル |
bool FK::fk_Model::glTranslate | ( | double | x, |
double | y, | ||
double | z | ||
) |
グローバル座標系平行移動関数2
モデルを、クローバル座標系によって平行移動した位置に移動します。 平行移動量はベクトルの成分を意味する3個の実数で指定します。
ローカル座標系による平行移動量の指定を行いたい場合は、 loTranslate() を利用して下さい。
[in] | x | 平行移動量ベクトルのx成分 |
[in] | y | 平行移動量ベクトルのy成分 |
[in] | z | 平行移動量ベクトルのz成分 |
bool FK::fk_Model::loTranslate | ( | fk_Vector | v | ) |
ローカル座標系平行移動関数1
モデルを、ローカル座標系によって平行移動した位置に移動します。 平行移動量はベクトルで指定します。
グローバル座標系による平行移動量の指定を行いたい場合は、 glTranslate() を利用して下さい。
[in] | v | 平行移動量ベクトル |
bool FK::fk_Model::loTranslate | ( | double | x, |
double | y, | ||
double | z | ||
) |
ローカル座標系平行移動関数2
モデルを、ローカル座標系によって平行移動した位置に移動します。 平行移動量はベクトルの成分を意味する3個の実数で指定します。
グローバル座標系による平行移動量の指定を行いたい場合は、 glTranslate() を利用して下さい。
[in] | x | 平行移動量ベクトルのx成分 |
[in] | y | 平行移動量ベクトルのy成分 |
[in] | z | 平行移動量ベクトルのz成分 |
bool FK::fk_Model::glMoveTo | ( | fk_Vector | p | ) |
グローバル座標系位置指定関数1
モデルの位置を、指定した位置ベクトルに移動します。 位置はベクトルで指定します。
glMoveTo() 関数に対応するローカル座標系関数 「loMoveTo()」関数は存在しません。 これは、loMoveTo() 関数はその意味的に loTranslate() とまったく同一の挙動となるためです。
[in] | p | 移動先位置ベクトル |
bool FK::fk_Model::glMoveTo | ( | double | x, |
double | y, | ||
double | z | ||
) |
グローバル座標系位置指定関数2
モデルの位置を、指定した位置ベクトルに移動します。 位置はベクトルの成分を意味する3個の実数で指定します。
glMoveTo() 関数に対応するローカル座標系関数 「loMoveTo()」関数は存在しません。 これは、loMoveTo() 関数はその意味的に loTranslate() とまったく同一の挙動となるためです。
[in] | x | 移動先位置ベクトルのx成分 |
[in] | y | 移動先位置ベクトルのy成分 |
[in] | z | 移動先位置ベクトルのz成分 |
void FK::fk_Model::setShape | ( | fk_Shape * | shape | ) |
形状設定関数
モデルの形状を設定します。 形状は、 fk_Shape クラスの派生クラスであれば設定可能です。 なお、呼ぶ前に形状が設定されていた場合、前の設定は破棄されます。
設定した形状インスタンスは、モデルに設定した状態で解放しないようにしてください。 もし解放された場合、プログラムが誤動作を起こします。
[in] | shape | 形状インスタンスのポインタ |
fk_Shape * FK::fk_Model::getShape | ( | void | ) | const |
形状参照関数
現在設定されている形状を取得します。 形状が設定されていない場合は nullptr を返します。
void FK::fk_Model::setMaterial | ( | const fk_Material & | mat | ) |
マテリアル設定関数
モデルの基本マテリアルを設定します。 マテリアルに関しての詳細は、 fk_Material の説明およびユーザーズマニュアルを参照して下さい。
[in] | mat | マテリアル |
void FK::fk_Model::setPointColor | ( | fk_Color * | col | ) |
void FK::fk_Model::setPointColor | ( | float | r, |
float | g, | ||
float | b | ||
) |
頂点色設定関数2
モデルの頂点色を設定します。 頂点は、光源による陰影の影響はなく、常に設定色で表示されます。 各色要素は 0 から 1 までの値を取ります。 それ以外の値が与えられた場合、0 以下なら 0 に、1 以上なら 1 に丸められます。
[in] | r | 頂点色の赤要素 |
[in] | g | 頂点色の緑要素 |
[in] | b | 頂点色の青要素 |
void FK::fk_Model::setLineColor | ( | fk_Color * | col | ) |
void FK::fk_Model::setLineColor | ( | float | r, |
float | g, | ||
float | b | ||
) |
稜線色設定関数2
モデルの稜線色を設定します。 稜線は、光源による陰影の影響はなく、常に設定色で表示されます。 各色要素は 0 から 1 までの値を取ります。 それ以外の値が与えられた場合、0 以下なら 0 に、1 以上なら 1 に丸められます。
[in] | r | 稜線色の赤要素 |
[in] | g | 稜線色の緑要素 |
[in] | b | 稜線色の青要素 |
void FK::fk_Model::setCurveColor | ( | fk_Color * | col | ) |
void FK::fk_Model::setCurveColor | ( | float | r, |
float | g, | ||
float | b | ||
) |
曲線色設定関数2
モデルの曲線色を設定します。 曲線は、光源による陰影の影響はなく、常に設定色で表示されます。 各色要素は 0 から 1 までの値を取ります。 それ以外の値が与えられた場合、0 以下なら 0 に、1 以上なら 1 に丸められます。
[in] | r | 曲線色の赤要素 |
[in] | g | 曲線色の緑要素 |
[in] | b | 曲線色の青要素 |
fk_Material * FK::fk_Model::getMaterial | ( | void | ) |
fk_Color * FK::fk_Model::getPointColor | ( | void | ) |
fk_Color * FK::fk_Model::getLineColor | ( | void | ) |
fk_Color * FK::fk_Model::getCurveColor | ( | void | ) |
void FK::fk_Model::setDrawMode | ( | const fk_Draw | mode | ) |
描画モード設定関数
モデルの描画モードを設定します。 描画モードとは、 面、稜線、頂点のそれぞれを描画するかどうかを制御するものです。 描画モード種類は以下のとおりです。
これらの描画モードは、 ビット論理和を用いて複数のものを同時に指定することが可能です。 以下のコードは、頂点、稜線、面の表をすべて描画するように設定します。
fk_Model model; model.setDrawMode(fk_Draw::POINT | fk_Draw::LINE | fk_Draw::FACE);
[in] | mode | 描画モード |
fk_Draw FK::fk_Model::getDrawMode | ( | void | ) | const |
void FK::fk_Model::setElementMode | ( | const fk_ElementMode | mode | ) |
要素モード設定関数
形状表示の際、モデル設定と形状個別要素設定のどちらを採用するかを設定します。 モードには以下のものがあります。
[in] | mode | 設定モード |
fk_ElementMode FK::fk_Model::getElementMode | ( | void | ) | const |
void FK::fk_Model::setShadingMode | ( | fk_ShadingMode | mode | ) |
シェーディングモード設定関数
面描画またはテクスチャ描画の際の、 シェーディングアルゴリズムを設定します。 グーローシェーディングは、各頂点ごとに発色輝度を計算し、 頂点以外の面内部は色値の線形補間によって発色輝度を決定します。 フォンシェーディングでは、色値ではなく法線ベクトルを補間決定し、 面内部の発色は補間法線ベクトルに対し発色輝度を計算します。 一般的には、速度重視の場合はグーロー、質重視の場合はフォンを選択します。 なお、本館数は面またはテクスチャの描画の際のみに関与するものであり、 線や点の描画の際には影響を及ぼしません。
[in] | mode | モード |
fk_ShadingMode FK::fk_Model::getShadingMode | ( | void | ) | const |
void FK::fk_Model::setBlendMode | ( | const fk_BlendMode | mode, |
const fk_BlendFactor | srcFactor = fk_BlendFactor::SRC_ALPHA , |
||
const fk_BlendFactor | dstFactor = fk_BlendFactor::ONE_MINUS_SRC_ALPHA |
||
) |
ブレンドモード設定関数
テクスチャ画像を伴うモデルを表示する場合、 表示色はテクスチャ画像の各画素色と、 モデルに設定されているマテリアルの両方が関与します。 この関数は、テクスチャ画像の画素色とモデルのマテリアル色に対し、 どのような計算式で双方を混合(ブレンド)するかを設定します。 ここでブレンドモードを設定しても、fk_Scene:setBlendStatus() で ブレンドを有効にしていないと実際の描画で有効になりません。 ブレンドモードの設定は、一般的な設定をプリセットの中から選択するか、 カスタムモードを選択した上で、入力ピクセルと出力ピクセルに対する係数を 個別に指定するかのどちらかによって行います。
[in] | mode | ブレンドモードを設定します。与えられる値は以下の8種類です。
|
[in] | srcFactor | 入力ピクセルに対する係数を設定します。 mode に fk_BlendMode::CUSTOM を指定した場合のみ有効です。 それ以外のモードでは省略可能です。 本関数の仕様は OpenGL 関数の glBlendFunc() に準拠します。 詳細は glBlendFunc() の情報を参照して下さい。 与えられる値は以下の10種類で、 それぞれの値に「GL」に置き換えた GLenum 型の値に対応します。 |
[in] | dstFactor | 出力ピクセルに対する係数を設定します。 mode に fk_BlendFactor::CUSTOM を指定した場合のみ有効です。 それ以外のモードでは省略可能です。与えられる値は srcFactor と同様です。 |
fk_BlendMode FK::fk_Model::getBlendMode | ( | fk_BlendFactor * | outSrc = nullptr , |
fk_BlendFactor * | outDst = nullptr |
||
) | const |
ブレンドモード参照関数
モデルのブレンドモードを取得します。
[out] | outSrc | 入力ピクセルにかかる係数の種類を取得します。省略可能です。 |
[out] | outDst | 出力ピクセルにかかる係数の種類を取得します。省略可能です。 |
void FK::fk_Model::setSmoothMode | ( | const bool | mode | ) |
スムースモード設定関数
モデルのスムースモードを設定します。 スムースモードを有効にすると、 形状の隣り合う面同士の法線ベクトルが補間され、 擬似的に滑らかな曲面として表示を行うようになります。
[in] | mode | true である場合、スムースモードを有効とします。 false である場合無効とします。 |
bool FK::fk_Model::getSmoothMode | ( | void | ) | const |
void FK::fk_Model::setReverseDrawMode | ( | const bool | mode | ) |
描画順序制御関数
この関数では、モデルの持つ位相要素の描画順序を制御します。 モデルの各位相要素が同一平面上にあり、描画順序を逆にしたい場合に用います。
[in] | mode | true の場合、モデル内の描画が通常と逆順になります。 false の場合、順序を通常の状態に戻します。 |
bool FK::fk_Model::getReverseDrawMode | ( | void | ) | const |
void FK::fk_Model::setDepthMode | ( | const fk_DepthMode | mode | ) |
前後関係制御関数
この関数では、モデルを描画する際の前後関係に関する設定を制御します。 fk_Scene::entryOverlayModel()でも前後関係を無視した描画はできますが、 通常の描画中に前後関係を無視したり、 半透明物体が後続の描画の前後関係に作用しないようにするなど、 細かな調整を行いたい場合に用います。
[in] | mode | 前後関係の処理モードを設定します。与えられる値は以下の4種類です。
|
fk_DepthMode FK::fk_Model::getDepthMode | ( | void | ) | const |
void FK::fk_Model::setTextureMode | ( | fk_TexMode | mode | ) |
テクスチャモード設定関数
テクスチャの描画時における描画色処理モードを設定します。 これは、ポリゴンに設定されているマテリアルによる発色と、 テクスチャ画像の色をどのように混成するかを制御するものです。 それぞれのモードの概要と厳密な計算式を以下に記載します。 なお、数式中の \( C_f \) はポリゴン色、 \( C_\alpha \) ポリゴンの透明度、 \( T_f \) はテクスチャピクセル色、 \( T_\alpha \) はテクスチャの透明度を表します。
\[ (C_f T_f, \; C_\alpha T_\alpha) \]
となります。\[ (T_f, \; T_\alpha) \]
となります。\[ (C_f (1-T_\alpha) + T_f T_\alpha, \; C_\alpha) \]
となります。デフォルトでは fk_TexMode::NONE が設定されています。 なお、同様の設定は fk_Texture::setTextureMode() でも行うことが可能で、 fk_Model 側で fk_TexMode::NONE 以外が設定されている場合は fk_Model 側の設定が優先されます。 fk_Model 側で fk_TexMode::NONE が設定されている場合のみ、 fk_Texture 側での設定が有効となります。
[in] | mode | モード |
fk_TexMode FK::fk_Model::getTextureMode | ( | void | ) |
void FK::fk_Model::setPointSize | ( | const double | size | ) |
頂点描画サイズ設定関数
頂点の描画サイズを設定します。 単位はピクセルです。整数以外も設定可能です。
[in] | size | 頂点描画サイズ |
double FK::fk_Model::getPointSize | ( | void | ) | const |
void FK::fk_Model::setShadowEffect | ( | bool | mode | ) |
影投影設定関数
このモデルが別モデル(やこのモデル自身)へ影を投影するかどうかの設定を行います。 この設定を false にすると、シーン全体で影効果が有効であっても、 当モデルの影は別モデル(やこのモデル自身)に投影されなくなります。 デフォルトは true です。
他モデルの影をこのモデルに投影するかどうかを制御する場合は、 setShadowDraw() を用いてください。
[in] | mode | true で有効、false で無効となります。 |
bool FK::fk_Model::getShadowEffect | ( | void | ) |
影投影設定参照関数
このモデルの影投影設定を参照します。 詳細は setShadowEffect() のマニュアルを参照して下さい。
void FK::fk_Model::setShadowDraw | ( | bool | mode | ) |
影表示設定関数
別モデルやこのモデル自身の影を、このモデルに投影するかどうかの設定を行います。
このモデルの影を別のモデル(や自分自身)に投影するかどうかの制御は、 setShadowEffect() を用いて下さい。
[in] | mode | true で有効、false で無効となります。 |
bool FK::fk_Model::getShadowDraw | ( | void | ) |
void FK::fk_Model::setFogMode | ( | bool | mode | ) |
霧効果設定関数
このモデルの表示に対し霧効果の有効とするかどうかを設定します。 デフォルトでは有効となっています。
[in] | mode | true で有効、false で無効となります。 |
bool FK::fk_Model::getFogMode | ( | void | ) |
霧効果設定参照関数
霧効果が有効かどうかを参照します。
fk_Matrix FK::fk_Model::getInhMatrix | ( | void | ) | const |
継承変換行列取得関数
モデルの位置と姿勢を表す変換行列を取得します。 当モデルに親モデルがあった場合、 その親モデルの変換行列と当モデルの変換行列の積が返されます。 結果として、この関数を用いることでグローバル座標系における 当モデルの変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::getMatrix() と結果が同じとなります。
fk_Matrix FK::fk_Model::getInhInvMatrix | ( | void | ) | const |
継承逆変換行列取得関数
モデルの位置と姿勢を表す変換行列の、逆行列を取得します。 これは、 getInhMatrix() で得られる行列の逆行列となります。 当モデルに親モデルがあった場合、 その親モデルの逆変換行列と当モデルの逆変換行列の積が返されます。 結果として、この関数を用いることでグローバル座標系における 当モデルの逆変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::getInvMatrix() と結果が同じとなります。
fk_OrthoMatrix FK::fk_Model::getInhBaseMatrix | ( | void | ) | const |
継承移動・回転要素変換行列取得関数
モデルの持つ変換要素のうち、 位置と姿勢のみを反映した、 すなわち拡大縮小の要素を省いた変換行列を取得します。 当モデルに親モデルがあった場合、 その親モデルの変換行列と当モデルの変換行列の積が返されます。 その結果として、この関数を用いることでグローバル座標系における 当モデルの変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::getBaseMatrix() と結果が同じとなります。
fk_OrthoMatrix FK::fk_Model::getInhInvBaseMatrix | ( | void | ) | const |
継承移動・回転要素逆変換行列取得関数
モデルの持つ変換要素のうち、 位置と姿勢のみを反映した、 すなわち拡大縮小の要素を省いた変換行列の逆行列を取得します。 当モデルに親モデルがあった場合、 その親モデルの逆変換行列と当モデルの逆変換行列の積が返されます。 その結果として、この関数を用いることでグローバル座標系における 当モデルの逆変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::getInvBaseMatrix() と結果が同じとなります。
fk_Vector FK::fk_Model::getInhPosition | ( | void | ) | const |
継承位置ベクトル参照関数
モデルの位置ベクトルを取得します。 本関数は、親モデルの有無にかかわらず、グローバル座標系での実際の位置ベクトルを返します。
fk_Vector FK::fk_Model::getInhVec | ( | void | ) | const |
継承方向ベクトル参照関数
モデルの方向ベクトルを取得します。 本関数は、親モデルの有無にかかわらず、グローバル座標系での実際の方向ベクトルを返します。
fk_Vector FK::fk_Model::getInhUpvec | ( | void | ) | const |
継承アップベクトル参照関数
モデルのアップベクトルを取得します。 本関数は、親モデルの有無にかかわらず、 グローバル座標系での実際のアップベクトルを返します。
fk_Angle FK::fk_Model::getInhAngle | ( | void | ) | const |
継承オイラー角参照関数
モデルのオイラー角を取得します。 本関数は、親モデルの有無にかかわらず、グローバル座標系での実際のオイラー角を返します。 オイラー角の詳細については、 fk_Angle の説明を参照して下さい。
double FK::fk_Model::getInhScale | ( | void | ) | const |
継承全体倍率取得関数
モデルの全体拡大・縮小倍率を取得します。 親子関係の小モデルの場合、親モデルでの倍率も反映されます。
bool FK::fk_Model::setParent | ( | fk_Model * | model, |
bool | setMode = false |
||
) |
親モデル設定関数
親モデルを設定します。 親モデルは 1 個しか設定できません。 前に設定されていた場合は、前のモデル設定は破棄されます。
[in] | model | 親モデルインスタンスのポインタ |
[in] | setMode | true の場合、現在のグローバル座標系の位置と姿勢を、 親モデル設定後も保持します。 false の場合は、当モデルでの位置と姿勢を親モデルからの 相対的な位置、姿勢として扱います。 そのため、設定後にグローバル座標系での位置や姿勢は変化することになります。 この引数を省略した場合は false と同様の挙動となります。 |
void FK::fk_Model::deleteParent | ( | bool | setMode = false | ) |
親モデル解除関数
親モデルの設定を解除します。
[in] | setMode | true の場合、現在のグローバル座標系の位置と姿勢を、 親モデル解除後も保持します。 false の場合は、親モデルからの相対的な位置と姿勢を、 解除後のグローバル座標系に設定します。 この引数を省略した場合は false と同様の挙動となります。 |
fk_Model * FK::fk_Model::getParent | ( | void | ) | const |
親モデル参照関数
親モデルを取得します。
bool FK::fk_Model::entryChild | ( | fk_Model * | model, |
bool | setMode = false |
||
) |
子モデル設定関数
子モデルを設定します。 子モデルは複数持つことが可能なので、 既に子モデルが登録されている場合でも、その設定は破棄されません。
[in] | model | 子モデルインスタンスのポインタ |
[in] | setMode | true の場合、子モデルの現在のグローバル座標系の位置と姿勢を、 設定後も保持します。 false の場合は、子モデルでの位置と姿勢を当モデルからの 相対的な位置、姿勢として扱います。 そのため、設定後にグローバル座標系での位置や姿勢は変化することになります。 この引数を省略した場合は false と同様の挙動となります。 |
bool FK::fk_Model::deleteChild | ( | fk_Model * | model, |
bool | setMode = false |
||
) |
子モデル解除関数
子モデルの設定を解除します。
[in] | model | 子モデルインスタンスのポインタ。 もし model が子モデルの中に存在しない場合は、false を返します。 |
[in] | setMode | true の場合、子モデルのグローバル座標系の位置と姿勢を、 解除後も保持します。 false の場合は、親モデルからの相対的な位置と姿勢を、 解除後のグローバル座標系に設定します。 この引数を省略した場合は false と同様の挙動となります。 |
void FK::fk_Model::deleteChildren | ( | bool | setMode = false | ) |
全子モデル解除関数
当モデルの全ての子モデルの設定を解除します。
[in] | setMode | true の場合、子モデルのグローバル座標系の位置と姿勢を、 解除後も保持します。 false の場合は、親モデルからの相対的な位置と姿勢を、 解除後のグローバル座標系に設定します。 この引数を省略した場合は false と同様の挙動となります。 |
子モデル逐次参照関数
当モデルに設定されている子モデルを順番に帰します。 まず、引数に nullptr を渡したとき、1番目の子モデルを返します。 子モデルが存在しない場合は、その時点で nullptr を返します。 次に、1番目に帰ってきたモデルを引数として渡したとき、 2番目の子モデルを返します。 このように、設定されている子モデルを順番に参照することができます。 最後の子モデルが引数として渡されたとき、nullptr を返します。
以下のコードは、「parent」の全ての子モデルに対し、 描画モードを fk_Draw::LINE に設定する例です。
fk_Model parentModel, *childModel; for(childModel = parentModel.foreachChild(nullptr); childModel != nullptr; childModel = parentModel.foreachChild(childModel)) { childModel->setDrawMode(fk_Draw::LINE); }
[in] | model | 順番に渡す子モデルインスタンスのポインタ |
void FK::fk_Model::snapShot | ( | void | ) |
位置・姿勢保存関数
現時点でのモデルの位置と姿勢を保存します。 restore() 関数を用いることで復元します。
bool FK::fk_Model::restore | ( | void | ) |
bool FK::fk_Model::restore | ( | double | t | ) |
位置・姿勢途中復元関数
snapShot() 関数によって保存した位置・姿勢に対し、 現在の位置・姿勢と線形補間した状態にします。
[in] | t | 線形補間パラメータ。 0 を snapShot() 関数による保存時、 1 を現時点とし、 与えられた実数によって線形補間した位置と姿勢に設定します。 |
void FK::fk_Model::setShader | ( | fk_ShaderBinder * | shader | ) |
シェーダー設定関数
この関数は、モデル描画の際のシェーダーを設定するものです。 fk_ShaderBinder::bindModel() による設定とまったく同じ挙動となります。
[in] | shader | シェーダープログラム |
fk_ShaderBinder * FK::fk_Model::getShader | ( | void | ) |
シェーダー取得関数
setShader() (または fk_ShaderBinder::bindModel()) によって設定されたシェーダーを返します。
void FK::fk_Model::adjustSphere | ( | void | ) |
境界球自動設定関数
この関数は、 境界ボリュームである境界球の半径を自動的に設定するものです。 具体的には、モデルの中心から形状の最遠点となる点と中心との距離を半径とします。 その結果、すべての形状上の点は境界球の内側に入ることになります。 境界球に関する詳細は fk_Boundary クラスを参照して下さい。
void FK::fk_Model::adjustAABB | ( | void | ) |
AABB 自動設定関数
この関数は、 境界ボリュームである AABB (軸平行境界ボックス) の大きさを自動的に設定するものです。 すべての頂点が AABB の内部と入る条件を満たす最小の大きさが設定されます。 AABB に関する詳細は fk_Boundary クラスを参照して下さい。
void FK::fk_Model::adjustOBB | ( | void | ) |
OBB 自動設定関数
この関数は、 境界ボリュームである OBB (有向境界ボックス) の大きさを自動的に設定するものです。 すべての頂点が OBB の内部と入る条件を満たす最小の大きさが設定されます。 OBB に関する詳細は fk_Boundary クラスを参照して下さい。
void FK::fk_Model::adjustCapsule | ( | void | ) |
境界カプセル自動設定関数(全自動)
この関数は、 境界ボリュームである境界カプセルの大きさを自動的に設定するものです。 中心軸の位置と向きは自動的に設定され、 すべての頂点が境界カプセルの内部と入る条件を満たす最小の大きさが設定されます。 境界カプセルに関する詳細は fk_Boundary クラスを参照して下さい。
void FK::fk_Model::adjustCapsule | ( | fk_Axis | axis | ) |
境界カプセル自動設定関数(座標軸による中心軸設定)
この関数は、 境界ボリュームである境界カプセルの大きさを自動的に設定するものです。 中心軸に平行な座標軸を設定することで、 すべての頂点が境界カプセルの内部と入る条件を満たす最小の大きさが設定されます。 中心軸の位置は自動的に設定されます。 境界カプセルに関する詳細は fk_Boundary クラスを参照して下さい。
[in] | axis | 中心軸に平行な座標軸 |
境界カプセル自動設定関数(中心軸上の点と座標軸)
この関数は、 境界ボリュームである境界カプセルの大きさを自動的に設定するものです。 中心軸上の1点と、中心軸に平行な座標軸を設定することで、 すべての頂点が境界カプセルの内部と入る条件を満たす最小の大きさが設定されます。 境界カプセルに関する詳細は fk_Boundary クラスを参照して下さい。
[in] | P | 中心軸上の任意の点 |
[in] | axis | 中心軸に平行な座標軸 |
境界カプセル自動設定関数(中心軸直接指定)
この関数は、 境界ボリュームである境界カプセルの大きさを自動的に設定するものです。 中心軸上の2点を設定することで、 すべての頂点が境界カプセルの内部と入る条件を満たす最小の大きさが設定されます。 境界カプセルに関する詳細は fk_Boundary クラスを参照して下さい。
[in] | S | 中心軸始点位置ベクトル |
[in] | E | 中心軸終点位置ベクトル |
[in] | mode | true の場合、S と E を通る直線上で、 カプセル形状の体積が最小となるように、 S と E の位置を調整します。 false の場合は S と E を変更しません。 第3引数を省略した場合は、false がデフォルトとなります。 |
bool FK::fk_Model::isInter | ( | fk_Model * | model | ) |
モデル間干渉判定関数
この関数は、別モデルとの干渉判定を行います。 干渉判定に用いられる境界ボリュームの種類は、 fk_Boundary::setBMode() で設定されたものが用いられます。 相手モデル側で別の種類が設定されていた場合でも、 この関数を呼び出しているインスタンス側の設定が優先されます。 従って、相手モデル側の境界ボリュームも適切に設定しておく必要があります。
[in] | model | 干渉判定を行うモデル |
std::tuple< bool, double > FK::fk_Model::isCollision | ( | fk_Model * | model | ) |
モデル間衝突判定関数
この関数は、別モデルとの衝突判定を行います。 衝突判定を行うには、まずそれぞれのモデルにおいて snapShot() 関数によって衝突判定を行う初期状態を設定しておく必要があります。 その状態から現在の位置まで、両モデルが等速度直線運動していると想定し、 その間に衝突が発生したかどうかを検出します。
なお、本関数を利用する際には事前に境界球の半径を適切に設定しておく必要があります。 現在この関数は境界球による判定のみが有効となります。 fk_Boundary::setBMode() によって境界ボリュームが別の種類に設定されていた場合でも、 境界球の情報のみが用いられます。
なお、衝突判定は snapShot() を呼ぶ以前や現時点以降を含めての検出となるので、 snapShot() を呼んだ時点から現時点までの間に衝突が起こったかどうかを判定するには、 返値第2引数の衝突時間を考慮する必要があります。
[in] | model | 衝突判定を行うモデル |
第2要素は,snapShot() が呼ばれた時刻を 0、 現時点の時刻を 1 とした場合の衝突時間が入ります。 第1要素が true であった場合でも、 この値が 0 から 1 の間にないときは、 衝突が起こっていないことになりますので、注意して下さい。
void FK::fk_Model::setInterMode | ( | bool | mode | ) |
干渉継続モード設定関数
干渉継続モードを有効にしておくと、 本モデルが isInter() 関数で他のモデルと干渉状態が検出された場合、 resetInter() が呼ばれるまでは true を返すようになります。
[in] | mode | true である場合、干渉継続モードが有効となります。 false の場合無効にします。 |
bool FK::fk_Model::getInterMode | ( | void | ) |
bool FK::fk_Model::getInterStatus | ( | void | ) |
干渉継続状態取得関数
本関数は、干渉継続モードが有効である場合で、 前に resetInter() が呼ばれた以降で、 isInter() によって干渉が検出されたことがあるかを検出します。
void FK::fk_Model::resetInter | ( | void | ) |
干渉継続状態初期化関数
干渉継続モードによる干渉検出状態を初期化します。 この関数が呼ばれた以降、再び isInter() による干渉が検出されるまでは、 getInterStatus() 関数は false を返します。
void FK::fk_Model::setInterStopMode | ( | bool | mode | ) |
干渉自動停止モード設定関数
この関数は、干渉自動停止モードの有無効を設定します。 「干渉自動停止モード」とは、以下のような処理を行う機能のことです。
この機能を用いることで、移動後で干渉が起きてしまう移動が無効となります。 壁などにモデルが入らないように処理するような場面で有効となります。
このモードの対象となる移動関数は以下のとおりです。
これらの関数は、モデルの位置ベクトルが変化する可能性があるからです。 その他の姿勢制御関数については停止の対象とはなりません。
なお、このモードを利用する場合、 restore() した後にも干渉状態となっている場合、 適用モデルがまったく動かなくなるという問題が生じます。 そのため本機能を用いたい場合は、 干渉チェック対象となるモデルは全て静止した状態であることを推奨します。 また、位置のかわらない姿勢制御関数は干渉状態であっても動作しますが、 その際に物体の回転によって非干渉状態から干渉状態となることがありえますので、 これも注意が必要です。
[in] | mode | true の場合有効とし、 false の場合無効とします。 |
bool FK::fk_Model::getInterStopMode | ( | void | ) |
void FK::fk_Model::entryInterModel | ( | fk_Model * | model | ) |
干渉自動停止モデル登録関数
干渉自動停止モードの対象となるモデルを登録します。
[in] | model | 登録モデルインスタンス |
void FK::fk_Model::deleteInterModel | ( | fk_Model * | model | ) |
干渉自動停止モデル解除関数
干渉自動停止モードの対象となっていたモデルの解除を行います。 もし入力モデルが登録されていなかった場合は、なにも起こりません。
[in] | model | 解除モデルインスタンス |
void FK::fk_Model::clearInterModel | ( | void | ) |
干渉自動停止モデル初期化関数
干渉自動停止モード用に登録されていた全てのモデルを解除します。