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

use*_*710 1 c++ voxel

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

  • 几何
  • 局部和全局坐标或也称为变换
  • 材料或指向另一个结构的指针,其中包含此材料的真实定义

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

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

小智 6

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

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

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