您的位置:首页 > 其它

根据Mesh生成Cage的心路历程(4)

2010-01-29 13:54 183 查看
下面开始描述我是怎么样去实现方法五的。
根据我目前掌握的知识,和实验室已知的编程条件,方法五我需要以下三个过程:
(1) 在CGAL框架下生成GPU的绘制数据。
对原Mesh的每个面生成局部坐标系;



由局部坐标系形成面的OBB包围盒Shell;







Shell划分为5个Tetrahedron;
根据离散化规格沿Z轴产生等距的Slice,每个Slice与Tetrahedron产生的交点即为GPU的输入顶点数据流。







Cylinder内部看



(2) GPU绘制
根据得到的顶点数据流,以及距离计算函数对每个切片数据进行绘制。绘制的过程其实一直都是有问题的,个中的原因我也说不清楚,只是知道结果是不正确的。









直到这个图才有了点成功的迹象~





对深度计算方法进行调整好以后才出现了自己想要的结果。以下是三个连续的切片。从整体上来看数据还是好的,但是最遗憾的就是中间的黑色部分出现了间断。







由于vtk处理的数据是8或24位的,而D3D的函数默认生成bmp图是32位的。这里幸亏张大帮忙,并提醒我用opencv来解决。Opencv不错,用起来挺方便的,建议数字图像处理的人用。
生成的64x64的8位灰度图如下:







(3) VTK根据切片数据,由2D的bmp图片生成3D网格模型



上图为GPU的绘制结果,通过vtk(Visualization Toolkit)绘制的结果。
vtkBMPReader *reader = vtkBMPReader::New(); reader->SetFilePrefix("D://cylinder/");
reader->SetFilePattern("%s%d.bmp");
reader->SetDataByteOrderToLittleEndian();
reader->SetDataSpacing(1, 1, 3);
reader->SetFileNameSliceSpacing(1);
reader->SetDataExtent(0, 63, 0, 63, 1, 50);
reader->Allow8BitBMPOn();
reader->Update();



生成了STL文件格式,然后再使用3ds Max进行obj文件格式转换。





比较郁闷的是网格模型竟然是双层的,不知道是什么原因啊?还好我的Deformation框架可以把文件读进来啊。
到现在,我的工作也可以说是到了一个段落了。接下来怎么改?迷茫~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: