vcglib实例

vcglib实例

先给出MyMesh

	// define mesh type
	class Vertex; class Edge; class Face;
	struct UsedTypes : public vcg::UsedTypes<
		vcg::Use<Vertex>::AsVertexType,
		vcg::Use<Edge>  ::AsEdgeType,
		vcg::Use<Face>  ::AsFaceType   > {};

	class Vertex : public vcg::Vertex<UsedTypes, vcg::vertex::Qualityf, vcg::vertex::Color4b, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::VFAdj, vcg::vertex::Mark, vcg::vertex::BitFlags> {};
	class Face : public vcg::Face<  UsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::FFAdj, vcg::face::VFAdj, vcg::face::Mark, vcg::face::BitFlags> {};
	class Edge : public vcg::Edge<  UsedTypes, vcg::edge::VertexRef> {};

	class Mesh : public vcg::tri::TriMesh< std::vector<Vertex>, std::vector<Face>, std::vector<Edge> > {};

vcg导出Quality

vcg默认的格式off不支持quality属性
但ply格式支持quality属性但要加

	vcg::tri::io::ExporterPLY<Mesh>::Save(m1,“x.ply", io::Mask::IOM_VERTQUALITY);

添加线属性

vcg::tri::UpdateTopology::AllocateEdge(m);

在meshlab中输出log

MeshLabInterface::Log(“xx”);

遍历顶点一邻域

点和面都需要AFadjacent结构

    RequireVFAdjacency(m);
    vcg::tri::UpdateTopology<MyMesh>::VertexFace(m);
	vcg::face::VFIterator<MyFace> vfi(v);
	for (; !vfi.End(); ++vfi)
	{
		MyFace* f = vfi.F();

		for (int i = 0; i < 3; ++i)
		{
			f->V(i)->SetV();
		}
	}

其中vfi是顶点v周围面的数组的第一个元素的指针,for循环遍历包含顶点v的所有面。

自己定义顶点属性

自己定义每个顶点的索引

MyMesh::PerVertexAttributeHandle<int> vIndex = vcg::tri::Allocator<MyMesh>::GetPerVertexAttribute<int>(m,std::string("Vertex Index"));

给顶点赋颜色

class MyVertex : public vcg::Vertex<MyUsedTypes,vcg::vertex::Color4b, vcg::vertex::Coord3f > {};

	for (MyMesh::VertexIterator vi = m.vert.begin(); vi != m.vert.end(); ++vi)
	{
		// Shander configuretion
		MyMesh::VertexType::ColorType& colorV = vi->C();
		colorV = vcg::Color4b::Black;
	}
	vcg::tri::io::ExporterOFF<MyMesh>::Save(mOut, "output.off", 4);

给face赋颜色

注意Myface要有vcg::face::Color4b属性

class MyFace : public  vcg::face::VertexRef, vcg::face::Color4b > {};
	
	for (int i = 0; i < faces.size(); ++i)
	{
		mOut.face[i].C() =  vcg::Color4b::Black;

	}
	vcg::tri::io::ExporterOFF<MyMesh>::Save(mOut, "output.off", vcg::tri::io::Mask::IOM_FACECOLOR);

vcg详细介绍

http://www.doc88.com/p-9005336574343.html

计算曲率

注意在计算曲率之前要去除非流形面,不然程序崩溃

	const int nDuplicateFaces = vcg::tri::Clean<MyMesh>::RemoveDuplicateFace(m);
	vcg::tri::UpdateCurvatureFitting<MyMesh>::computeCurvature(m);

简化

注意计算简化后可能存在非流行,删除非流行face后还要补洞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值