- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想渲染 3D 体积数据:密度(可以映射到 Alpha channel )、温度(可以映射到 RGB)。目前我正在模拟最大强度投影,例如:最后渲染最密集/不透明的像素。但是这种方法失去了深度感知。
我想模仿烟雾中的火一样的效果。
所以我的问题是 OpenGL 中基于可用数据生成图像的技术是什么?
欢迎任何想法。
谢谢阿尔曼。
最佳答案
我会先尝试体积光线转换器。
您可以在 google 上搜索“使用光线转换的体积可视化”,这应该可以满足您的大部分需求。 NVidia 有一个很好的示例(使用 openg)通过 3D 纹理进行光线转换。
在您的具体实现中,您只需要不断逐步通过累积温度的体积,直到达到所需的密度。
如果您的体积不适合显存,您可以分段进行光线转换,然后进行合成步骤。
光线转换的简要说明:
中央处理器:1) 在世界空间中渲染一个六边形立方体作为绘图基元,确保使用深度剔除。
顶点着色器:2) 在顶点着色器中存储顶点的世界位置(这将对每个片段进行插值)
片段着色器:3) 使用插值位置减去相机位置得到遍历体积的矢量。4) 使用 while 循环从立方体上的点逐步穿过另一侧的体积。知道何时结束的 3 种方法。 A)在每一步测试点是否仍在立方体中。 B) 与立方体进行射线相交并计算相交点之间的距离。 C) 使用前向面剔除对立方体进行预渲染,并将深度存储到第二个纹理贴图中,然后仅在屏幕像素处采样以获得距离。
5) 在循环和设置像素颜色时累积。
关于OpenGL/GLSL : What is the best algorithm to render clouds/smoke out of volumetric data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591956/
我想渲染 3D 体积数据:密度(可以映射到 Alpha channel )、温度(可以映射到 RGB)。目前我正在模拟最大强度投影,例如:最后渲染最密集/不透明的像素。但是这种方法失去了深度感知。 我
我是一名优秀的程序员,十分优秀!