CrystalSpace

Public API Reference

Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

cstool/prsky.h

00001 /*
00002     Copyright (C) 2001 by W.C.A. Wijngaards
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public
00015     License along with this library; if not, write to the Free
00016     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 */
00018 
00019 #ifndef __CS_PROCSKYTEX_H__
00020 #define __CS_PROCSKYTEX_H__
00021 
00022 #include "csgeom/math3d.h"
00023 #include "csgfx/rgbpixel.h"
00024 #include "csutil/cscolor.h"
00025 #include "cstool/proctex.h"
00026 
00027 class csProcSky;
00028 
00032 class csProcSkyTexture : public csProcTexture
00033 {
00035   csProcSky *sky;
00037   csProcSkyTexture *next;
00038 
00040   csVector3 txtorig, txtu, txtv;
00042   csVector3 *isect;
00044   bool forcerender;
00045 
00046 public:
00048   csProcSkyTexture(csProcSky *par);
00050   virtual ~csProcSkyTexture();
00051 
00052   void SetNextSky(csProcSkyTexture *n) {next = n;}
00053   csProcSkyTexture *GetNextSky() const {return next;}
00054 
00055   virtual bool PrepareAnim ();
00056 
00058   virtual void Animate (csTicks current_time);
00059 
00061   int GetWidth() const {return mat_w;}
00063   int GetHeight() const {return mat_h;}
00065   void GetTextureSpace(csVector3& orig, csVector3& u, csVector3& v) const
00066   { orig = txtorig; u = txtu; v = txtv; }
00068   void SetIntersect(csVector3 *icache) {isect = icache;}
00070   csVector3 *GetIntersect() const {return isect;}
00071 
00073   void ForceRerender() {forcerender = true;}
00075   bool MustRender() const {return forcerender;}
00077   void UnsetForceRender() {forcerender = false;}
00079   bool AnimPrepared () {return anim_prepared;}
00089   void SetTextureSpace(const csVector3& tex_orig, const csVector3& total_u,
00090     const csVector3& total_v) {txtorig=tex_orig; txtu=total_u; txtv=total_v;}
00091 };
00092 
00093 
00098 class csProcSky
00099 {
00101   csProcSkyTexture *firstsky;
00102 
00104   float radius;
00106   csVector3 center;
00108   csVector3 cam;
00110   csVector3 sunpos;
00112   csColor suncolor;
00114   csRGBcolor maxhaze;
00115 
00117   int nr_octaves;
00119   int octsize;
00121   uint8 *octaves;
00123   uint8** enlarged;
00124 
00125 
00127   bool animated;
00129   int *periods;
00131   int *curposition;
00136   uint8 *startoctaves, *endoctaves;
00138   csTicks old_time;
00140   csVector2 windpos;
00142   csVector2 winddir;
00143 
00145   void Initialize();
00147   void InitOctave(uint8 *octs, int nr);
00149   void SmoothOctave(uint8 *octs, int nr, int smoothpower);
00151   void Enlarge(uint8 *dest, uint8 *src, int factor, int rshift);
00153   void Combine(uint8 *dest, uint8 *start, uint8 *end, int pos, int max, int nr);
00155   void AnimOctave(int nr, int elapsed);
00157   uint8& GetOctave(uint8 *octaves, int oct, int x, int y)
00158   { return octaves [ oct*octsize*octsize + y*octsize + x ]; }
00159   void SetOctave(uint8 *octaves, int oct, int x, int y, uint8 val)
00160   { octaves[ oct*octsize*octsize + y*octsize + x ] = val; }
00162   void CopyOctave(uint8 *srcocts, int srcnr, uint8 *destocts, int destnr);
00163 
00165   bool SphereIntersect(const csVector3& point, csVector3& isect);
00167   csRGBcolor GetSkyBlue(const csVector3& spot, float& haze, float sundist,
00168     bool& below);
00170   uint8 GetCloudVal(int x, int y);
00172   float GetSundist(const csVector3& spot);
00173 
00174 public:
00175   csProcSky();
00176   ~csProcSky();
00177 
00179   void DrawToTexture (csProcSkyTexture *skytex, csTicks current_time,
00180         iObjectRegistry* object_reg);
00181 
00183   void MakeIntersectCache(csProcSkyTexture *skytex);
00184 
00193   void SetAnimated (iObjectRegistry* object_reg,
00194         bool anim=true, csTicks current_time=0);
00196   bool GetAnimated() const {return animated;}
00198   csProcSkyTexture *GetFirstSky() const {return firstsky;}
00200   void SetFirstSky(csProcSkyTexture *s) {firstsky = s;}
00201 };
00202 
00203 #endif // __CS_PROCSKYTEX_H__

Generated for Crystal Space by doxygen 1.2.18