3

我想渲染 3D 体积数据:密度(可以映射到 Alpha 通道),温度(可以映射到 RGB)。目前我正在模拟最大强度投影,例如:最终渲染最密集/不透明的像素。但是这种方法会失去深度感知。

我想模仿烟雾中的火的效果。

所以我的问题是 OpenGL 中基于可用数据生成图像的技术是什么?

欢迎任何想法。

谢谢阿曼。

4

1 回答 1

4

我会先尝试使用体积射线投射器。

您可以在 Google 上搜索“使用 Ray Casting 进行体积可视化”,这应该可以满足您的大部分需求。NVidia 有一个很好的样本(使用 openg)通过 3D 纹理进行光线投射。

在您的具体实施中,您只需要不断地通过累积温度的体积,直到达到所需的密度。

如果您的体积不适合视频内存,您​​可以分段进行光线投射,然后进行合成步骤。

光线投射的简要说明:

CPU:1)在世界空间中渲染一个六面立方体作为绘图图元,确保使用深度剔除。

顶点着色器:2)在顶点着色器中存储顶点的世界位置(这将对每个片段进行插值)

片段着色器: 3)使用插值位置减去相机位置得到遍历体积的向量。4) 使用 while 循环从立方体上的点穿过另一侧的体积。知道何时结束的 3 种方法。A)在每一步测试该点是否仍在立方体中。B) 与立方体进行射线相交并计算相交之间的距离。C) 使用正面剔除对立方体进行预渲染,并将深度存储到第二个纹理贴图中,然后在屏幕像素处采样以获得距离。

5)在循环和设置像素颜色时累积。

于 2010-04-08T18:03:21.007 回答