Voxelization 三维模型体素化

  1. 导入mesh文件,以obj文件为例:
    一般文件mesh文件内容有顶点与面,可以用三维设计软件生成,生成的时候注意mesh文件只保存三角形面片,以便后面读取
    obj文件格式:
    v x y z
    f v1 v2 v3
    只需要处理这两个关键字就行了,v开头的是三角形面片,f开头的是三角形的三个顶点。
  2. 离散三角形面片
    这里分为两步:
    第一步:离散三条边(线段)
    这个应该很简单,沿着边每隔dx去取点,然后吧取到的点放在放在体素中心就行了(可以看图形学的书)
    第二步:离散三边围成的面
    如果上面写好了离散线段的程序的话,这一步也很简单,首先很容易得到平行线与三角行的两个交点,直接利用向量计算就行了,得到交点以后就得到线段了。这里的间距要取的小一点,这个图里的间距太大了,两条平行线的最短距离应该要小于0.707*dx,这个0.707是二分之根号二,可以证明。
    最后一张离散完的bunny:
  3. 体的离散
    最后一步,实体的离散,只要保证表面没有空洞,最简单的办法就是在实体内部找一个种子,用种子填充算法进行填充,算法可以参考二维的扫描种子填充算法,百度就有一大堆。
    稍微不足的是,体内的种子需要手动指定,没有高效的办法。下面给出两种我觉得还可行的方法。
    方法一:可以尝试任取一个面片的中心向法向量负方向移动一段距离作为种子(当然有可能不在体内),但是大概率还是在体内的,但是如果不在的话,就吧体外给填充了,而且会触碰到包围盒边界一般就终止报错了。
    方法二:还可以取一个体素,在这个体素上随便做个小面,然后遍历整个模型在这个小面上的投影面积,如果是正数,就在模型内部,如果为负数的话,再找下一个种子点,这个种子点可以随机生成,因此这个方法是自适应的,但是当模型占空间位置较小的时候,种子点随机撒不到模型内部的话,就要花点时间了(按照概率论总会撒到的你说是不是?)。
  4. 关于效率
    这个程序因为基本都是写浮点数运算,不需要迭代,所以比较还是比较快的,基本上点一下就出来了。没有用到GPU加速。
    如果有性能要求的话,可以在离散面片的时候用上OpenMP并行,因为每个面片的离散都是独立的,而且也没有访问冲突,所以加速比可以达到很高。
    如果还有更高的要求的话,可以用八叉树算法(看论文),用八叉树编码整个空间,然后用八叉树编码的位运算代替浮点数运算,可以达到更高的效率。
    这儿应该离散个上亿规模的体素应该不是问题了。
    如果还有更高更高的要求的话,用GPU,因为这本来就是图形学的任务。

最终效果:https://www.bilibili.com/video/BV14K4y1U72v?p=7

Voxelization 三维模型体素化相关推荐

  1. Navmesh研究(二)体素化过程

    本文翻译自:http://critterai.org/projects/nmgen_study/voxelization.html 体素化过程 构建导航网格的第一步是使用体素化创建一个实体高度域 创建 ...

  2. 体素化(Voxelization) 3D模型体素化

    体素化(Voxelization)是将物体的几何形式表示转换成最接近该物体的体素表示形式,产生体数据集,其不仅包含模型的表面信息,而且能描述模型的内部属性.表示模型的空间体素跟表示图像的二维像素比较相 ...

  3. 体素化(Voxelization)

    参考链接 体素化(Voxelization)是将物体的几何形式表示转换成最接近该物体的体素表示形式,产生体数据集,其不仅包含模型的表面信息,而且能描述模型的内部属性.表示模型的空间体素跟表示图像的二维 ...

  4. Open3D Voxelization 体素化

    Voxelization 体素化 点云和三角形网格是非常灵活但不规则的几何类型.体素网格(voxel grid)是在 3D 网格上定义的 3D 中的另一种几何类型,体素可以被视为 2D 中像素(pix ...

  5. Voxelization——体素化模型

    上周部门内部进行分享知识讲座时讲到一个词Voxelization,也就是体素化,也就是用某些东西充满一个物体的内部,如下面这两张图,用小方块充满圆环和锥体. 其主要算法也有多种,我这里采用的是用bou ...

  6. 3D模型体素化(Voxelization)过程实现与分析(二)

    文章目录 体素化方法 原理展示 实现过程 使用Buffer 着色器 读取体素坐标 实现代码 顶点着色器 片元着色器 CPU读取 效果图 体素化方法 体素化能够对模型进行简化,得到均匀的网格,在求模型的 ...

  7. 『OPEN3D』1.6 Voxelization体素化

    目录 1 从triangle meshes中创建体素 2 从点云中创建体素 3 体素包含测试(Inclusion test) 4 Voxel carving 在点云处理的内容中,简单介绍了open3d ...

  8. Python 三维网格体素化

    本文主要是实现将一个网格模型体素化,实现不同分辨率的体素化效果,并且可视化输出为obj文件!首先利用trimesh对mesh进行采样,然后根据采样点得到各个体素点的占有值. 效果 通过调整分辨率以及采 ...

  9. Open3d学习计划——高级篇 6(体素化)

    Open3d学习计划--高级篇 6(体素化) 点云和三角网格是一种十分灵活的,但是不规则的几何类型.体素网格是通过规则的3D网格来表示的另一种3D几何类型,并且它可以看作是2D像素在3D上的对照物.O ...

最新文章

  1. 在ASP.NET中跟踪和恢复大文件下载
  2. 规划文章的“显示效果”,还是太多犹豫。
  3. 【组队学习】【29期】2. 计算机视觉
  4. jquerynbsp;easyuinbsp;dateboxnbsp;的使用nbsp;.
  5. java构造函数经典详解
  6. php管理员登录文件,快速的事情,只有管理员,PHP才能访问文件
  7. 使用git在本地电脑与远程GitHub/gitlub库中clone别人的github上的远程仓库代码,找资源
  8. css 毛玻璃_css揭秘-视觉效果
  9. 速修复!VMware vCenter Server 所有版本受严重的 RCE 漏洞影响
  10. 管理系统统一鉴权服务器,确认服务器已启用密码鉴权
  11. Android 安装腾讯X5内核
  12. C语言 流缓冲 Stream Buffering
  13. 写给小温——当繁花落尽的一刻
  14. <aop:aspectj-autoproxy />AOP自动代理
  15. 常用的无线充发射IC芯片
  16. SAP 批量修改或添加BOM组件
  17. Windows C盘清理方法
  18. kali密码破解笔记
  19. 趣味数学:解24点游戏小技巧
  20. 不一样的码农,UFI

热门文章

  1. 基于C++的简易RLC电路仿真器与滤波器仿真测试
  2. redis服务之主从复制、哨兵模式、群集模式
  3. VR/AR 技术学习园地
  4. 亚马逊获20亿美元信用额度:有助新业务投资
  5. Java面试题及答案2019版(下),mysql事务隔离级别原理
  6. 【Error】初始化ant design pro项目时遇到“pro 不是内部或外部命令”
  7. 计算机毕业设计Java房产中介管理系统(源码+系统+mysql数据库+lW文档)
  8. 如何打赢一场 DevOps 阻击战
  9. 【Golang源码阅读】strings/builder.go
  10. lombok get/set 方法未生效,解决办法