【发布时间】:2013-03-19 02:41:31
【问题描述】:
我正在 OpenGL 4.3.0 中实现体素光线投射器。我有一个基本版本,我将浮点值的 256x256x256 体素数据集存储在相同尺寸的 3D 纹理中。
但是,我想使用八叉树制作 LOD 方案。我将数据存储在主机端的一维数组中。根的索引为 0,根的子节点的索引为 1-8,下一级的索引为 9-72,依此类推。八叉树总共有 9 个级别(最后一个级别具有完整的 256x256x256 分辨率)。因为八叉树总是满的,所以结构是隐式的,不需要存储指针,每个体素只有一个浮点值。我已经设置好了一维索引和遍历算法。
我的问题是我不知道如何将它存储在纹理中。 GL_TEXTURE_MAX_SIZE 太小(16384),无法使用我已经找到索引的一维数组方法。我需要将它存储在 3D 纹理中,我不知道当我尝试将我的 1D 数组塞入其中时会发生什么,也不知道如何选择尺寸和 1D->3D 转换方案以免浪费空间或时间。
我的问题是,是否有人有一个很好的策略来将整个八叉树结构存储在一个 3D 纹理中,在这种情况下如何为它选择维度和索引。
【问题讨论】:
-
你的最大纹理大小不是 3397,而是属性的枚举值。使用以下代码获取最大纹理尺寸: int size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size);
-
是的,当然。感谢您指出了这一点!我已经编辑了原始问题。
标签: opengl 3d glsl textures octree