使用CUDA纹理存储二维曲面
我目前正在使用CUDA在3D三角形网格(基本上是任何形状)上开发3D热流模拟 我想通过使用CUDA纹理或曲面来利用空间位置。因为我有一个3D网格,所以我认为3D纹理是合适的。但是,在看了不同的示例之后,我不再那么确定:3D纹理通常用于体积,而不是像我这样的曲面使用CUDA纹理存储二维曲面,cuda,simulation,mesh,Cuda,Simulation,Mesh,我目前正在使用CUDA在3D三角形网格(基本上是任何形状)上开发3D热流模拟 我想通过使用CUDA纹理或曲面来利用空间位置。因为我有一个3D网格,所以我认为3D纹理是合适的。但是,在看了不同的示例之后,我不再那么确定:3D纹理通常用于体积,而不是像我这样的曲面 我可以为多边形网格使用3D纹理吗?这有意义吗?如果没有,CUDA中还有其他方法或数据结构可用于我的案例吗?使用3D纹理存储曲面网格实际上是个好主意。为了更好地指出这一点,让我回顾一下 使用二维和三维网格存储八叉树并 使用3D纹理创建八叉
我可以为多边形网格使用3D纹理吗?这有意义吗?如果没有,CUDA中还有其他方法或数据结构可用于我的案例吗?使用3D纹理存储曲面网格实际上是个好主意。为了更好地指出这一点,让我回顾一下 使用二维和三维网格存储八叉树并
8
位RGBA 3D纹理[0,1]x[0,1]x[0,1]
,称为间接池。树的每个节点都是一个间接网格。每个子节点由RGBA的前三个坐标标识,而第四个节点存储一些其他信息,例如,节点是否为叶或是否为空
考虑论文中报告的四叉树示例(从论文中借用的图)
A
、B
、C
和D
节点(框)分别存储为纹理元素(0,0)
、(1,0)
、(2,0)
和(3,0)
,对于四叉树而言,包含4个元素,每个元素存储到子节点的链接。通过这种方式,可以通过利用纹理存储器的硬件过滤功能对树进行任何访问,如下图所示:
通过以下代码(它是用Cg编写的,但我相信它可以很容易地移植到CUDA):
通过2D纹理存储树元素
树的元素可以通过利用(u,v)
坐标的经典方法存储,请参阅。与上述相关的论文讨论了改进该方法的方法,但这超出了本答案的范围