预计的网格水地平线细节

时间:2015-11-03 20:17:44

标签: c++ 3d geometry directx-11 hlsl

我试图用C ++和DirectX11实现海洋场景。目前我有一个投影网格,Gerstner波浪和基本阴影。我的问题是,当我水平瞄准我的相机时,所以我可以看到水平面,在远处,投影网格变得不足,即使在高顶点数。这些屏幕截图说明了问题:

shaded water surface

wireframe water surface

我知道问题的原因在于投影网格的概念(网格在摄像机附近详细,远离它很粗糙),但必须有一个最佳实践来解决这个问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

Benedikt Bitterli和joojaa在这里回答了我的问题: https://computergraphics.stackexchange.com/questions/1681/projected-grid-water-horizon-detail

我现在选择了最懒的解决方案。我根据顶点着色器中相机的距离计算衰减系数,然后逐渐平滑距离中的波浪。

功能:

float CalculateWaveAttenuation(float d, float dmin, float dmax)
{
    // Quadratic curve that is 1 at dmin and 0 at dmax
    // Constant 1 for less than dmin, constant 0 for more than dmax
    if (d > dmax) return 0.f;
    else
    {
        return saturate((1.f / ((dmin-dmax)*(dmin-dmax))) * ((d-dmax) * (d-dmax)));
    }
}

结果如下:

shaded wireframe

答案 1 :(得分:0)

您应该尝试在片段着色器而不是顶点着色器中实现“基本着色”算法。