3D模型体素化
来源:互联网 发布:json bytes 编辑:程序博客网 时间:2024/04/28 10:13
体素化(Voxelization)是将物体的几何形式表示转换成最接近该物体的体素表示形式,产生体数据集,其不仅包含模型的表面信息,而且能描述模型的内部属性。表示模型的空间体素跟表示图像的二维像素比较相似,只不过从二维的点扩展到三维的立方体单元,而且基于体素的三维模型有诸多应用。
由于使用的需要,需对模型进行体素化操作,这里采用了一种简单但却有效的操作方法。首先设定模型体素化的分辨率,假设为 N * N * N,之后的操作主要包括两部分:
1. 对模型表面的体素化
这一步的操作比较简单,首先计算出模型的AABB包围盒,然后根据空间分辨率对包围盒进行划分,得到每个大小为(X/N) * (Y/N) * (Z/N)空间像素列表。然后对构成3D模型的多边形或三角形列表进行遍历,得到这些基本体元所对就应的包围盒,然后由AABB求交运算得到这些基本体元所能影响到的体素单元,将这些体素单元做为待判断的基本对象。为了做进一步的精确判定,使用三角形与AABB的求交算法确定这些基本体元所能影响到最终体素,并将这些体素标记为非空,这样就完成了对3D模型表面的体素化操作。
2. 对模型内部的体素化
将模型表面体素化的操作进行完之后即可得到对模型体素表示的一个“外壳”,接下来要做的操作就是进行模型的内部体素化操作。这里采用一种简单的方法。首先将对应的3D模型建立空间八叉树,这棵八叉树主要用于进行基本体元面片的求交操作。然后对模型AABB中的所有空体素,从其中心位置以轴对齐方向来发射两条射线,这两条射线的方向相反,但基本方向都是轴对齐的。对于这两条的射线利用空间模型的八叉树来得到其与3D模型的相交位置,并得到相交点的法向量及到相交点的距离,然后根据这两点法向量之间的关系来判断得到当前体素是在3D模型的内部或是在3D模型的外部。将这样的操作施加于每一个空的体素之后就可以完成对3D模型内部的体素化操作。
但是将这样的操作施加于每一个空的体素速度比较慢,故而此处可以采用扫描的方法来进行加速处理。如果判断得到某个体素的位置为模型内部后,就可以根据射线的方向及这两条射线与模型的交点处的距离来对当前体素相邻的体素进行扫描,这样不需要再做判断就可以标记出相邻体素的状态,这样就加速了整个模型内部的体素化操作。
但是上述这种方法具有局限性,对于非完全闭合的3D模型,这种方法不能很好地进行内部体素化操作,不过自己工程的需要中,这种方法就已经适用了,而且简单易行。
- 上一篇三维模型的主成分分析(3D Model PCA, CPCA, NPCA)
- 下一篇好久没有更新博客了……
- 3D模型体素化
- 3D模型体素化
- 3D模型体素化
- 体素化(Voxelization) 3D模型体素化
- JS 3D 模型
- 3D模型动画
- 3d 模型
- WPF 3D 模型
- 3D模型--UITexture
- 盒子3D模型
- 魔方 3D 模型
- 【u106】3D模型
- 盒子3D模型
- 3d模型
- 3D模型汇总----骨骼模型
- 3D模型下载 - 3D模型免费下载
- tc 3D模型绘图
- XNA-顯示3D模型
- linux/unix 中cut命令应用举例
- OJ刷题之《默认参数--求圆的面积》
- WPF-MVVM
- 大数据时代,MBA教育项目如何追随硅谷
- IOS备忘录
- 3D模型体素化
- android 以编码的方式列出来当前app所有的窗口
- LeetCode - Binary Tree Level Order Traversal
- android ksoap2 中把XML(DataSet) 当做参数传递
- C# RDLC报表
- 黑马程序员—Java入门学习日记基础篇-面向对象总结2
- 友元函数
- C# RDLC报表(二)--使用自定义数据集
- Android 5.0 - ProgressBar 进度条无法展示到按钮的前面