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

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

# FK/Texture.h

説明を見る。

    00001 /****************************************************************************
    00002  *
    00003  *  Copyright (c) 1999-2009, 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-2009, 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  protected:
    00178
    00179 #ifndef FK_DOXYGEN_USER_PROCESS
    00180
    00181     void                BaseInit(void);
    00182
    00183 #endif
    00184
    00185  public:
    00186
    00187 #ifndef FK_DOXYGEN_USER_PROCESS
    00188
    00189     fk_Texture(fk_Image * = (fk_Image *)NULL);
    00190     ~fk_Texture();
    00191     virtual void            init(void) = 0;
    00192
    00193 #endif
    00194
    00196
    00208     void                    setImage(fk_Image *image);
    00209
    00211
    00216     fk_Image *              getImage(void);
    00217
    00219
    00227     bool                    readBMP(std::string fileName);
    00228
    00230
    00240     bool                    readBMPData(fk_ImType *buf);
    00241
    00243
    00251     bool                    readPNG(std::string fileName);
    00252
    00254
    00264     bool                    readPNGData(fk_ImType *buf);
    00265
    00267
    00275     bool                    readJPG(std::string fileName);
    00276
    00278
    00285     const fk_Dimension *    getImageSize(void);
    00286
    00288
    00300     const fk_Dimension *    getBufferSize(void);
    00301
    00303
    00349     void                    setTextureMode(fk_TexMode mode);
    00350
    00352
    00359     fk_TexMode              getTextureMode(void);
    00360
    00362
    00372     void                    setTexRendMode(fk_TexRendMode mode);
    00373
    00375
    00382     fk_TexRendMode          getTexRendMode(void);
    00383
    00385
    00392     void                    fillColor(const fk_Color &color);
    00393
    00395
    00404     void                    fillColor(int r, int g, int b, int a = 0);
    00405
    00407
    00423     const fk_ImType *       getImageBuf(void);
    00424 };
    00425
    00427
    00446 class fk_RectTexture : public fk_Texture {
    00447
    00448     friend class        fk_TextureDraw;
    00449
    00450  private:
    00451
    00452     fk_TexCoord         texSize;
    00453     bool                repeatFlag;
    00454     fk_TexCoord         repeatParam;
    00455     fk_TexCoord         texCoord[2];
    00456
    00457  public:
    00458
    00460
    00465     fk_RectTexture(fk_Image *image = (fk_Image *)NULL);
    00466
    00468     ~fk_RectTexture();
    00469
    00471
    00474     void                init(void);
    00475
    00477
    00486     bool                setTextureSize(double w, double h);
    00487
    00489
    00494     fk_TexCoord         getTextureSize(void);
    00495
    00497
    00514     void                setRepeatMode(bool mode);
    00515
    00517
    00525     bool                getRepeatMode(void);
    00526
    00528
    00540     void                setRepeatParam(double wNum, double hNum);
    00541
    00543
    00550     fk_TexCoord         getRepeatParam(void);
    00551
    00553
    00565     void                setTextureCoord(double sX, double sY,
    00566                                         double eX, double eY);
    00567
    00569
    00579     void                setTextureCoord(const fk_TexCoord &S,
    00580                                         const fk_TexCoord &E);
    00581
    00583
    00595     fk_TexCoord         getTextureCoord(int ID);
    00596 };
    00597
    00599
    00619 class fk_TriTexture : public fk_Texture {
    00620
    00621     friend class        fk_TextureDraw;
    00622
    00623  private:
    00624     fk_Vector           pos[3];
    00625     fk_TexCoord         texCoord[3];
    00626
    00627     fk_Vector *         getPos(void);
    00628     fk_TexCoord *       getCoord(void);
    00629
    00630  public:
    00631
    00633
    00638     fk_TriTexture(fk_Image *image = (fk_Image *)NULL);
    00639
    00641     ~fk_TriTexture();
    00642
    00644
    00647     void                init(void);
    00648
    00650
    00669     bool                setTextureCoord(int ID, double x, double y);
    00670
    00672
    00687     bool                setTextureCoord(int ID, fk_TexCoord coord);
    00688
    00690
    00699     fk_TexCoord         getTextureCoord(int ID);
    00700
    00702
    00716     bool                setVertexPos(int ID, double x, double y, double z);
    00717
    00719
    00731     bool                setVertexPos(int ID, fk_Vector pos);
    00732
    00734
    00743     fk_Vector           getVertexPos(int ID);
    00744 };
    00745
    00747
    00776 class fk_MeshTexture : public fk_Texture {
    00777
    00778     friend class            fk_TextureDraw;
    00779
    00780  private:
    00781
    00782     int                         triNum;
    00783     std::vector<fk_Vector>      posArray;
    00784     std::vector<fk_TexCoord>    coordArray;
    00785
    00786     std::vector<fk_Vector> *    getPos(void);
    00787     std::vector<fk_TexCoord> *  getCoord(void);
    00788
    00789  public:
    00790
    00792
    00797     fk_MeshTexture(fk_Image *image = (fk_Image *)NULL);
    00798
    00800     ~fk_MeshTexture();
    00801
    00803
    00806     void            init(void);
    00807
    00809
    00817     bool            setTriNum(int num);
    00818
    00820
    00827     int             getTriNum(void);
    00828
    00830
    00853     bool            setTextureCoord(int tID, int vID,
    00854                                     double x, double y);
    00855
    00857
    00876     bool            setTextureCoord(int tID, int vID, fk_TexCoord coord);
    00877
    00879
    00894     bool            setTriTextureCoord(int tID,
    00895                                        std::vector<fk_TexCoord> *array);
    00896
    00898
    00913     bool            setTriTextureCoord(int tID,
    00914                                        fk_TexCoord *array);
    00915
    00917
    00931     fk_TexCoord     getTextureCoord(int tID, int vID);
    00932
    00934
    00952     bool            setVertexPos(int tID, int vID,
    00953                                  double x, double y, double z);
    00954
    00956
    00972     bool            setVertexPos(int tID, int vID, fk_Vector pos);
    00973
    00975
    00989     bool            setTriPos(int tID, std::vector<fk_Vector> *array);
    00990
    00992
    01006     bool            setTriPos(int tID, fk_Vector *array);
    01007
    01009
    01023     fk_Vector       getVertexPos(int tID, int vID);
    01024
    01026
    01032     void            putIndexFaceSet(fk_IndexFaceSet *ifs);
    01033
    01035
    01061     bool            readMQOFile(std::string fileName,
    01062                                 std::string objName,
    01063                                 bool contFlg = true);
    01064 };
    01065
    01066 #endif  // !__FK_TEXTURE_HEADER__