- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在研究光线转换和体素,这是一个很好的组合。 Sebastian Scholz 的 Voxelrenderer 很好地实现了这一点,但也使用了 OpenGL。我想知道他的公式是如何运作的;如何将 OpenGL 与光线转换和体素一起使用?光线转换的想法不是为每个像素(或 Doom 中的线条)转换光线,然后绘制结果吗?
最佳答案
提到的光线转换器是一种体素渲染器,即一种可视化体积数据的方法,例如存储在 3D 纹理中的不透明度。 Doom 的光线转换算法还有另一个目的:对于屏幕上的每个像素,找到 map 的第一个平面并在那里绘制颜色。现代 GPU 的光栅化能力淘汰了光线转换器的这种使用。
实时可视化体积数据仍然是一项由特殊硬件完成的任务,通常用于医学和测地线成像系统。基本上,这些是保存体积 RGBA 数据的大量 RAM(几十 GB)。然后,对于屏幕上的每个像素,一条光线通过体积转换,并将 RGBA 数据集成在该光线上。 GPU Voxelrenderer 通过片段着色器做同样的事情;伪代码:
vec4f prev_color;
for(i=0; i<STEPS; i++) {
p = ray_direction * i*STEP_DELTA;
voxel = texture3D(volumedata, p);
prev_color = combine(voxel, prev_color);
}
final_color = finalize(prev_color);
finalize
和 combine
取决于数据的种类和您想要可视化的内容。例如,如果您想要整合密度(如在 X 射线图像中),combine
将是一个求和操作并完成归一化。如果您要想象一朵云,您会在体素之间进行 alpha 混合。
关于opengl - 光线转换体素和 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483664/
我正在尝试使用 Sfml 编写 2D 游戏。对于那个游戏,我需要一个 Lightengine 和一些代码,这些代码可以为我提供玩家可见的世界区域。由于这两个问题非常吻合(实际上是相同的),我想同时解决
我是一名优秀的程序员,十分优秀!