【发布时间】:2016-01-01 02:43:27
【问题描述】:
我正在尝试使用 GPU 将一些 3D 形状渲染为 3D 纹理。我正在使用 Framebuffer 对象来完成此操作。到目前为止,我发现唯一可行的方法是一次渲染到 3D 纹理的一个切片(或层)。
例如,如果我想在 3D 纹理上绘制一个球体,我会将球体的适当横截面绘制到纹理的每一层。
这适用于小分辨率或少量形状,但随着分辨率或复杂性的增加会迅速减慢。
有没有更正确或更快的方法?我的目标是中等老旧的硬件,所以我仅限于 OpenGL 3.x。具体来说,我不能使用一些the techniques described here。
【问题讨论】:
-
看来,在可用的情况下,在片段着色器中使用
imageStore是正确的答案。我可以简单地将形状渲染到一个平面(比方说 xy 平面),而不是为体积的每个切片绘制我的形状的横截面,然后对于每个“片段”,我可以计算我的形状的 z 间隔并且只需imageStore3D 纹理中的正确坐标。如何在不允许此类控制的硬件上有效执行此操作的问题仍然悬而未决。
标签: c++ opengl 3d volume voxel