void ShapesWidget::initShapes() { cleanupShapes(); const unsigned numberOfShapes = 5; unsigned i = 1; auto toSelectPtr = createRandomShape(); toSelect_ = toSelectPtr.get(); while (i < numberOfShapes) { std::unique_ptr<Shape> s = createRandomShape(); if (!sameShapeAndColor(s.get(), toSelect_)) { shapes_.push_back(std::move(s)); i++; } } shapes_.insert(shapes_.begin() + randomInt((int)shapes_.size()), std::move(toSelectPtr)); }
Handle<Device::RTScene> createRandomScene(Device *device, size_t numLights, size_t numObjects, size_t numTriangles) { std::vector<Device::RTPrimitive> prims; //for (size_t i=0; i < numLights; i++) prims.push_back(device->rtNewLightPrimitive(createRandomLight(device), NULL, copyToArray(AffineSpace3f(one)))); for (size_t i=0; i < numObjects; i++) { size_t s = numTriangles ? random<int>() % numTriangles : 0; prims.push_back(device->rtNewShapePrimitive(createRandomShape(device, s), createRandomMaterial(device), copyToArray(AffineSpace3f(one)))); } Handle<Device::RTScene> scene = device->rtNewScene("default"); g_device->rtSetString(scene,"accel",g_accel.c_str()); g_device->rtSetString(scene,"builder",g_builder.c_str()); g_device->rtSetString(scene,"traverser",g_traverser.c_str()); for (size_t i=0; i<prims.size(); i++) g_device->rtSetPrimitive(scene,i,prims[i]); g_device->rtCommit(scene); for (size_t i=0; i<prims.size(); i++) device->rtDecRef(prims[i]); return scene; }