我希望能够渲染3D体数据:密度(可以映射到Alpha通道),温度(可以映射到RGB)。 目前我正在模拟最大强度投影,例如:在最后呈现最密集/不透明的像素。但是这种方法会失去深度感知。 我想模仿烟雾中火焰的效果。 那么我的问题是,在OpenGL中生成基于可用数据的图像的技术是什么? 欢迎任何想法。 谢谢Arman。
我会先尝试使用体积光线投射器。您可以搜索“使用光线投射进行体积可视化”,那应该能给您大部分所需信息。NVIDIA有一个很好的示例(使用opengl)通过3D纹理进行光线投射。在您特定的实现中,您只需要不断地遍历体积并累加温度,直到达到所需密度。如果您的体积不适合视频内存,则可以分段进行光线投射,然后进行组合步骤。快速描述光线投射:CPU: 1)以世界空间中的六面立方体作为绘图基元,确保使用深度剔除。顶点着色器: 2)在顶点着色器中存储顶点的世界位置(这将插值每个片段)片段着色器: 3)使用插值位置减去相机位置来获取通过体积的遍历向量。 4)使用while循环从立方体上的点穿过另一侧遍历体积。有三种方法可以知道何时结束。 A)在每个步骤中测试点是否仍在立方体中。 B)与立方体进行光线交叉,并计算交叉点之间的距离。 C)对具有正向面剔除的立方体进行预渲染,并将深度存储到第二个纹理映射中,然后只需在屏幕像素处进行采样即可获取距离。5)在循环时累加并设置像素颜色。