Ejemplo n.º 1
0
void Demo::create_arcball()
{
    auto blinn_phong_program = programs.create(BLINNPHONG_VS, BLINNPHONG_FS);
    auto shaded_pass = std::make_shared<gst::ShadedPass>(blinn_phong_program);
    shaded_pass->set_cull_face(gst::CullFace::BACK);
    shaded_pass->set_depth_test(true);

    auto material = gst::Material::create_struct("material");
    material.get_uniform("ambient") = glm::vec3(1.2f);
    material.get_uniform("diffuse") = glm::vec3(0.8f);
    material.get_uniform("specular") = glm::vec3(1.0f);
    material.get_uniform("emission") = glm::vec3(0.0f);
    material.get_uniform("shininess") = 21.0f;

    gst::MeshFactory mesh_factory(logger);
    auto suzanne = std::make_shared<gst::GroupNode>();
    for (auto mesh : mesh_factory.create_from_file(SUZANNE_OBJ)) {
        auto model = gst::Model(mesh, material, shaded_pass);
        auto model_node = std::make_shared<gst::ModelNode>(model);
        suzanne->add(model_node);
    }
    scene.add(suzanne);

    arcball = Arcball(suzanne);
    arcball.set_allow_constraints(true);

    arcball_helper = ArcballHelper::create(programs);
    arcball_helper.set_show_result(false);
}
Ejemplo n.º 2
0
	/// create subdivided mesh
	umdraw::UMMeshPtr create_subdivided_mesh(unsigned int level)
	{
		if (!mesh_) return umdraw::UMMeshPtr();
		if (level == 0) return umdraw::UMMeshPtr();

		// find from cache
		if (divided_mesh_)
		{
			if (umdraw::UMMeshPtr result_mesh = create_result_mesh(divided_mesh_, level))
			{
				return result_mesh;
			}
		}

		// initialize base mesh
		if (!base_mesh_)
		{
			if (!init_base_mesh())
			{
				return umdraw::UMMeshPtr();
			}
		}
		
		// get divided mesh
		const int max_level = level;
		OpenSubdiv::FarMeshFactory<UMSubdivVertex> mesh_factory(&(*base_mesh_), max_level);
		divided_mesh_ = mesh_factory.Create();
		if (divided_mesh_)
		{
			if (umdraw::UMMeshPtr result_mesh = create_result_mesh(divided_mesh_, level))
			{
				return result_mesh;
			}
		}
		return umdraw::UMMeshPtr();
	}