osgUtil.PerlinNoise是基于Perlin噪声算法的一个osgUtil工具类,可以用于生成可以用于地形、海浪、云彩等不同应用的复杂纹理。
PerlinNoise(unsigned int numOctaves=6, double persistence=0.5, double frequency=1.0, double amplitude=1.0, unsigned int randomSeed=0)
double getCellValue(double x, double y, double z);
获取Perlin噪声算法在(x, y, z)处的噪声值。其中,x、y、z的值必须在[0, 1]范围内。
osg::Image* createImage(unsigned int width, unsigned int height, unsigned int depth, double xoffset=0.0, double yoffset=0.0, double zoffset=0.0);
根据Perlin噪声算法创建一个图像对象。其中,width、height、depth指定了生成噪声的空间尺寸,xoffset、yoffset、zoffset用于设置生成噪声的空间偏移量。生成的噪声图像保存在osg::Image指针中。
osg::ref_ptr<osgUtil::PerlinNoise> noise = new osgUtil::PerlinNoise(8, 0.9, 1.0/32.0, 0.8);
osg::ref_ptr<osg::Image> image = noise->createImage(512, 512, 1);
osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D(image);
texture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
texture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
该示例中创建了一个8层的Perlin噪声,并生成了512x512大小的噪声图像,并将其应用到了一个纹理上。该纹理采用了REPEAT的方式进行纹理坐标的重复,可以使纹理在多边形表面上重复显示。