2015-11-03 86 views
1

我正在嘗試使用C++和DirectX11實現海洋場景。目前我有一個投影柵格,郭士納波和一個基本的陰影。我的問題是,當我水平對準攝像機時,我可以看到水平線,即使在高頂點數的情況下,投影的網格也會變得不足。這些截圖說明問題:投影柵格水位詳細信息

shaded water surface

wireframe water surface

我知道這個問題的原因是在投影網格的概念(網格在攝像機附近詳述,遠非如此粗糙),但必須有最佳做法來解決這個問題。

任何想法?

+0

我認爲http://computergraphics.stackexchange.com/是一個更好的地方問這個問題。 –

+0

感謝您的提示,我也問過那裏的問題。 –

回答

1

貝內迪克特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

0

你應該嘗試在片段着色器而不是頂點着色器中實現你的「基礎着色」算法。

+0

它現在在像素着色器中實現。 –