FineKernelToolKit 2.8.10

- メインページ
- ネームスペース
- クラス
- ファイル

- ファイル一覧
- ファイルメンバ

FK/Texture.h
説明を見る。

    00001 /****************************************************************************
    00002  *
    00003  *  Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved.
    00004  *
    00005  *  Redistribution and use in source and binary forms,
    00006  *  with or without modification, are permitted provided that the
    00007  *  following conditions are met:
    00008  *
    00009  *      - Redistributions of source code must retain the above
    00010  *          copyright notice, this list of conditions and the
    00011  *          following disclaimer.
    00012  *
    00013  *      - Redistributions in binary form must reproduce the above
    00014  *          copyright notice, this list of conditions and the
    00015  *          following disclaimer in the documentation and/or
    00016  *          other materials provided with the distribution.
    00017  *
    00018  *      - Neither the name of the copyright holders nor the names
    00019  *          of its contributors may be used to endorse or promote
    00020  *          products derived from this software without specific
    00021  *          prior written permission.
    00022  *
    00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    00029  *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    00030  *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    00031  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    00032  *  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    00033  *  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    00034  *  POSSIBILITY OF SUCH DAMAGE.
    00035  *
    00036  ****************************************************************************/
    00037 /****************************************************************************
    00038  *
    00039  *  Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved.
    00040  *
    00041  *  本ソフトウェアおよびソースコードのライセンスは、基本的に
    00042  *  「修正 BSD ライセンス」に従います。以下にその詳細を記します。
    00043  *
    00044  *  ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
    00045  *  以下の条件を満たす場合に限り、再頒布および使用が許可されます。
    00046  *
    00047  *  - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
    00048  *      および下記免責条項を含めること。
    00049  *
    00050  *  - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
    00051  *      資料に、上記の著作権表示、本条件一覧、および下記免責条項を
    00052  *      含めること。
    00053  *
    00054  *  - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
    00055  *      宣伝または販売促進に、本ソフトウェアの著作権者の名前または
    00056  *      コントリビューターの名前を使用してはならない。
    00057  *
    00058  *  本ソフトウェアは、著作権者およびコントリビューターによって「現
    00059  *  状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
    00060  *  および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
    00061  *  に限定されない、いかなる保証もないものとします。著作権者もコン
    00062  *  トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
    00063  *  問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
    00064  *  他の)不法行為であるかを問わず、仮にそのような損害が発生する可
    00065  *  能性を知らされていたとしても、本ソフトウェアの使用によって発生
    00066  *  した(代替品または代用サービスの調達、使用の喪失、データの喪失、
    00067  *  利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
    00068  *  間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
    00069  *  ついて、一切責任を負わないものとします。
    00070  *
    00071  ****************************************************************************/
    00072 #ifndef __FK_TEXTURE_HEADER__
    00073 #define __FK_TEXTURE_HEADER__
    00074
    00075 #include <FK/Shape.h>
    00076 #include <FK/Image.h>
    00077 #include <FK/IndexFace.h>
    00078
    00079 class fk_MQOParser;
    00080 class fk_IndexFaceSet;
    00081
    00083 enum fk_TexMode {
    00084     FK_TEX_MODULATE,
    00085     FK_TEX_REPLACE,
    00086     FK_TEX_DECAL
    00087 };
    00088
    00090 enum fk_TexRendMode {
    00091     FK_TEX_REND_NORMAL,
    00092     FK_TEX_REND_SMOOTH
    00093 };
    00094
    00096
    00107 class fk_TexCoord {
    00108
    00109  public:
    00110
    00111     float   x;
    00112     float   y;
    00113
    00115
    00119     fk_TexCoord(double x = 0.0, double y = 0.0);
    00120
    00122     fk_TexCoord(const fk_TexCoord &);
    00123
    00125     fk_TexCoord & operator =(const fk_TexCoord &);
    00126
    00128
    00141     bool    operator ==(const fk_TexCoord &) const;
    00142
    00144
    00150     void    set(double x, double y);
    00151 };
    00152
    00154
    00162 class fk_Texture: public fk_Shape {
    00163     friend class        fk_TextureDraw;
    00164
    00165  private:
    00166     fk_Image            *image;
    00167     fk_Image            localImage;
    00168     fk_TexMode          texMode;
    00169     fk_TexRendMode      texRendMode;
    00170     fk_Palette          localPal;
    00171
    00172     bool                GetInitFlag(void);
    00173     void                SetInitFlag(bool);
    00174     fk_TexID            GetTexID(void);
    00175     void                SetTexID(const fk_TexID);
    00176
    00177     static void         ClearTexState(fk_Image *);
    00178
    00179  protected:
    00180
    00181 #ifndef FK_DOXYGEN_USER_PROCESS
    00182
    00183     void                BaseInit(void);
    00184     bool                IsLocalImage(void);
    00185     void                SetLocalImage(void);
    00186
    00187 #endif
    00188
    00189  public:
    00190
    00191 #ifndef FK_DOXYGEN_USER_PROCESS
    00192
    00193     fk_Texture(fk_Image * = (fk_Image *)NULL);
    00194     virtual ~fk_Texture();
    00195     virtual void            init(void) = 0;
    00196
    00197 #endif
    00198
    00200
    00212     void                    setImage(fk_Image *image);
    00213
    00215
    00220     fk_Image *              getImage(void);
    00221
    00223
    00231     bool                    readBMP(std::string fileName);
    00232
    00234
    00244     bool                    readBMPData(fk_ImType *buf);
    00245
    00247
    00255     bool                    readPNG(std::string fileName);
    00256
    00258
    00268     bool                    readPNGData(fk_ImType *buf);
    00269
    00271
    00279     bool                    readJPG(std::string fileName);
    00280
    00282
    00289     const fk_Dimension *    getImageSize(void);
    00290
    00292
    00304     const fk_Dimension *    getBufferSize(void);
    00305
    00307
    00353     void                    setTextureMode(fk_TexMode mode);
    00354
    00356
    00363     fk_TexMode              getTextureMode(void);
    00364
    00366
    00376     void                    setTexRendMode(fk_TexRendMode mode);
    00377
    00379
    00386     fk_TexRendMode          getTexRendMode(void);
    00387
    00389
    00396     void                    fillColor(const fk_Color &color);
    00397
    00399
    00408     void                    fillColor(int r, int g, int b, int a = 0);
    00409
    00411
    00427     const fk_ImType *       getImageBuf(void);
    00428 };
    00429
    00431
    00450 class fk_RectTexture : public fk_Texture {
    00451
    00452     friend class        fk_TextureDraw;
    00453
    00454  private:
    00455
    00456     fk_TexCoord         texSize;
    00457     bool                repeatFlag;
    00458     fk_TexCoord         repeatParam;
    00459     fk_TexCoord         texCoord[2];
    00460
    00461  public:
    00462
    00464
    00469     fk_RectTexture(fk_Image *image = (fk_Image *)NULL);
    00470
    00472     virtual ~fk_RectTexture();
    00473
    00475
    00478     void                init(void);
    00479
    00481
    00490     bool                setTextureSize(double w, double h);
    00491
    00493
    00498     fk_TexCoord         getTextureSize(void);
    00499
    00501
    00518     void                setRepeatMode(bool mode);
    00519
    00521
    00529     bool                getRepeatMode(void);
    00530
    00532
    00544     void                setRepeatParam(double wNum, double hNum);
    00545
    00547
    00554     fk_TexCoord         getRepeatParam(void);
    00555
    00557
    00569     void                setTextureCoord(double sX, double sY,
    00570                                         double eX, double eY);
    00571
    00573
    00583     void                setTextureCoord(const fk_TexCoord &S,
    00584                                         const fk_TexCoord &E);
    00585
    00587
    00599     fk_TexCoord         getTextureCoord(int ID);
    00600 };
    00601
    00603
    00623 class fk_TriTexture : public fk_Texture {
    00624
    00625     friend class        fk_TextureDraw;
    00626
    00627  private:
    00628     fk_Vector           pos[3];
    00629     fk_TexCoord         texCoord[3];
    00630
    00631     fk_Vector *         getPos(void);
    00632     fk_TexCoord *       getCoord(void);
    00633
    00634  public:
    00635
    00637
    00642     fk_TriTexture(fk_Image *image = (fk_Image *)NULL);
    00643
    00645     virtual ~fk_TriTexture();
    00646
    00648
    00651     void                init(void);
    00652
    00654
    00673     bool                setTextureCoord(int ID, double x, double y);
    00674
    00676
    00691     bool                setTextureCoord(int ID, fk_TexCoord coord);
    00692
    00694
    00703     fk_TexCoord         getTextureCoord(int ID);
    00704
    00706
    00720     bool                setVertexPos(int ID, double x, double y, double z);
    00721
    00723
    00735     bool                setVertexPos(int ID, fk_Vector pos);
    00736
    00738
    00747     fk_Vector           getVertexPos(int ID);
    00748 };
    00749
    00751
    00780 class fk_MeshTexture : public fk_Texture {
    00781
    00782     friend class            fk_TextureDraw;
    00783
    00784  private:
    00785
    00786     int                         triNum;
    00787     std::vector<fk_Vector>      posArray;
    00788     std::vector<fk_TexCoord>    coordArray;
    00789
    00790     std::vector<fk_Vector> *    getPos(void);
    00791     std::vector<fk_TexCoord> *  getCoord(void);
    00792
    00793  public:
    00794
    00796
    00801     fk_MeshTexture(fk_Image *image = (fk_Image *)NULL);
    00802
    00804     virtual ~fk_MeshTexture();
    00805
    00807
    00810     void            init(void);
    00811
    00813
    00821     bool            setTriNum(int num);
    00822
    00824
    00831     int             getTriNum(void);
    00832
    00834
    00857     bool            setTextureCoord(int tID, int vID,
    00858                                     double x, double y);
    00859
    00861
    00880     bool            setTextureCoord(int tID, int vID, fk_TexCoord coord);
    00881
    00883
    00898     bool            setTriTextureCoord(int tID,
    00899                                        std::vector<fk_TexCoord> *array);
    00900
    00902
    00917     bool            setTriTextureCoord(int tID,
    00918                                        fk_TexCoord *array);
    00919
    00921
    00935     fk_TexCoord     getTextureCoord(int tID, int vID);
    00936
    00938
    00956     bool            setVertexPos(int tID, int vID,
    00957                                  double x, double y, double z);
    00958
    00960
    00976     bool            setVertexPos(int tID, int vID, fk_Vector pos);
    00977
    00979
    00993     bool            setTriPos(int tID, std::vector<fk_Vector> *array);
    00994
    00996
    01010     bool            setTriPos(int tID, fk_Vector *array);
    01011
    01013
    01027     fk_Vector       getVertexPos(int tID, int vID);
    01028
    01030
    01036     void            putIndexFaceSet(fk_IndexFaceSet *ifs);
    01037
    01039
    01065     bool            readMQOFile(std::string fileName,
    01066                                 std::string objName,
    01067                                 bool contFlg = true);
    01068 };
    01069
    01070 #endif  // !__FK_TEXTURE_HEADER__

全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義