FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
Model.h
[詳解]
1#if !defined(__FK_MODEL_HEADER__)
2#define __FK_MODEL_HEADER__
3
4#include <FK/Boundary.h>
5#include <FK/Palette.h>
6#include <FK/RenderState.h>
7#include <FK/Angle.h>
8#include <FK/IndexFace.h>
9#include <FK/Texture.h>
10#include <FK/Tree.h>
11#include <memory>
12#include <functional>
13
14namespace FK {
15 class fk_Material;
16 class fk_Shape;
17 class fk_TreeData;
18 class fk_Color;
19 class fk_ShaderBinder;
20
21#if !defined(FK_DOXYGEN_USER_PROCESS)
22 using fk_funcSet = std::tuple<unsigned int, std::function<void(void)> >;
23#endif
24
26 enum class fk_ElementMode {
27 NONE,
28 MODEL,
29 ELEMENT
30 };
31
33 enum class fk_ShadingMode {
34 GOURAUD = 0,
35 PHONG,
36 NUM
37 };
38
39
41
98 class fk_Model : public fk_Boundary {
99
100#if !defined(FK_DOXYGEN_USER_PROCESS)
101 class Member {
102 public:
103 fk_Material material;
104 fk_Color pointColor;
105 fk_Color lineColor;
106 fk_Color curveColor;
107 fk_Shape *shape;
108 fk_Model *parentModel;
109 fk_TreeData *treeData;
110 fk_Draw drawMode;
111 fk_ElementMode elemMode;
112 fk_BlendMode blendMode;
113 fk_BlendFactor srcFactor;
114 fk_BlendFactor dstFactor;
115 fk_DepthMode depthMode;
116 double pointSize;
117 bool smoothFlag;
118 bool reverseFlag;
119 bool treeFlag;
120 unsigned int modelID;
121 bool treeDelMode;
122 fk_TexMode texMode;
123 fk_ShadingMode shadingMode;
124
125 std::unique_ptr<fk_HVector> snapPos;
126 std::unique_ptr<fk_HVector> snapInhPos;
127 std::unique_ptr<fk_Angle> snapAngle;
128 bool snapFlag;
129
130 bool interMode;
131 bool interStatus;
132 bool interStopMode;
133
134 std::list<fk_Model *> interList;
135
136 fk_ShaderBinder *shader;
137
138 bool shadowEffectMode;
139 bool shadowDrawMode;
140
141 bool fogMode;
142
143 Member(void);
144 };
145#endif
146
147 public:
148
150
156 fk_Model(fk_Shape *shape = nullptr);
157
159 virtual ~fk_Model();
160
161
163
170 unsigned int getID(void) const;
171
174
176
206 bool glRotate(fk_Vector origin, fk_Axis axis, double theta);
207
209
240 bool glRotate(double orgX, double orgY, double orgZ, fk_Axis axis, double theta);
241
243
271 bool glRotate(fk_Vector A, fk_Vector B, double theta);
272
274
306 bool glRotate(double Ax, double Ay, double Az,
307 double Bx, double By, double Bz, double theta);
308
310
342 bool loRotate(fk_Vector origin, fk_Axis axis, double theta);
343
345
377 bool loRotate(double orgX, double orgY, double orgZ, fk_Axis axis, double theta);
378
380
412 bool loRotate(fk_Vector A, fk_Vector B, double theta);
413
415
460 bool loRotate(double Ax, double Ay, double Az,
461 double Bx, double By, double Bz, double theta);
462
464
494 bool glRotateWithVec(fk_Vector origin, fk_Axis axis, double theta);
495
496
498
530 bool glRotateWithVec(double orgX, double orgY, double orgZ,
531 fk_Axis axis, double theta);
532
534
563 bool glRotateWithVec(fk_Vector A, fk_Vector B, double theta);
564
566
598 bool glRotateWithVec(double Ax, double Ay, double Az,
599 double Bx, double By, double Bz, double theta);
600
602
633 bool loRotateWithVec(fk_Vector origin, fk_Axis axis, double theta);
634
636
669 bool loRotateWithVec(double orgX, double orgY, double orgZ,
670 fk_Axis axis, double theta);
671
673
706 bool loRotateWithVec(fk_Vector A, fk_Vector B, double theta);
707
709
754 bool loRotateWithVec(double Ax, double Ay, double Az,
755 double Bx, double By, double Bz, double theta);
757
760
762
782
784
806 bool glTranslate(double x, double y, double z);
807
809
830
832
854 bool loTranslate(double x, double y, double z);
855
857
880
882
906 bool glMoveTo(double x, double y, double z);
908
911
913
923 void setShape(fk_Shape *shape);
924
926
932 fk_Shape * getShape(void) const;
933
935
938
940
958 void setMaterial(const fk_Material &mat);
959
961
970
972
982 void setPointColor(float r, float g, float b);
983
985
994
996
1006 void setLineColor(float r, float g, float b);
1007
1009
1018
1020
1030 void setCurveColor(float r, float g, float b);
1031
1033
1036
1038
1046
1048
1056
1058
1066
1068
1076
1077
1079
1082
1083
1085
1113 void setDrawMode(const fk_Draw mode);
1114
1116
1124
1126
1137
1139
1147
1149
1163
1165
1173
1175
1227 const fk_BlendFactor srcFactor = fk_BlendFactor::SRC_ALPHA,
1229
1231
1243 fk_BlendFactor *outDst = nullptr) const;
1244
1246
1255 void setSmoothMode(const bool mode);
1256
1258
1265 bool getSmoothMode(void) const;
1266
1268
1276 void setReverseDrawMode(const bool mode);
1277
1279
1286 bool getReverseDrawMode(void) const;
1287
1289
1304 void setDepthMode(const fk_DepthMode mode);
1305
1307
1315
1317
1375
1377
1385
1387
1395 void setPointSize(const double size);
1396
1397
1399
1406 double getPointSize(void) const;
1407
1409
1424 void setShadowEffect(bool mode);
1425
1427
1438
1440
1452 void setShadowDraw(bool mode);
1453
1455
1465 bool getShadowDraw(void);
1466
1468
1474 void setFogMode(bool mode);
1475
1477
1482 bool getFogMode(void);
1483
1485
1488
1490
1504
1506
1521
1523
1539
1541
1557
1559
1568
1570
1579
1581
1591
1592#if !defined(FK_OLD_NONSUPPORT) && !defined(FK_DOXYGEN_USER_PROCESS)
1593 fk_Vector getInhUpVec(void) const;
1594 void setPickMode(const bool);
1595 bool getPickMode(void) const;
1596 void setMaterialMode(const fk_MaterialMode mode);
1597 fk_MaterialMode getMaterialMode(void) const;
1598#endif
1599
1601
1611
1613
1622 double getInhScale(void) const;
1624
1627
1629
1648 bool setParent(fk_Model *model, bool setMode = false);
1649
1651
1663 void deleteParent(bool setMode = false);
1664
1666
1674 fk_Model * getParent(void) const;
1675
1677
1696 bool entryChild(fk_Model *model, bool setMode = false);
1697
1699
1717 bool deleteChild(fk_Model *model, bool setMode = false);
1718
1720
1732 void deleteChildren(bool setMode = false);
1733
1735
1764
1766
1769
1771
1777 void snapShot(void);
1778
1780
1787 bool restore(void);
1788
1790
1804 bool restore(double t);
1805
1807
1810
1812
1823
1825
1833
1835
1838
1840
1858 void adjustSphere(void);
1859
1861
1883 void adjustAABB(void);
1884
1886
1904 void adjustOBB(void);
1905
1907
1928 void adjustCapsule(void);
1929
1931
1956
1958
1983
1985
2015 void adjustCapsule(fk_Vector S, fk_Vector E, bool mode = false);
2017
2020
2022
2046 bool isInter(fk_Model *model);
2047
2049
2089 std::tuple<bool, double> isCollision(fk_Model *model);
2090
2091#if !defined(FK_OLD_NONSUPPORT) && !defined(FK_DOXYGEN_USER_PROCESS)
2092 bool isCollision(fk_Model *model, double *time);
2093#endif
2094
2096
2108 void setInterMode(bool mode);
2109
2111
2119 bool getInterMode(void);
2120
2122
2132 bool getInterStatus(void);
2133
2135
2142 void resetInter(void);
2144
2147
2149
2195 void setInterStopMode(bool mode);
2196
2198
2206
2208
2221
2223
2232
2234
2240
2242
2243
2244#if !defined(FK_DOXYGEN_USER_PROCESS)
2245 // カスタムテクスチャ描画用エントリポイント
2246 virtual void connectShader(unsigned int) {};
2247
2248 void SetTreeDelMode(bool);
2249 void TreePrint(void);
2250#endif
2251
2252#if !defined(FK_OLD_NONSUPPORT) && !defined(FK_DOXYGEN_USER_PROCESS)
2253 void setSize(double);
2254 double getSize(void) const;
2255 void setWidth(double);
2256 double getWidth(void) const;
2257
2258#endif
2259
2260 private:
2261 std::unique_ptr<Member> _m;
2262
2263 void EntryTree(void);
2264 void DeleteTree(void);
2265 fk_TreeData * GetTreeData(fk_Model *);
2266
2267 bool IsBSInter(fk_Model *);
2268 bool IsAABBInter(fk_Model *);
2269 bool IsOBBInter(fk_Model *);
2270 bool IsCapsuleInter(fk_Model *);
2271
2272 void PreMove(void);
2273 void PostMove(void);
2274
2275 void StaticInit(void);
2276 void AdjustCapsule(std::vector<fk_Vector> *, fk_Vector &, fk_Vector &, bool mode);
2277
2278 static inline std::unique_ptr<fk_Tree> modelTree;
2279 static inline std::unique_ptr<unsigned int> globalModelID;
2280 };
2281}
2282
2283#endif // !__FK_MODEL_HEADER__
2284
2285/****************************************************************************
2286 *
2287 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
2288 *
2289 * Redistribution and use in source and binary forms,
2290 * with or without modification, are permitted provided that the
2291 * following conditions are met:
2292 *
2293 * - Redistributions of source code must retain the above
2294 * copyright notice, this list of conditions and the
2295 * following disclaimer.
2296 *
2297 * - Redistributions in binary form must reproduce the above
2298 * copyright notice, this list of conditions and the
2299 * following disclaimer in the documentation and/or
2300 * other materials provided with the distribution.
2301 *
2302 * - Neither the name of the copyright holders nor the names
2303 * of its contributors may be used to endorse or promote
2304 * products derived from this software without specific
2305 * prior written permission.
2306 *
2307 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2308 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2309 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2310 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
2311 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2312 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2313 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2314 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2315 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2316 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
2317 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2318 * POSSIBILITY OF SUCH DAMAGE.
2319 *
2320 ****************************************************************************/
2321/****************************************************************************
2322 *
2323 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
2324 *
2325 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
2326 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
2327 *
2328 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
2329 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
2330 *
2331 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
2332 * および下記免責条項を含めること。
2333 *
2334 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
2335 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
2336 * 含めること。
2337 *
2338 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
2339 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
2340 * コントリビューターの名前を使用してはならない。
2341 *
2342 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
2343 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
2344 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
2345 * に限定されない、いかなる保証もないものとします。著作権者もコン
2346 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
2347 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
2348 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
2349 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
2350 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
2351 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
2352 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
2353 * ついて、一切責任を負わないものとします。
2354 *
2355 ****************************************************************************/
オイラー角を表すクラス
Definition Angle.h:21
境界ボリュームを管理するクラス
Definition Boundary.h:65
RGB色を管理するクラス
Definition Color.h:21
マテリアル(質感)を管理するクラス
Definition Material.h:40
一般4元正方行列を管理するクラス
Definition Matrix.h:549
モデルを生成、管理するクラス
Definition Model.h:98
void setSmoothMode(const bool mode)
スムースモード設定関数
void snapShot(void)
位置・姿勢保存関数
fk_BlendMode getBlendMode(fk_BlendFactor *outSrc=nullptr, fk_BlendFactor *outDst=nullptr) const
ブレンドモード参照関数
fk_Angle getInhAngle(void) const
継承オイラー角参照関数
bool loRotate(fk_Vector A, fk_Vector B, double theta)
ローカル座標系任意軸回転関数1
bool getInterStatus(void)
干渉継続状態取得関数
virtual ~fk_Model()
デストラクタ
fk_Vector getInhPosition(void) const
継承位置ベクトル参照関数
fk_Model * getParent(void) const
親モデル参照関数
bool setParent(fk_Model *model, bool setMode=false)
親モデル設定関数
bool loRotateWithVec(fk_Vector origin, fk_Axis axis, double theta)
ローカル座標系座標軸回転(姿勢付き)関数1
void setLineColor(fk_Color *col)
稜線色設定関数1
bool glMoveTo(double x, double y, double z)
グローバル座標系位置指定関数2
void setFogMode(bool mode)
霧効果設定関数
bool glTranslate(double x, double y, double z)
グローバル座標系平行移動関数2
void deleteParent(bool setMode=false)
親モデル解除関数
bool loTranslate(fk_Vector v)
ローカル座標系平行移動関数1
void setShape(fk_Shape *shape)
形状設定関数
fk_Material * getMaterial(void)
マテリアル参照関数
void setTextureMode(fk_TexMode mode)
テクスチャモード設定関数
void setElementMode(const fk_ElementMode mode)
要素モード設定関数
bool glMoveTo(fk_Vector p)
グローバル座標系位置指定関数1
bool glRotateWithVec(fk_Vector A, fk_Vector B, double theta)
グローバル座標系任意軸回転(姿勢付き)関数1
void setLineColor(float r, float g, float b)
稜線色設定関数2
bool restore(void)
位置・姿勢復元関数
bool getInterMode(void)
干渉継続モード取得関数
bool glRotateWithVec(double orgX, double orgY, double orgZ, fk_Axis axis, double theta)
グローバル座標系座標軸回転(姿勢付き)関数2
fk_DepthMode getDepthMode(void) const
前後関係参照関数
bool deleteChild(fk_Model *model, bool setMode=false)
子モデル解除関数
bool getShadowEffect(void)
影投影設定参照関数
bool glTranslate(fk_Vector v)
グローバル座標系平行移動関数1
fk_OrthoMatrix getInhBaseMatrix(void) const
継承移動・回転要素変換行列取得関数
void setPointColor(fk_Color *col)
頂点色設定関数1
void setDrawMode(const fk_Draw mode)
描画モード設定関数
void deleteInterModel(fk_Model *model)
干渉自動停止モデル解除関数
fk_Model(fk_Shape *shape=nullptr)
コンストラクタ
void adjustCapsule(fk_Vector P, fk_Axis axis)
境界カプセル自動設定関数(中心軸上の点と座標軸)
bool loRotate(double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
ローカル座標系任意軸回転関数2
fk_TexMode getTextureMode(void)
テクスチャモード取得関数
void adjustCapsule(fk_Vector S, fk_Vector E, bool mode=false)
境界カプセル自動設定関数(中心軸直接指定)
fk_ShaderBinder * getShader(void)
シェーダー取得関数
void setBlendMode(const fk_BlendMode mode, const fk_BlendFactor srcFactor=fk_BlendFactor::SRC_ALPHA, const fk_BlendFactor dstFactor=fk_BlendFactor::ONE_MINUS_SRC_ALPHA)
ブレンドモード設定関数
void adjustCapsule(fk_Axis axis)
境界カプセル自動設定関数(座標軸による中心軸設定)
fk_Vector getInhVec(void) const
継承方向ベクトル参照関数
void setShadingMode(fk_ShadingMode mode)
シェーディングモード設定関数
bool getSmoothMode(void) const
スムースモード参照関数
void setShader(fk_ShaderBinder *shader)
シェーダー設定関数
fk_ElementMode getElementMode(void) const
要素モード設定関数
void clearInterModel(void)
干渉自動停止モデル初期化関数
bool loRotateWithVec(double orgX, double orgY, double orgZ, fk_Axis axis, double theta)
ローカル座標系座標軸回転(姿勢付き)関数2
fk_ShadingMode getShadingMode(void) const
シェーディングモード取得関数
void entryInterModel(fk_Model *model)
干渉自動停止モデル登録関数
bool glRotateWithVec(fk_Vector origin, fk_Axis axis, double theta)
グローバル座標系座標軸回転(姿勢付き)関数1
unsigned int getID(void) const
ID参照関数
bool loRotateWithVec(double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
ローカル座標系任意軸回転(姿勢付き)関数2
bool glRotateWithVec(double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
グローバル座標系任意軸回転(姿勢付き)関数2
bool entryChild(fk_Model *model, bool setMode=false)
子モデル設定関数
void setShadowEffect(bool mode)
影投影設定関数
void setPointColor(float r, float g, float b)
頂点色設定関数2
bool getReverseDrawMode(void) const
描画順序参照関数
bool loRotateWithVec(fk_Vector A, fk_Vector B, double theta)
ローカル座標系任意軸回転(姿勢付き)関数1
std::tuple< bool, double > isCollision(fk_Model *model)
モデル間衝突判定関数
fk_OrthoMatrix getInhInvBaseMatrix(void) const
継承移動・回転要素逆変換行列取得関数
void setDepthMode(const fk_DepthMode mode)
前後関係制御関数
bool loTranslate(double x, double y, double z)
ローカル座標系平行移動関数2
void setInterMode(bool mode)
干渉継続モード設定関数
bool glRotate(double orgX, double orgY, double orgZ, fk_Axis axis, double theta)
グローバル座標系座標軸回転関数2
bool glRotate(fk_Vector origin, fk_Axis axis, double theta)
グローバル座標系座標軸回転関数1
void adjustOBB(void)
OBB 自動設定関数
void setCurveColor(fk_Color *col)
曲線色設定関数1
void adjustAABB(void)
AABB 自動設定関数
bool getInterStopMode(void)
干渉自動停止モード取得関数
void setCurveColor(float r, float g, float b)
曲線色設定関数2
void resetInter(void)
干渉継続状態初期化関数
fk_Color * getPointColor(void)
頂点色参照関数
bool loRotate(fk_Vector origin, fk_Axis axis, double theta)
ローカル座標系座標軸回転関数1
double getInhScale(void) const
継承全体倍率取得関数
bool restore(double t)
位置・姿勢途中復元関数
void setShadowDraw(bool mode)
影表示設定関数
void adjustSphere(void)
境界球自動設定関数
fk_Vector getInhUpvec(void) const
継承アップベクトル参照関数
fk_Color * getLineColor(void)
稜線色参照関数
void setMaterial(const fk_Material &mat)
マテリアル設定関数
void adjustCapsule(void)
境界カプセル自動設定関数(全自動)
void setInterStopMode(bool mode)
干渉自動停止モード設定関数
bool isInter(fk_Model *model)
モデル間干渉判定関数
bool getFogMode(void)
霧効果設定参照関数
void setPointSize(const double size)
頂点描画サイズ設定関数
bool getShadowDraw(void)
影表示設定参照関数
void setReverseDrawMode(const bool mode)
描画順序制御関数
fk_Matrix getInhInvMatrix(void) const
継承逆変換行列取得関数
fk_Matrix getInhMatrix(void) const
継承変換行列取得関数
double getPointSize(void) const
頂点描画サイズ参照関数
bool loRotate(double orgX, double orgY, double orgZ, fk_Axis axis, double theta)
ローカル座標系座標軸回転関数2
bool glRotate(fk_Vector A, fk_Vector B, double theta)
グローバル座標系任意軸回転関数1
fk_Color * getCurveColor(void)
曲線色参照関数
fk_Model * foreachChild(fk_Model *model)
子モデル逐次参照関数
fk_Draw getDrawMode(void) const
描画モード参照関数
bool glRotate(double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
グローバル座標系任意軸回転関数2
void deleteChildren(bool setMode=false)
全子モデル解除関数
fk_Shape * getShape(void) const
形状参照関数
4元正方直交行列を管理するクラス
Definition Matrix.h:40
シェーダープログラム統括クラス
Definition ShaderBinder.h:34
形状用基底クラス
Definition Shape.h:44
木構造用ノードデータクラス
Definition Tree.h:59
3次元ベクトルを管理するクラス
Definition Vector.h:45
Fine Kernel Toolkit 名前空間
Definition Angle.h:6
fk_DepthMode
デプス読み書きモード列挙型
Definition RenderState.h:32
fk_TexMode
テクスチャモードを表す列挙型
Definition Texture.h:12
fk_ShadingMode
シェーディングモードを表す列挙型
Definition Model.h:33
@ PHONG
フォンシェーディング
@ GOURAUD
グーローシェーディング
@ NONE
未定義境界
fk_BlendMode
ブレンドモード列挙型
Definition RenderState.h:6
fk_BlendFactor
ブレンド係数列挙型
Definition RenderState.h:18
fk_Axis
座標軸を表す列挙型
Definition Vector.h:16
@ MODEL
fk_Model 型
@ NUM
種類数
fk_ElementMode
描画優先モードを表す列挙型
Definition Model.h:26
@ ELEMENT
形状個別要素設定優先
fk_MaterialMode
マテリアルモード型
Definition Palette.h:11
fk_Draw
描画モードを表す列挙型
Definition DrawMode.h:7