00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GFX_MAP_SLAB_HH
00020 #define OST_GFX_MAP_SLAB_HH
00021
00022
00023
00024
00025
00026 #include <boost/shared_ptr.hpp>
00027 #include <boost/shared_array.hpp>
00028
00029 #include <ost/geom/geom.hh>
00030
00031 #include <ost/img/map.hh>
00032
00033 #include "gfx_object.hh"
00034 #include "glext_include.hh"
00035
00036 namespace ost { namespace gfx {
00037
00038 class MapSlab;
00039 typedef boost::shared_ptr<MapSlab> MapSlabP;
00040
00046 class DLLEXPORT_OST_GFX MapSlab: public GfxObj {
00048 struct PolyListEntry{
00049 PolyListEntry() {}
00050 PolyListEntry(const geom::Vec3& pp, const geom::Vec2& tt): p(pp), t(tt) {}
00051 geom::Vec3 p;
00052 geom::Vec3 t;
00053 };
00054 typedef std::vector<PolyListEntry> PolyList;
00055
00056 public:
00062 MapSlab(const String& name, const img::MapHandle& mh,
00063 const geom::Plane& p);
00064
00065 virtual geom::AlignedCuboid GetBoundingBox(bool use_tf=true) const;
00066
00067 virtual geom::Vec3 GetCenter() const;
00068 virtual void CustomRenderGL(RenderPass pass);
00069
00071 virtual void CustomRenderPov(PovState& pov);
00072
00073 geom::Plane GetPlane() const;
00077 void SetPlane(const geom::Plane& p);
00078
00080
00081
00082 void ColorBy(const Gradient& g, float minv, float maxv);
00084 void ColorBy(const Gradient& g);
00087 void ColorBy(const Color& c1, const Color& c2, float minv, float maxv);
00089 void ColorBy(const Color& c1, const Color& c2);
00091 protected:
00092 virtual void CustomPreRenderGL(bool flag);
00093
00094 void Rebuild();
00095
00096 private:
00097 img::MapHandle mh_;
00098 geom::Plane plane_;
00099 uint usize_;
00100 uint vsize_;
00101 GLuint tex_id_;
00102 boost::shared_array<float> tex_data_;
00103 bool rebuild_;
00104
00105 bool valid_;
00106 geom::Vec3 c0_,c1_,c2_,c3_;
00107 PolyList poly_list_;
00108
00109 float minv_,maxv_;
00110 Gradient grad_;
00111
00112 bool calc_poly();
00113 void rebuild_tex();
00114 void render_slab();
00115 };
00116
00117 }}
00118
00119 #endif