00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef VRS_OPENGL_TILEABLENOISETEXTUREGL_H
00024 #define VRS_OPENGL_TILEABLENOISETEXTUREGL_H
00025
00026 #include <vrs/config.h>
00027 #include <vrs/vector.h>
00028 #include <vrs/opengl/imagetexture1dgl.h>
00029 #include <vrs/opengl/imagetexture2dgl.h>
00030 #include <vrs/opengl/imagetexture3dgl.h>
00031 #include <vrs/image/image.h>
00032 #include <string>
00033
00034 namespace VRS {
00035
00056 class VRS_CORE_API TileableNoiseTexture1DGL : public ImageTexture1DGL {
00057 public:
00059 TileableNoiseTexture1DGL(
00060 unsigned int size,
00061 double frequency = 1.0,
00062 double overlap = 0.5,
00063 const Vector& offset = Vector::origin,
00064 Image::LayerSequence layerSequence = Image::A,
00065 int dataType = Image::U8,
00066 TextureGL::WrapMode wrap = TextureGL::REPEAT,
00067 TextureGL::FilterMode minFilter = TextureGL::TRILINEAR,
00068 TextureGL::FilterMode magFilter = TextureGL::LINEAR
00069 );
00070
00072 static SO<Image> createTileableNoise1D(
00073 unsigned int size = 128,
00074 double frequency = 1.0,
00075 double overlap = 0.5,
00076 const Vector& offset = Vector::origin,
00077 Image::LayerSequence layerSequence = Image::A,
00078 int dataType = Image::U8
00079 );
00080
00081 VRS_TYPEINFO(TileableNoiseTexture1DGL, ImageTexture1DGL);
00082 VRS_SERIALIZABLE(TileableNoiseTexture1DGL);
00083
00084 protected:
00085
00086 TileableNoiseTexture1DGL();
00087 };
00088
00089 class VRS_CORE_API TileableNoiseTexture2DGL : public ImageTexture2DGL {
00090 public:
00092 TileableNoiseTexture2DGL(
00093 unsigned int sizeS, unsigned int sizeT,
00094 double frequencyS = 1.0, double frequencyT = 1.0,
00095 double overlapS = 0.5, double overlapT = 0.5,
00096 const Vector& offset = Vector::origin,
00097 Image::LayerSequence layerSequence = Image::A,
00098 int dataType = Image::U8,
00099 TextureGL::WrapMode wrapS = TextureGL::REPEAT,
00100 TextureGL::WrapMode wrapT = TextureGL::REPEAT,
00101 TextureGL::FilterMode minFilter = TextureGL::TRILINEAR,
00102 TextureGL::FilterMode magFilter = TextureGL::LINEAR,
00103 GLfloat anisotropic = 1.0
00104 );
00105
00107 static SO<Image> createTileableNoise2D(
00108 unsigned int sizeS = 128, unsigned int sizeT = 128,
00109 double frequencyS = 1.0, double frequencyT = 1.0,
00110 double overlapS = 0.5, double overlapT = 0.5,
00111 const Vector& offset = Vector::origin,
00112 Image::LayerSequence layerSequence = Image::A,
00113 int dataType = Image::U8
00114 );
00115
00116 VRS_TYPEINFO(TileableNoiseTexture2DGL, ImageTexture2DGL);
00117 VRS_SERIALIZABLE(TileableNoiseTexture2DGL);
00118
00119 protected:
00120
00121 TileableNoiseTexture2DGL();
00122 };
00123
00124 class VRS_CORE_API TileableNoiseTexture3DGL : public ImageTexture3DGL {
00125 public:
00134
00138 TileableNoiseTexture3DGL(
00139 unsigned int sizeS, unsigned int sizeT, unsigned int sizeR,
00140 double frequencyS = 1.0, double frequencyT = 1.0, double frequencyR = 1.0,
00141 double overlapS = 0.5, double overlapT = 0.5, double overlapR = 0.5,
00142 const Vector& offset = Vector::origin,
00143 Image::LayerSequence layerSequence = Image::A,
00144 int dataType = Image::U8,
00145 TextureGL::WrapMode wrapS = TextureGL::REPEAT,
00146 TextureGL::WrapMode wrapT = TextureGL::REPEAT,
00147 TextureGL::WrapMode wrapR = TextureGL::REPEAT,
00148 TextureGL::FilterMode minFilter = TextureGL::TRILINEAR,
00149 TextureGL::FilterMode magFilter = TextureGL::LINEAR,
00150 GLfloat anisotropic = 1.0,
00151 const std::string& filename = ""
00152 );
00153
00155 TileableNoiseTexture3DGL(const std::string& filename);
00156
00158 TileableNoiseTexture3DGL(const SO<Iterator<SO<Image> > >& noiseImages);
00159
00163 static SO<Iterator<SO<Image> > > createTileableNoise3D(
00164 unsigned int sizeS = 128, unsigned int sizeT = 128, unsigned int sizeR = 128,
00165 double frequencyS = 1.0, double frequencyT = 1.0, double frequencyR = 1.0,
00166 double overlapS = 0.5, double overlapT = 0.5, double overlapR = 0.5,
00167 const Vector& offset = Vector::origin,
00168 Image::LayerSequence layerSequence = Image::A,
00169 int dataType = Image::U8,
00170 const std::string& filename = ""
00171 );
00172
00174 static SO<Iterator<SO<Image> > > createTileableNoise3D(const std::string& filename);
00175
00177 static void writeNoise(const std::string& pathToFile, SO<Iterator<VRS::SO<VRS::Image> > > images);
00178
00179 VRS_TYPEINFO(TileableNoiseTexture3DGL, ImageTexture3DGL);
00180 VRS_SERIALIZABLE(TileableNoiseTexture3DGL);
00181
00182 protected:
00183
00184 TileableNoiseTexture3DGL();
00185
00186 private:
00187 static SO<Iterator<VRS::SO<VRS::Image> > > readNoise(const std::string& target);
00188 };
00189
00190 }
00191
00192 #endif // VRS_OPENGL_TILEABLENOISETEXTUREGL_H
00193