体素数据/ openvdb结构如何工作?

时间:2013-07-13 05:56:28

标签: c++ voxel

由于我不想重新发明轮子,我正在寻找一个好的数据结构,可以帮助我为3D渲染引擎提供一个非常基本的3D编辑器,我基本上在寻找能够实现的数据结构存储必要的数据,在我的情况下仅限于:

  • 几何
  • 本地和全球坐标或也称为转换
  • 包含此材料真实定义的另一个结构的材料或指针

现在这是我用3D渲染的第一种方法,但我有一个很好的基础,关于光栅化器如何工作,GPU如何处理三角形,点和线以产生图像,我的问题是,现在我不知道得到这个新的“基于体素”的数据结构,即使这个OpenVDB对我来说是正确的结构。

我认为这个引擎的大多数“输入”都来自obj类文件,所以基本上是三角形和点数,但我仍然不想错过最新最好的文件,所以我想,有什么真正的区别OpenVDB和包含三角网格的通用数据结构之间? OpenVDB有哪些可能的实际应用程序?

1 个答案:

答案 0 :(得分:6)

如果你理解2D中矢量和光栅艺术之间的区别,那就类似于三角形和体素之间的差异。矢量艺术使用线段和几何来表示形状,就像三角形代表3D中的网格一样。或者,图像使用排列在网格上的像素来表示形状,就像体素用于表示3D体积一样。例如,球体可以表示为网格,具有三角形......或者作为一组开/关体素在3D网格上.3D纹理现在可以存储在GPU上,允许高效的光线投射,遍历等。它们对烟雾和流体特别有用。

OpenVDB是基于CPU的,但扩展了单个3D卷,因此它具有多分辨率。许多较小的NxNxN卷被组合成一棵树,以产生更大,更大的体积。

您使用的表示形式在很大程度上取决于您想要执行的3D编辑操作的类型。你想建造树木和有机物吗?您想编辑和模拟流体吗?你想模拟角色吗?..对于一个非常基本的,即介绍3D编辑器,我会建议三角形和网格,因为这些无处不在,以及如何设计GPU流水线。