00001 #ifndef GREENSPACEPAINTER_H
00002 #define GREENSPACEPAINTER_H
00003
00004 #include <vrs/environment/config.h>
00005 #include <vrs/shapepainter.h>
00006 #include <vrs/container/dictionary.h>
00007
00008 namespace VRS {
00009 class Engine;
00010 class Shape;
00011 class Engine;
00012 class Image;
00013 class MonoAttribute;
00014 class Facet;
00015 class PolygonSet;
00016 class ImageTexture2DGL;
00017 template<typename T> class Array;
00018 }
00019
00020 namespace EnvironmentRenderer {
00021
00022 class GreenSpace;
00023
00025 class VRS_ENV_API GreenSpacePainter : public VRS::ShapePainter {
00026 public:
00027
00029 virtual VRS::ID target() const;
00030
00032 virtual bool render(VRS::Engine*, const VRS::Shape*);
00033
00034 static VRS::SO<VRS::ImageTexture2DGL> createTextureAtlas(VRS::SO<VRS::Iterator<VRS::SO<VRS::PolygonSet> > > tussocks, VRS::SO<VRS::Iterator<VRS::SO<VRS::Image> > > tussockTextures);
00035 static VRS::SO<VRS::PolygonSet> createTussock(const VRS::Vector& position, const VRS::Vector& normal, unsigned int fans, double length, double angle, unsigned int lamellas, double aspectRatio, double topPadding);
00036
00037 VRS_TYPEINFO(GreenSpacePainter, VRS::ShapePainter);
00038
00039 protected:
00040 static VRS::SO<VRS::PolygonSet> createFan(double length, double angle, unsigned int lamellas, double aspectRatio, double topPadding);
00041
00042 struct GreenSpaceData
00043 {
00044 VRS::SO<VRS::MonoAttribute> atlasTexture;
00045 VRS::SO<VRS::MonoAttribute> tussockGeometry;
00046 };
00047
00048 void setSurface(GreenSpaceData &data, VRS::SO<GreenSpace> gs);
00049
00050 void createGrass(GreenSpaceData &data,
00051 VRS::SO<GreenSpace> gs,
00052 VRS::SO<VRS::Iterator<VRS::SO<VRS::Facet> > > triangles);
00053
00054
00055 VRS::SO<VRS::NonPersistentDictionary<GreenSpace*, GreenSpaceData> > m_data;
00056
00057
00058
00059 VRS::SO<VRS::Callback1<VRS::SharedObj*> > m_destructionCallback;
00060 void removeFromPainter(VRS::SharedObj* s);
00061
00062 };
00063
00064 }
00065
00066 #endif // GREENSPACEPAINTER_H
00067