【问题标题】:Drawing over terrain with depth test?通过深度测试绘制地形?
【发布时间】:2014-04-28 16:43:09
【问题描述】:

我正在尝试在不平坦的地形上渲染几何形状(从高度图加载/形状几何也是根据高度图的平均高度生成的,但它们并不完全适合它)。我有以下问题 - 有时地形会通过图片上显示的形状显示。

Open Image

我需要在启用深度测试的情况下绘制地形和形状,这样它们就不会阻碍场景中的其他对象。有人可以提出一个解决方案来确保形状始终呈现在顶部吗?将它们提升起来并不可行...我需要替换地形上实际像素的颜色,而在像素着色器中这样做似乎太昂贵了..

提前致谢

【问题讨论】:

  • 您可以使用DepthBias(可能更好SlopeScaledDepthBias)或模板缓冲区来掩盖地形。查找贴花
  • 您提到您需要进行深度测试以避免与场景中的其他对象发生障碍。但是,如果您可以对要在地形上绘制的形状进行深度排序,请禁用深度测试/写入,在地形之后直接渲染它们并重新启用深度测试/写入以渲染所有其他对象,您应该达到所需的效果.

标签: windows-runtime directx-11 depth-testing


【解决方案1】:

我遇到了类似的问题,我就是这样解决的:

  • 您首先渲染地形并保留深度缓冲区。不渲染 任何对象
  • 渲染要放置在地形上的形状的实心边界框。
  • 您需要确保您的边界框覆盖所有 形状覆盖的高度范围
  • 过度保守的估计是使用整个全局的最小和最大高程 地形
  • 在像素着色器中,您读取深度缓冲区并重建世界空间位置
  • 你检查这个位置是否在你的形状内
  • 在您的情况下,您可以检查其 xy (xz) 投影是否在给定距离内 给定圆圈的中心
  • 将此位置转换为形状的局部坐标系并计算所需的颜色
  • 在渲染目标上进行 Alpha 混合

这种方法可以使形状与地形表面完美对齐。它也不会产生任何人工制品并适用于任何地形。 可能的缺点是它需要使用延迟式着色,我不知道你是否可以这样做。不过,我希望这可能对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2013-08-05
    • 2015-09-08
    相关资源
    最近更新 更多