我正在嘗試使用C++和DirectX11實現海洋場景。目前我有一個投影柵格,郭士納波和一個基本的陰影。我的問題是,當我水平對準攝像機時,我可以看到水平線,即使在高頂點數的情況下,投影的網格也會變得不足。這些截圖說明問題:投影柵格水位詳細信息
我知道這個問題的原因是在投影網格的概念(網格在攝像機附近詳述,遠非如此粗糙),但必須有最佳做法來解決這個問題。
任何想法?
我正在嘗試使用C++和DirectX11實現海洋場景。目前我有一個投影柵格,郭士納波和一個基本的陰影。我的問題是,當我水平對準攝像機時,我可以看到水平線,即使在高頂點數的情況下,投影的網格也會變得不足。這些截圖說明問題:投影柵格水位詳細信息
我知道這個問題的原因是在投影網格的概念(網格在攝像機附近詳述,遠非如此粗糙),但必須有最佳做法來解決這個問題。
任何想法?
貝內迪克特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)));
}
}
下面是結果:
你應該嘗試在片段着色器而不是頂點着色器中實現你的「基礎着色」算法。
它現在在像素着色器中實現。 –
我認爲http://computergraphics.stackexchange.com/是一個更好的地方問這個問題。 –
感謝您的提示,我也問過那裏的問題。 –