TerrainNodeResource(ptr<ResourceManager> manager, const string &name, ptr<ResourceDescriptor> desc, const TiXmlElement *e = NULL) : ResourceTemplate<0, TerrainNode>(manager, name, desc) { e = e == NULL ? desc->descriptor : e; float size; float zmin; float zmax; ptr<Deformation> deform; float splitFactor; int maxLevel; checkParameters(desc, e, "name,size,zmin,zmax,deform,radius,splitFactor,horizonCulling,maxLevel,"); getFloatParameter(desc, e, "size", &size); getFloatParameter(desc, e, "zmin", &zmin); getFloatParameter(desc, e, "zmax", &zmax); if (e->Attribute("deform") != NULL && strcmp(e->Attribute("deform"), "sphere") == 0) { deform = new SphericalDeformation(size); } if (e->Attribute("deform") != NULL && strcmp(e->Attribute("deform"), "cylinder") == 0) { float radius; getFloatParameter(desc, e, "radius", &radius); deform = new CylindricalDeformation(radius); } if (deform == NULL) { deform = new Deformation(); } getFloatParameter(desc, e, "splitFactor", &splitFactor); getIntParameter(desc, e, "maxLevel", &maxLevel); ptr<TerrainQuad> root = new TerrainQuad(NULL, NULL, 0, 0, -size, -size, 2.0 * size, zmin, zmax); init(deform, root, splitFactor, maxLevel); if (e->Attribute("horizonCulling") != NULL && strcmp(e->Attribute("horizonCulling"), "false") == 0) { horizonCulling = false; } }
HydroFlowProducerResource(ptr<ResourceManager> manager, const string &name, ptr<ResourceDescriptor> desc, const TiXmlElement *e = NULL) : ResourceTemplate<30, HydroFlowProducer>(manager, name, desc) { e = e == NULL ? desc->descriptor : e; ptr<TileCache> cache; ptr<GraphProducer> graphs; int displayTileSize = 192; float slip = 1.0f; float searchRadiusFactor = 1.0f; float potentialDelta = 0.01f; int minLevel = 0; checkParameters(desc, e, "name,cache,graphs,displayTileSize,slip,searchRadiusFactor, potentialDelta,minLevel,"); cache = manager->loadResource(getParameter(desc, e, "cache")).cast<TileCache>(); graphs = manager->loadResource(getParameter(desc, e, "graphs")).cast<GraphProducer>(); if (e->Attribute("displayTileSize") != NULL) { getIntParameter(desc, e, "displayTileSize", &displayTileSize); } if (e->Attribute("slip") != NULL) { getFloatParameter(desc, e, "slip", &slip); } if (e->Attribute("searchRadiusFactor") != NULL) { getFloatParameter(desc, e, "searchRadiusFactor", &searchRadiusFactor); } if (e->Attribute("potentialDelta") != NULL) { getFloatParameter(desc, e, "potentialDelta", &potentialDelta); } if (e->Attribute("minLevel") != NULL) { getIntParameter(desc, e, "minLevel", &minLevel); } init(graphs, cache, displayTileSize, slip, searchRadiusFactor, potentialDelta, minLevel); }
LifeCycleParticleLayerResource(ptr<ResourceManager> manager, const string &name, ptr<ResourceDescriptor> desc, const TiXmlElement *e = NULL) : ResourceTemplate<50, LifeCycleParticleLayer>(manager, name, desc) { e = e == NULL ? desc->descriptor : e; checkParameters(desc, e, "name,fadeInDelay,fadeOutDelay,activeDelay,unit,"); float fadeInDelay = 5.0f; float fadeOutDelay = 5.0f; float activeDelay = 30.0f; float unit = 1000000.0f; // delays are converted into seconds. if (e->Attribute("unit") != NULL) { if (strcmp(e->Attribute("unit"), "s") == 0) { unit = 1000000.0f; } else if (strcmp(e->Attribute("unit"), "ms") == 0) { unit = 1000.0f; } else if (strcmp(e->Attribute("unit"), "us") == 0) { unit = 10.f; } } //delays are taken in seconds getFloatParameter(desc, e, "fadeInDelay", &fadeInDelay); getFloatParameter(desc, e, "fadeOutDelay", &fadeOutDelay); getFloatParameter(desc, e, "activeDelay", &activeDelay); init(fadeInDelay * unit, activeDelay * unit, fadeOutDelay * unit); }
DrawOceanTaskResource(ptr<ResourceManager> manager, const string &name, ptr<ResourceDescriptor> desc, const TiXmlElement *e = NULL) : ResourceTemplate<40, DrawOceanTask>(manager, name, desc) { e = e == NULL ? desc->descriptor : e; checkParameters(desc, e, "name,radius,zmin,brdfShader,"); float radius; float zmin; ptr<Module> brdfShader; if (e->Attribute("brdfShader") != NULL) { brdfShader = manager->loadResource(getParameter(desc, e, "brdfShader")).cast<Module>(); } getFloatParameter(desc, e, "radius", &radius); getFloatParameter(desc, e, "zmin", &zmin); init(radius, zmin, brdfShader); }
RandomLfoPatch() : maxrate(getSampleRate()*2), minrate(getSampleRate()/2000) { // noise = WhiteNoiseOscillator::create(); noise = new WhiteNoiseOscillator(); range = getFloatParameter("Range", 0.01, 1.0, 1.0); rate = getIntParameter("Rate", 0, maxrate, 0); scale = getIntParameter("Scale", 0, 5, 0); offset = getIntParameter("Root", -11, 12, 0); target = last = 0.0f; }
WorldParticleLayerResource(ptr<ResourceManager> manager, const string &name, ptr<ResourceDescriptor> desc, const TiXmlElement *e = NULL) : ResourceTemplate<50, WorldParticleLayer>(manager, name, desc) { e = e == NULL ? desc->descriptor : e; checkParameters(desc, e, "name,speedFactor,"); float speedFactor = 1.0f; if (e->Attribute("speedFactor") != NULL) { getFloatParameter(desc, e, "speedFactor", &speedFactor); } init(speedFactor); }
UpdateRiversTaskResource(ptr<ResourceManager> manager, const string &name, ptr<ResourceDescriptor> desc, const TiXmlElement *e = NULL) : ResourceTemplate<50, UpdateRiversTask>(manager, name, desc) { e = e == NULL ? desc->descriptor : e; float timeStep = 1.0f; checkParameters(desc, e, "name,particles,timeStep,"); if (e->Attribute("timeStep") != NULL) { getFloatParameter(desc, e, "timeStep", &timeStep); } ptr<ParticleProducer> particles = manager->loadResource(getParameter(desc, e, "particles")).cast<ParticleProducer>(); assert(particles != NULL); init(particles, timeStep); }
///apply filter effect to PixelBuffer* buffer passed into this function void FThreshold::applyFilter(PixelBuffer * imageBuffer){ int width = imageBuffer -> getWidth(); int height = imageBuffer -> getHeight(); float threshold = getFloatParameter(); for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ ColorData currPixel = imageBuffer -> getPixel(i, j); // if the grayscale is larger than parameter, then set pixel as white // otherwise, set current pixel as black int newRed = currPixel.getRed() > threshold ? 1.0: 0.0; int newBlue = currPixel.getBlue() > threshold ? 1.0 : 0.0; int newGreen = currPixel.getGreen() > threshold ? 1.0 : 0.0; imageBuffer -> setPixel(i, j, ColorData(newRed, newGreen, newBlue)); } } }
///apply filter effect to the PixelBuffer* buffer passed into this function void FBlur::applyFilter(PixelBuffer* imageBuffer){ // if kernel is already initialized, do not need initialize it again. kernel = buildKernel(std::round(getFloatParameter())); // printKernel(); if(getName() == "FEdgeDetection"){ imageBuffer -> convertToLuminance(); } int width = imageBuffer -> getWidth(); int height = imageBuffer -> getHeight(); //create a new pixel buffer for storing the convolution result. PixelBuffer* newImageBuffer = new PixelBuffer(width, height, imageBuffer -> getBackgroundColor()); for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ float newRed = 0; float newGreen = 0; float newBlue = 0; for(size_t filterI = 0; filterI < kernel.size(); filterI++){ for(size_t filterJ = 0; filterJ < kernel[filterI].size(); filterJ++){ //The location imageI and imageJ is calculated so that //for the center element of the filter it'll be i, j int imageI = (i - kernel.size()/2 + filterI + width) % width; int imageJ = (j - kernel[filterI].size()/2 + filterJ + height) % height; ColorData currPixel = imageBuffer -> getPixel(imageI, imageJ); newRed += currPixel.getRed() * kernel[filterI][filterJ]; newGreen += currPixel.getGreen()*kernel[filterI][filterJ]; newBlue += currPixel.getBlue()*kernel[filterI][filterJ]; } } ColorData newPixel = ColorData(newRed, newGreen, newBlue); newPixel = newPixel.clampedColor(); newImageBuffer -> setPixel(i, j, newPixel); } } newImageBuffer -> copyPixelBuffer(newImageBuffer, imageBuffer); delete newImageBuffer; }