Example #1
0
void MeshEntry::LoadMesh(FbxMesh * mesh,


                         QVector<quint32> &master_indices,
                         QVector<float> &master_vertices,
                         QVector<float> &master_normals,
                         QVector<float> &master_uvs,
                         QVector<float> &master_tangents,


                         bool load_normals,
                         bool load_uvs,
                         bool load_tangents,



                         qint32 & current_control_point_offset,
                         qint32 & current_polygon_offset)
{




    /**
     *Load vertices and indices of the mesh entry
     */
    LoadIndices(mesh, master_indices, current_polygon_offset, current_control_point_offset);
    LoadVertices(mesh, master_vertices, current_control_point_offset);




    /**
    *Load the entry's layers
    */
    if (load_normals)
        LoadNormals(mesh, master_normals);


    if (load_uvs)
        LoadUVs(mesh, master_uvs);


    if (load_tangents)
        LoadTangents(mesh, master_tangents);



    /**
     *Compute the transform and bounding box and load them
     */
    LoadTransform(mesh);
    LoadBoundingBox(mesh);



}
bool SceneLoader::ProcessMesh(ID3D11Device *ind3dDevice, aiMesh &inMesh , DrawableObject &inObject, std::vector<Vertex> &inVertexList, std::vector<UINT> &inIndexList, unsigned int inMaterialIndex)
{

	int inPrevIndexListSize = inIndexList.size();
	int inPrevVertexListSize = inVertexList.size();

	LoadVertices(inMesh, inVertexList, mSceneBoundingSphere);
	LoadIndices(inMesh, inIndexList);

	inObject.AddPart(inPrevVertexListSize, inPrevIndexListSize, inIndexList.size() - inPrevIndexListSize, inMaterialIndex);

	return true;
}
	void Model::CreateRectangle(Vector2 dimensions, const char* vertexPath, const char* fragmentPath)
	{
		width = dimensions.x;
		height = dimensions.y;

		int halfWidth = width / 2;
		int halfHeight = height / 2;

		Vector3 positions[] =
		{
			Vector3(halfWidth, -halfHeight, 0.0f),
			Vector3(halfWidth, halfHeight, 0.0f),
			Vector3(-halfWidth, halfHeight, 0.0f),
			Vector3(-halfWidth, -halfHeight, 0.0f)
		};

		Vector2 vTexCoords[] =
		{
			Vector2(1.0, 0.0),
			Vector2(1.0, 1.0),
			Vector2(0.0, 1.0),
			Vector2(0.0, 0.0)
		};

		GLubyte vIndices[] =
		{
			0, 1, 2,
			2, 3, 0
		};

		if (!LoadShader(vertexPath, fragmentPath))
		{
			// Log error here
			return;
		}

		glBindAttribLocation(shader.GetProgram(), 0, "vPosition");

		shader.Link();

		// Figure out how to deal with modelviewprojection matrices
		mvpMatrixHandle = glGetUniformLocation(shader.GetProgram(), "MVPMatrix");

		LoadVertices(positions, vTexCoords, arraysize(positions));
		LoadIndices(vIndices, arraysize(vIndices));
		Initialize();
	}
int main(int argc, char *argv[]) {
  QApplication a(argc, argv);
  glutInit(&argc, argv);
  google::InitGoogleLogging(argv[0]);

  namespace fs = boost::filesystem;
  namespace po = boost::program_options;

  const string home_directory = QDir::homePath().toStdString();
  cout << "Home dir: " << home_directory << endl;

  po::options_description desc("Options");
  desc.add_options()
  ("settings_file", po::value<string>()->required(), "Input settings file")
  ("model_file", po::value<string>()->default_value(home_directory + "/Data/Multilinear/blendshape_core.tensor"), "Multilinear model file")
  ("id_prior_file", po::value<string>()->default_value(home_directory + "/Data/Multilinear/blendshape_u_0_aug.tensor"), "Identity prior file")
  ("exp_prior_file", po::value<string>()->default_value(home_directory + "/Data/Multilinear/blendshape_u_1_aug.tensor"), "Expression prior file")
  ("template_mesh_file", po::value<string>()->default_value(home_directory + "/Data/Multilinear/template.obj"), "Template mesh file")
  ("contour_points_file", po::value<string>()->default_value(home_directory + "/Data/Multilinear/contourpoints.txt"), "Contour points file")
  ("landmarks_file", po::value<string>()->default_value(home_directory + "/Data/Multilinear/landmarks_73.txt"), "Landmarks file")
  ("direct_multi_recon", "Use direct multi-recon")
  ("no_selection", "Disable selection")
  ("no_failure_detection", "Disable feature points failure detection")
  ("no_progressive", "Diable progressive reconstruction");

  po::variables_map vm;

  try {
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);
    if(vm.count("help")) {
      cout << desc << endl;
      return 1;
    }

    // nothing to do after successful parsing command line arguments

  } catch(po::error& e) {
    cerr << "Error: " << e.what() << endl;
    cerr << desc << endl;
    return 1;
  }

  const string model_filename(vm["model_file"].as<string>());
  const string id_prior_filename(vm["id_prior_file"].as<string>());
  const string exp_prior_filename(vm["exp_prior_file"].as<string>());
  const string template_mesh_filename(vm["template_mesh_file"].as<string>());
  const string contour_points_filename(vm["contour_points_file"].as<string>());
  const string landmarks_filename(vm["landmarks_file"].as<string>());
  const string settings_filename(vm["settings_file"].as<string>());

  BasicMesh mesh(template_mesh_filename);
  auto landmarks = LoadIndices(landmarks_filename);
  auto contour_indices = LoadContourIndices(contour_points_filename);

  // Create reconstructor and load the common resources
  MultiImageReconstructor<Constraint2D> recon;
  recon.LoadModel(model_filename);
  recon.LoadPriors(id_prior_filename, exp_prior_filename);
  recon.SetMesh(mesh);
  recon.SetContourIndices(contour_indices);
  recon.SetIndices(landmarks);

  recon.SetSelectionState(!vm.count("no_selection"));
  recon.SetFailureDetectionState(!vm.count("no_failure_detection"));
  recon.SetProgressiveReconState(!vm.count("no_progressive"));
  recon.SetDirectMultiRecon(vm.count("direct_multi_recon"));

  // Parse the setting file and load image related resources
  fs::path settings_filepath(settings_filename);

  vector<pair<string, string>> image_points_filenames = ParseSettingsFile(settings_filename);
  for(auto& p : image_points_filenames) {
    fs::path image_filename = settings_filepath.parent_path() / fs::path(p.first);
    fs::path pts_filename = settings_filepath.parent_path() / fs::path(p.second);
    cout << "[" << image_filename << ", " << pts_filename << "]" << endl;

    auto image_points_pair = LoadImageAndPoints(image_filename.string(), pts_filename.string(), false);
    recon.AddImagePointsPair(image_filename.string(), image_points_pair);
  }

  {
    boost::timer::auto_cpu_timer t("Reconstruction finished in %w seconds.\n");
    recon.Reconstruct();
  }

  //return a.exec();
  return 0;
}
Example #5
0
int main()
{
	const int triangleCount = 111;
	const int trianglePoints = 68;
	const Vec2i resolution(169, 167);

	std::string meanShape = "Data/Mean_Shape.txt";
	std::string currentShape = "Data/Current_Shape.txt";
	std::string triangles = "Data/Triangles.txt";
	std::string textureBase = "Data/Texture_Base.txt";
	std::string imageName = "Data/inputImage.png";

	cv::Mat inputImage = cv::imread(imageName, CV_LOAD_IMAGE_GRAYSCALE);
	if(!inputImage.data)
	{
		std::cerr << "Could not open or find the image"  << std::endl;		
		std::exit(EXIT_FAILURE);
	}	

	std::vector<Vec2i> trianglePointsList[triangleCount];
	LoadTextureBase(textureBase, resolution, trianglePointsList);


	// load points rounded to nearest int
	Vec2i* meanPoints = new Vec2i[trianglePoints];	
	LoadShape(meanShape, meanPoints);
	Vec2i* currentPoints = new Vec2i[trianglePoints];	
	LoadShape(currentShape, currentPoints);

	// load points as floats
	Vec2f* meanPointsf = new Vec2f[trianglePoints];	
	LoadShapef(meanShape, meanPointsf);
	Vec2f* currentPointsf = new Vec2f[trianglePoints];	
	LoadShapef(currentShape, currentPointsf);



	Index* indices = new Index[triangleCount];
	LoadIndices(triangles, indices);


	cv::Mat outImage = cv::Mat::zeros(resolution.y, resolution.x, inputImage.type());

	clock_t timeC;
	int loops = 10000;
	timeC = clock();	
	for(int y = 0; y < loops; ++y)
	{
		WarpImage(meanPoints, currentPoints, indices, triangleCount, trianglePointsList, inputImage, outImage);
	}	
	timeC = clock() - timeC;
	std::cout << "WarpImage time to do " << loops << " loops: " << timeC * 1000 / CLOCKS_PER_SEC << " milliseconds." << std::endl;

	cv::Mat outImagef = cv::Mat::zeros(resolution.y, resolution.x, inputImage.type());
	timeC = clock();	
	for(int y = 0; y < loops; ++y)
	{
		WarpImagef(meanPointsf, currentPointsf, indices, triangleCount, trianglePointsList, inputImage, outImagef);
	}	
	timeC = clock() - timeC;
	std::cout << "WarpImagef time to do " << loops << " loops: " << timeC * 1000 / CLOCKS_PER_SEC << " milliseconds." << std::endl;
	

	cv::namedWindow("WarpImage image", CV_WINDOW_AUTOSIZE );
	cv::imshow("WarpImage image", outImage);

	cv::namedWindow("WarpImage imagef", CV_WINDOW_AUTOSIZE );
	cv::imshow("WarpImage imagef", outImagef);	

	cv::waitKey(0);

	delete[] indices;	
	delete[] currentPointsf;
	delete[] meanPointsf;
	delete[] currentPoints;
	delete[] meanPoints;

	return 0;
}