zoukankan      html  css  js  c++  java
  • 【OpenMesh】Training:Getting Started with OpenMesh

    内容出自236329 - Digital Geometry Processing, Spring2013 - Announcements上的OpenMesh Assignment感觉比较好,适合刚开始学习的同学。

    练习要求:

    这次的练习主要是写两个函数,calc_valences()和color_coding(),函数主要完成了计算一个Vertex的valence以及根据这个valence给图形上色,其中vertex的valence是保存在customer的property中。

    关键代码:

    写的时候主要在两个地方出现问题,一个是将customer的property保存在mesh_上之后怎么找到PropertyHandle,以及代码的效率有点低,没有充分利用OpenMeshSTL的威力。
    添加Property的时候增加一个Property的名字,再通过名字返回PropertyHandle像这样,然后根据valence的值给Mesh上色。
    mesh_.add_property(Valence,"Valence");

     

    void ValenceViewer::calc_valences()
    {
      // EXERCISE 1.2 /////////////////////////////////////////////////////////////
      // Compute valence of every vertex of "mesh_" and store them in each vertex
      // using for example custom attributes via dynamic customization
      // (hint: use the Mesh::VertexIter iterator)
    
      // Implement something here
    	Mesh::VertexIter v_end=mesh_.vertices_end();
    	//Mesh::Scalar TempValence=0;
    	OpenMesh::VPropHandleT<int> Valence;
    	mesh_.add_property(Valence,"Valence");
    	for (Mesh::VertexIter v_it=mesh_.vertices_begin();v_it!=v_end;++v_it)
    	{
    		mesh_.property(Valence,v_it);
    		for (Mesh::VertexVertexIter vv_it=mesh_.vv_iter(v_it);vv_it;++vv_it)
    		{
    			mesh_.property(Valence,v_it)+=1;
    		}
    		//cout<<mesh_.property(Valence,v_it)<<endl;
    	}
      /////////////////////////////////////////////////////////////////////////////
    }
    
    
    //-----------------------------------------------------------------------------
    
    
    void 
    ValenceViewer::color_coding()
    {
      // EXERCISE 1.3 /////////////////////////////////////////////////////////////
      // Implement a color visualization of your choice that shows the valence of
      // each vertex of "mesh_". 
      // (hint: use Mesh::Color color type)
       // Implement something here
    	Mesh::VertexIter v_end=mesh_.vertices_end();
    	//OpenMesh::VPropHandleT<int> Valence;
    	Mesh::Color Green= Mesh::Color(0,255,0);
    	Mesh::Color Red=Mesh::Color(255,0,0);
    	Mesh::Color Blue=Mesh::Color(0,0,255);
    	int Valence;
    	OpenMesh::VPropHandleT<int> vPH;
    	for (Mesh::VertexIter v_it=mesh_.vertices_begin();v_it!=v_end;++v_it)
    	{
    		mesh_.get_property_handle(vPH,"Valence");
    		Valence=mesh_.property(vPH,v_it.handle());
    		if (Valence>=4&&Valence<6)
    		{
    			mesh_.set_color(v_it.handle(),Blue);
    		}
    		else if (Valence>=7)
    		{
    			mesh_.set_color(v_it.handle(),Red);
    		}
    		else
    		{
    			mesh_.set_color(v_it.handle(),Green);
    		}
    		//mesh_.set_color(v_it.handle(),Green);		
    	}
    	cout<<"Edge:"<<mesh_.n_edges()<<"Face"<<mesh_.n_faces()<<"Vertex"<<mesh_.n_vertices()<<endl;
      /////////////////////////////////////////////////////////////////////////////
    }



  • 相关阅读:
    数组和链表
    IAP升级
    使用Git和Github来管理自己的代码和笔记
    Eeprom和Flash的区别
    程序员的七种武器
    数据结构和算法的关系
    STVD、IAR两种编译器比较
    STM32与STM8操作寄存器的区别
    Linux用户身份与文件权限
    地图缩放到指定经纬度
  • 原文地址:https://www.cnblogs.com/pangblog/p/3243731.html
Copyright © 2011-2022 走看看