FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Texture.h
説明を見る。
1 /****************************************************************************
2  *
3  * Copyright (c) 1999-2014, Fine Kernel Project, All rights reserved.
4  *
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided that the
7  * following conditions are met:
8  *
9  * - Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  *
13  * - Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the
15  * following disclaimer in the documentation and/or
16  * other materials provided with the distribution.
17  *
18  * - Neither the name of the copyright holders nor the names
19  * of its contributors may be used to endorse or promote
20  * products derived from this software without specific
21  * prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
33  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  ****************************************************************************/
37 /****************************************************************************
38  *
39  * Copyright (c) 1999-2014, Fine Kernel Project, All rights reserved.
40  *
41  * 本ソフトウェアおよびソースコードのライセンスは、基本的に
42  * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
43  *
44  * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
45  * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
46  *
47  * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
48  * および下記免責条項を含めること。
49  *
50  * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
51  * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
52  * 含めること。
53  *
54  * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
55  * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
56  * コントリビューターの名前を使用してはならない。
57  *
58  * 本ソフトウェアは、著作権者およびコントリビューターによって「現
59  * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
60  * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
61  * に限定されない、いかなる保証もないものとします。著作権者もコン
62  * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
63  * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
64  * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
65  * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
66  * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
67  * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
68  * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
69  * ついて、一切責任を負わないものとします。
70  *
71  ****************************************************************************/
72 #ifndef __FK_TEXTURE_HEADER__
73 #define __FK_TEXTURE_HEADER__
74 
75 #include <FK/Shape.h>
76 #include <FK/Image.h>
77 #include <FK/IndexFace.h>
78 
79 class fk_MQOParser;
80 class fk_IndexFaceSet;
81 
83 enum fk_TexMode {
87 };
88 
93 };
94 
96 
107 class fk_TexCoord {
108 
109  public:
110 
111  float x;
112  float y;
113 
115 
119  fk_TexCoord(double x = 0.0, double y = 0.0);
120 
122  fk_TexCoord(const fk_TexCoord &);
123 
126 
128 
139  bool operator ==(const fk_TexCoord &) const;
140 
142 
148  void set(double x, double y);
149 };
150 
152 
160 class fk_Texture: public fk_Shape {
161  friend class fk_TextureDraw;
162 
163  private:
164  fk_Image *image;
165  fk_Image localImage;
166  fk_TexMode texMode;
167  fk_TexRendMode texRendMode;
168  fk_Palette localPal;
169 
170  bool GetInitFlag(void);
171  void SetInitFlag(bool);
172  fk_TexID GetTexID(void);
173  void SetTexID(const fk_TexID);
174 
175  static void ClearTexState(fk_Image *);
176 
177  protected:
178 
179 #ifndef FK_DOXYGEN_USER_PROCESS
180 
181  void BaseInit(void);
182  bool IsLocalImage(void);
183  void SetLocalImage(void);
184 
185 #endif
186 
187  public:
188 
189 #ifndef FK_DOXYGEN_USER_PROCESS
190 
191  fk_Texture(fk_Image * = (fk_Image *)NULL);
192  virtual ~fk_Texture();
193  virtual void init(void) = 0;
194 
195 #endif
196 
198 
210  void setImage(fk_Image *image);
211 
213 
218  fk_Image * getImage(void);
219 
221 
229  bool readBMP(std::string fileName);
230 
232 
242  bool readBMPData(fk_ImType *buf);
243 
245 
253  bool readPNG(std::string fileName);
254 
256 
266  bool readPNGData(fk_ImType *buf);
267 
269 
277  bool readJPG(std::string fileName);
278 
280 
287  const fk_Dimension * getImageSize(void);
288 
290 
302  const fk_Dimension * getBufferSize(void);
303 
305 
351  void setTextureMode(fk_TexMode mode);
352 
354 
362 
364 
374  void setTexRendMode(fk_TexRendMode mode);
375 
377 
385 
387 
394  void fillColor(const fk_Color &color);
395 
397 
406  void fillColor(int r, int g, int b, int a = 0);
407 
409 
425  const fk_ImType * getImageBuf(void);
426 };
427 
429 
448 class fk_RectTexture : public fk_Texture {
449 
450  friend class fk_TextureDraw;
451 
452  private:
453 
454  fk_TexCoord texSize;
455  bool repeatFlag;
456  fk_TexCoord repeatParam;
457  fk_TexCoord texCoord[2];
458 
459  public:
460 
462 
467  fk_RectTexture(fk_Image *image = (fk_Image *)NULL);
468 
470  virtual ~fk_RectTexture();
471 
473 
476  void init(void);
477 
479 
488  bool setTextureSize(double w, double h);
489 
491 
497 
499 
516  void setRepeatMode(bool mode);
517 
519 
527  bool getRepeatMode(void);
528 
530 
542  void setRepeatParam(double wNum, double hNum);
543 
545 
553 
555 
567  void setTextureCoord(double sX, double sY,
568  double eX, double eY);
569 
571 
581  void setTextureCoord(const fk_TexCoord &S,
582  const fk_TexCoord &E);
583 
585 
598 };
599 
601 
621 class fk_TriTexture : public fk_Texture {
622 
623  friend class fk_TextureDraw;
624 
625  private:
626  fk_Vector pos[3];
627  fk_TexCoord texCoord[3];
628 
629  fk_Vector * getPos(void);
630  fk_TexCoord * getCoord(void);
631 
632  public:
633 
635 
640  fk_TriTexture(fk_Image *image = (fk_Image *)NULL);
641 
643  virtual ~fk_TriTexture();
644 
646 
649  void init(void);
650 
652 
671  bool setTextureCoord(int ID, double x, double y);
672 
674 
689  bool setTextureCoord(int ID, fk_TexCoord coord);
690 
692 
702 
704 
718  bool setVertexPos(int ID, double x, double y, double z);
719 
721 
733  bool setVertexPos(int ID, fk_Vector pos);
734 
736 
745  fk_Vector getVertexPos(int ID);
746 };
747 
749 
778 class fk_MeshTexture : public fk_Texture {
779 
780  friend class fk_TextureDraw;
781 
782  private:
783 
784  int triNum;
785  std::vector<fk_Vector> posArray;
786  std::vector<fk_TexCoord> coordArray;
787 
788  std::vector<fk_Vector> * getPos(void);
789  std::vector<fk_TexCoord> * getCoord(void);
790 
791  public:
792 
794 
799  fk_MeshTexture(fk_Image *image = (fk_Image *)NULL);
800 
802  virtual ~fk_MeshTexture();
803 
805 
808  void init(void);
809 
811 
819  bool setTriNum(int num);
820 
822 
829  int getTriNum(void);
830 
832 
855  bool setTextureCoord(int tID, int vID,
856  double x, double y);
857 
859 
878  bool setTextureCoord(int tID, int vID, fk_TexCoord coord);
879 
881 
896  bool setTriTextureCoord(int tID,
897  std::vector<fk_TexCoord> *array);
898 
900 
915  bool setTriTextureCoord(int tID,
916  fk_TexCoord *array);
917 
919 
933  fk_TexCoord getTextureCoord(int tID, int vID);
934 
936 
954  bool setVertexPos(int tID, int vID,
955  double x, double y, double z);
956 
958 
974  bool setVertexPos(int tID, int vID, fk_Vector pos);
975 
977 
991  bool setTriPos(int tID, std::vector<fk_Vector> *array);
992 
994 
1008  bool setTriPos(int tID, fk_Vector *array);
1009 
1011 
1025  fk_Vector getVertexPos(int tID, int vID);
1026 
1028 
1034  void putIndexFaceSet(fk_IndexFaceSet *ifs);
1035 
1037 
1063  bool readMQOFile(std::string fileName,
1064  std::string objName,
1065  bool contFlg = true);
1066 };
1067 
1068 #endif // !__FK_TEXTURE_HEADER__
bool setTextureCoord(int tID, int vID, double x, double y)
テクスチャ座標設定関数1
bool setTextureSize(double w, double h)
テクスチャサイズ設定関数
void init(void)
初期化関数
fk_TexCoord & operator=(const fk_TexCoord &)
代入演算子
画像モード
Definition: Texture.h:85
fk_Image * getImage(void)
画像データ取得関数
マテリアルパレットを管理するクラス
Definition: Palette.h:95
bool readBMP(std::string fileName)
BMP ファイル入力関数
fk_TexCoord getTextureCoord(int ID)
部分抽出参照関数
fk_TexCoord getTextureSize(void)
テクスチャサイズ参照関数
bool setTriTextureCoord(int tID, std::vector< fk_TexCoord > *array)
テクスチャ座標配列設定関数1
線形補間モード
Definition: Texture.h:86
3角形テクスチャを生成、管理するクラス
Definition: Texture.h:621
void setRepeatParam(double wNum, double hNum)
リピートモード枚数設定関数
fk_Vector getVertexPos(int tID, int vID)
頂点位置ベクトル参照関数
bool setVertexPos(int tID, int vID, double x, double y, double z)
頂点位置ベクトル設定関数1
friend class fk_TextureDraw
Definition: Texture.h:623
3次元ベクトルを管理するクラス
Definition: Vector.h:110
bool setTriNum(int num)
3角形面数設定関数
int getTriNum(void)
3角形面数参照関数
void setTextureCoord(double sX, double sY, double eX, double eY)
部分抽出設定関数1
fk_Vector getVertexPos(int ID)
頂点位置ベクトル取得関数
void setTexRendMode(fk_TexRendMode mode)
テクスチャ描画品質設定関数
void set(double x, double y)
成分設定関数
形状用基底クラス
Definition: Shape.h:86
RGB色を管理するクラス
Definition: Material.h:92
friend class fk_TextureDraw
Definition: Texture.h:161
void setTextureMode(fk_TexMode mode)
テクスチャモード設定関数
fk_TexCoord getTextureCoord(int ID)
テクスチャ座標取得関数
fk_TexCoord getRepeatParam(void)
リピートモード枚数参照関数
インデックスフェースセットによる任意形状を生成、管理するクラス
Definition: IndexFace.h:145
bool readBMPData(fk_ImType *buf)
BMP バッファ入力関数
fk_TexCoord getTextureCoord(int tID, int vID)
テクスチャ座標参照関数
void setImage(fk_Image *image)
画像データ設定関数
float y
y成分
Definition: Texture.h:112
矩形テクスチャを生成、管理するクラス
Definition: Texture.h:448
void setRepeatMode(bool mode)
リピートモード設定関数
float x
x成分
Definition: Texture.h:111
fk_RectTexture(fk_Image *image=(fk_Image *) NULL)
コンストラクタ
const fk_Dimension * getBufferSize(void)
画像バッファサイズ取得関数
bool readPNG(std::string fileName)
PNG ファイル入力関数
メッシュテクスチャを生成、管理するクラス
Definition: Texture.h:778
fk_TexMode
テクスチャモードを表す列挙型
Definition: Texture.h:83
fk_TexMode getTextureMode(void)
テクスチャモード取得関数
fk_TexCoord(double x=0.0, double y=0.0)
コンストラクタ
高品質
Definition: Texture.h:92
void fillColor(const fk_Color &color)
一様色初期化関数1
virtual ~fk_RectTexture()
デストラクタ
テクスチャ用基底クラス
Definition: Texture.h:160
bool setTextureCoord(int ID, double x, double y)
テクスチャ座標設定関数1
fk_TexRendMode getTexRendMode(void)
テクスチャ描画品質取得関数
void init(void)
初期化関数
void init(void)
初期化関数
画像を生成、管理するクラス
Definition: Image.h:235
bool getRepeatMode(void)
リピートモード参照関数
friend class fk_TextureDraw
Definition: Texture.h:780
bool setVertexPos(int ID, double x, double y, double z)
頂点位置ベクトル設定関数1
bool readJPG(std::string fileName)
JPEG ファイル入力関数
bool setTriPos(int tID, std::vector< fk_Vector > *array)
頂点位置ベクトル配列設定関数1
bool operator==(const fk_TexCoord &) const
等号比較演算子
fk_TriTexture(fk_Image *image=(fk_Image *) NULL)
コンストラクタ
const fk_Dimension * getImageSize(void)
画像サイズ取得関数
friend class fk_TextureDraw
Definition: Texture.h:450
積算モード
Definition: Texture.h:84
const fk_ImType * getImageBuf(void)
画像データ配列先頭アドレス取得関数
画像サイズを表すクラス
Definition: Image.h:141
fk_TexRendMode
テクスチャ描画品質を表す列挙型
Definition: Texture.h:90
標準品質
Definition: Texture.h:91
fk_MeshTexture(fk_Image *image=(fk_Image *) NULL)
コンストラクタ
bool readMQOFile(std::string fileName, std::string objName, bool contFlg=true)
MQOファイル入力関数
テクスチャ座標を管理するクラス
Definition: Texture.h:107
virtual ~fk_TriTexture()
デストラクタ
void putIndexFaceSet(fk_IndexFaceSet *ifs)
fk_IndexFaceSet インスタンスコピー関数
bool readPNGData(fk_ImType *buf)
PNG バッファ入力関数
virtual ~fk_MeshTexture()
デストラクタ