static NodePtr makePerturbedUniform (UInt16 numSubdiv, Real32 radius, Real32 rate = 0.1f) { static Real32 factor = 1.1f; NodePtr sphereNode = makeSphere(numSubdiv, radius); GeometryPtr sphere = GeometryPtr::dcast(sphereNode->getCore()); GeoPositionsPtr points = sphere->getPositions(); beginEditCP(points); for (UInt32 i=0; i<points->size(); ++i) { Real32 random = (rand()/Real32(RAND_MAX)); if (random <= rate) { points->setValue(factor*points->getValue(i), i); } } endEditCP(points); NodePtr node = Node::create(); beginEditCP(node); node->setCore(Transform::create()); node->addChild(sphereNode); endEditCP(node); return node; }
static NodePtr makePerturbedAll (UInt16 numSubdiv, Real32 radius, Real32 stdDeviation = 0.1f) { NodePtr sphereNode = makeSphere(numSubdiv, radius); GeometryPtr sphere = GeometryPtr::dcast(sphereNode->getCore()); GeoPositionsPtr points = sphere->getPositions(); beginEditCP(points); for (UInt32 i=0; i<points->size(); ++i) { Real32 factor = 1.0f + stdDeviation * (rand()/Real32(RAND_MAX) - 0.5f); points->setValue(factor*points->getValue(i), i); } endEditCP(points); NodePtr node = Node::create(); beginEditCP(node); node->setCore(Transform::create()); node->addChild(sphereNode); endEditCP(node); return node; }