2012-03-25 70 views
1

我在我的效果文件中創建霧特徵..在像素着色器中,我計算攝像頭位置和輸入位置之間的距離:C#/ HLSL&XNA - 通過HLSL中的百分比將兩種顏色混合在一起

float x = distance(_in.pos3d, CameraPosition); 
float fd; 
if(Fog) 
{ 
    if(x > FogDistance) 
     fd = ((x-FogDistance) * FogIntensity > 100) ? 100 : ((x-FogDistance) * FogIntensity); 
    //_in.color = ???; 
} 

其中: x是來自攝影機位置以及頂點位置的距離, fd是霧顏色的比率, FogDistance就是對象不會受大霧影響的距離, FogIntensity霧是多麼強烈。

我想要得到的是一種包含霧顏色(fd%)的顏色。例如,如果霧色爲橙色,則輸入爲白色,fd爲25%,生成的顏色爲白色+ 25%橙色。

編輯:順便說一句,抱歉的不可維護的設置代碼。編輯2:我注意到有兩個透明圖層有一個透明的結果,所以我清理了一下這個問題。頂點輸入沒有百分比。

回答

2

你想lerp函數(MSDN)。這就是「線性插值」功能。

顏色的像素着色器在本質上是一樣的東西載體,這樣你就可以對他們使用任何載體的功能。

而不是百分比(範圍爲0到100),該lerp函數取值0和1之間

所以,你的代碼可能會看起來像如下:

_in.color = lerp(_in.color, someOtherColor, fogAmount);