我想渲染3D体积数据:密度(可以映射到Alpha通道),温度(可以映射到RGB)。目前我正在模拟最大强度投影,例如:在end.But中渲染最密集/不透明的像素这种方法失去了深度感知。
我想模仿这种效果,就像烟雾中的火焰。
所以我的问题是,OpenGL中基于可用数据生成图像的技术是什么?
任何想法都是受欢迎的。
谢谢,阿曼。
发布于 2010-04-09 02:03:21
我会先试试体积光线投射器。
你可以在谷歌上搜索"Volume Visualization With Ray most“,这应该会给你最需要的东西。NVidia有一个通过3D纹理进行光线投射的很好的样本(使用openg)。
在您的特定实现中,您只需要不断地遍历累积温度的体积,直到达到所需的密度。
如果您的体积不适合视频内存,您可以按块进行光线投射,然后执行合成步骤。
光线投射的快速说明:
CPU: 1)在世界空间中渲染一个六边立方体作为绘图基元,确保使用深度剔除。
顶点着色器: 2)在顶点着色器中存储顶点的世界位置(这将对每个碎片进行插值)
片段着色器: 3)使用插值位置减去相机位置来获得遍历体积的向量。4)使用while循环从立方体上的点到另一侧遍历体积。知道何时结束的三种方法。A)在每一步测试该点是否仍在立方体中。B)与立方体进行光线相交,并计算相交之间的距离。C)使用正向面剔除对立方体进行预渲染,并将深度存储到第二个纹理图中,然后在屏幕像素上采样以获得距离。
5)在循环和设置像素颜色时进行累积。
https://stackoverflow.com/questions/2591956
复制相似问题