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

C++ 体素数据/openvdb结构如何工作?,c++,voxel,C++,Voxel,由于我不想重新发明轮子,我正在寻找一个好的数据结构,它可以帮助我为3D渲染引擎提供一个真正基本的3D编辑器,我基本上是在寻找一个能够存储必要数据的数据结构,在我的情况下,它仅限于: 几何学 局部坐标和全局坐标或也称为变换 材质或指向另一个结构的指针,该结构包含此材质的真实定义 这是我第一个使用3D渲染的方法,但是我有一个关于光栅化器如何工作、三角形、点和线如何被GPU处理来产生图像的好的基础,我的问题是现在我不知道这个新的“基于体素”的数据结构是什么,即使这对我来说是正确的结构。 我认为这个

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

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

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


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

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

OpenVDB基于CPU,但扩展了单个3D卷,因此具有多分辨率。许多较小的NXN卷被合并到一个树中,形成一个非常大的卷


您使用的表示方式在很大程度上取决于您要执行的三维编辑操作的类型。你想建造树木和有机物吗?是否要编辑和建模流体?是否要为角色建模?。。对于一个真正基本的,即intro 3D编辑器,我建议使用三角形和网格,因为它们无处不在,以及GPU管道是如何设计的。

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

OpenVDB基于CPU,但扩展了单个3D卷,因此具有多分辨率。许多较小的NXN卷被合并到一个树中,形成一个非常大的卷

您使用的表示方式在很大程度上取决于您要执行的三维编辑操作的类型。你想建造树木和有机物吗?是否要编辑和建模流体?是否要为角色建模?。。对于一个真正基本的,即intro 3D编辑器,我建议使用三角形和网格,因为它们无处不在,以及GPU管道是如何设计的