Opengl 基于堆积纹理的大数据体绘制

Opengl 基于堆积纹理的大数据体绘制,opengl,graphics,3d,visualization,volume-rendering,Opengl,Graphics,3d,Visualization,Volume Rendering,我想实现基于GPU的光线投射体绘制的大数据集,这是大于GPU内存。我试着这样做: (1) 首先,我将体积分成大小相等的砖块 (2) 然后我根据传递函数来决定每个砖块是否透明 (3) 然后我将不透明的砖块存储到“压缩纹理”中。为了在光线投射渲染期间进行采样,我创建了另一个称为“索引纹理”的纹理,该纹理将砖块索引存储在压缩纹理中 在着色器中渲染期间进行采样时,首先计算采样点所在的砖块。然后访问索引纹理以获取采样点的值。但默认情况下,该值是插值后的,并且不是压缩纹理中砖块的索引 因此,我的问题是:在光

我想实现基于GPU的光线投射体绘制的大数据集,这是大于GPU内存。我试着这样做:

(1) 首先,我将体积分成大小相等的砖块

(2) 然后我根据传递函数来决定每个砖块是否透明

(3) 然后我将不透明的砖块存储到“压缩纹理”中。为了在光线投射渲染期间进行采样,我创建了另一个称为“索引纹理”的纹理,该纹理将砖块索引存储在压缩纹理中

在着色器中渲染期间进行采样时,首先计算采样点所在的砖块。然后访问索引纹理以获取采样点的值。但默认情况下,该值是插值后的,并且不是压缩纹理中砖块的索引


因此,我的问题是:在光线投射渲染期间进行采样时,如何从索引纹理中正确获取压缩纹理中砖的索引(采样点所在的位置)?

这不是一个真正的问题,假设体积立方体从[0,1]³开始,然后将其拆分为,比如说每个方向8个块。然后将分数坐标乘以8(或任何值),并向下舍入到最接近的整数,这将为您提供索引。四舍五入后,从缩放分数坐标中减去索引,从而获得子块中的分数位置,即

volcube_pos = volcube_frac_pos * volcube_blocks;
volcube_index = (int)floor(volcube_pos);
subblock_pos = volcube_pos - volcube_index;
现在所有这些块都必须存储在某个地方。将它们放入常规的压缩3D纹理需要禁用过滤,注意fencepost问题()并自己进行所有过滤插值


另一种方法是使用NVidia的无绑定纹理,而不是压缩纹理,我将研究我自己——碰巧我自己正在进行体绘制——这是非常感谢的。我按照您所说的计算块的索引和子块中的分数位置,并将它们存储到“压缩纹理”中。我想从“索引纹理”中获取块的索引,并使用它们访问“压缩纹理”。您能告诉我我可以使用哪些函数来完成所有过滤插值吗?