void initialise() { glClearColor(0.0f, 1.0f, 1.0f, 1.0f); glm::mat4 projection = glm::perspective(10.0f, 800.0f/600.0f, 0.1f, 10000.0f); glMatrixMode(GL_PROJECTION); glLoadMatrixf(glm::value_ptr(projection)); glMatrixMode(GL_MODELVIEW); glEnable(GL_DEPTH_TEST); glEnable(GL_VERTEX_ARRAY); //geometry* geom = createBox();//call to create box //geometry* geom = createPyramid(); //geometry* geom = createTetrahedron(); //geometry* geom = createDisk(200); //geometry* geom = createCylinder(5, 10); //geometry* geom = createSphere(20, 20); //geometry* geom = createTorus(5.0f, 10, 30); //geometry* geom = createPlane(20, 20); geometry* geom = createSierpinski(5); cube.geometry = geom; cube.colour = glm::vec3(1.0f, 0.0f, 0.0f); cube.transform.position = glm::vec3(0.0f, 0.5f, 0.0f); }
void readGeometry(scene_data* scene, const boost::property_tree::ptree& pt) { boost::property_tree::ptree::const_iterator iter = pt.begin(); for (; iter != pt.end(); ++iter) { std::string name = iter->first; geometry* geom; if (name == "cube") geom = createBox(); else if (name == "tetrahedron") geom = createTetrahedron(); else if (name == "pyramid") geom = createPyramid(); else if (name == "disk") { int slices = iter->second.get_child("slices").get_value<int>(); geom = createDisk(slices); } else if (name == "cylinder") { int slices = iter->second.get_child("slices").get_value<int>(); int stacks = iter->second.get_child("stacks").get_value<int>(); geom = createCylinder(stacks, slices); } else if (name == "sphere") { int slices = iter->second.get_child("slices").get_value<int>(); int stacks = iter->second.get_child("stacks").get_value<int>(); geom = createSphere(stacks, slices); } else if (name == "torus") { float radius = iter->second.get_child("radius").get_value<float>(); int slices = iter->second.get_child("slices").get_value<int>(); int stacks = iter->second.get_child("stacks").get_value<int>(); geom = createTorus(radius, stacks, slices); } else if (name == "plane") { int width = iter->second.get_child("width").get_value<int>(); int depth = iter->second.get_child("depth").get_value<int>(); geom = createPlane(width, depth); } else if (name == "sierpinski") { int divisions = iter->second.get_child("divisions").get_value<int>(); geom = createSierpinski(divisions); } else { std::cerr << "Error - Geometry type not recognised: " << name << std::endl; exit(EXIT_FAILURE); } scene->geometry[name] = geom; } }